首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从HTML表单中收集所有值?

如何从HTML表单中收集所有值?
EN

Stack Overflow用户
提问于 2020-01-29 06:34:08
回答 1查看 106关注 0票数 0

我目前正在尝试使用jQuery从HTML中收集信息,但是我被困住了。每次我console.log payload都是空的,没有捕获输入值。

问题:

  • 为什么在我将值输入表单后,在结束时payload是空的?怎么改正呢?
  • 我是用document.ready来做这个还是用window.onload?

如有任何帮助,请见谅。

下面是我最后一次尝试jQuery:

代码语言:javascript
运行
复制
$(document).ready(function() {

  const ApplyOpeningPayloadBuilder = function() {

    let payload = {
      "fields": []
    };

    return {
      withKeyValue: function(key, value) {
        let param = {};
        param.key = key;
        param.value = value;
        payload.fields.push(param);
        return this;
      },
      withFile: function(key, encoded_data, filename) {
        let value = {};
        value.encoded_data = encoded_data;
        value.file_name = filename;
        this.withKeyValue(key, value);
        return this;
      },
      build: function() {
        return payload;
      }
    }
  }
  let encoded_file = "aGVsbG8gd29ybGQ=";
  let apply_for_an_opening_payload_builder = new ApplyOpeningPayloadBuilder();

  $(".applicantForm input[type=text]").each(function() {
    apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
  });

  $(".applicantForm input[type=email]").each(function() {
    apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
  });

  $(".applicantForm input[type=tel]").each(function() {
    apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
  });

  $(".applicantForm input[type=url]").each(function() {
    apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
  });


  apply_for_an_opening_payload_builder.withFile("resume", encoded_file, "resume.txt");

  let payload = apply_for_an_opening_payload_builder.build();

  console.log("Log payload:", payload)


});
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container" id="json-response">
  <div class="form-container">
    <div class="header">
      <h1>Application form</h1>
    </div>
    <form action="#" class="applicantForm">
      <div class="form-group">
        <div class="input-group">
          <label for="First Name">First Name <span>*</span></label>
          <input type="text" name="First Name">
        </div>
        <div class="input-group">
          <label for="Last Name">Last Name <span>*</span></label>
          <input type="text" name="Last Name">
        </div>
      </div>
      <div class="form-group">
        <div class="input-group">
          <label for="Email">Email <span>*</span></label>
          <input type="email" name="Email">
        </div>
        <div class="input-group">
          <label for="Phone">Phone <span>*</span></label>
          <input type="tel" name="Phone">
        </div>
      </div>
      <div class="form-group">
        <div class="input-group">
          <label for="Resume">Resume <span>*</span></label>
          <input class="form-control" type="file" name="Resume">
        </div>
        <div class="input-group">
          <label for="LinkedIn Profile">LinkedIn Profile<span>*</span></label>
          <input type="url" name="LinkedIn Profile">
        </div>
        <div class="input-group">
          <label for="Website link">Website Link <span>*</span></label>
          <input type="url" name="Website link">
        </div>
        <div class="input-group">
          <label for="In lieu of a cover letter, please tell us more about why you are interested in joining the Compass Fellowship?"> In lieu of a cover letter, please tell us more about why you are interested in joining the Compass Fellowship?<span>*</span></label>
          <input type="text" name="In lieu of a cover letter, please tell us more about why you are interested in joining the Compass Fellowship?">
        </div>
      </div>
      <button class="submit" type="submit">Apply Now</button>
    </form>
  </div>
</div>

下面是payload对象最终应该是什么样的结构:

代码语言:javascript
运行
复制
let payload = {
  "fields": [
    { "key" : "candidate_first_name", "value" : "John"},
    { "key" : "candidate_last_name", "value" : "Doe"},
    { "key" : "candidate_email", "value" : "john.doe@gmail.com"},
    { "key" : "candidate_phone", "value" : "1234567890"},
    { "key" : "resume", "value": {
      "encoded_data" : "aGVsbG8gd29ybGQ=",
      "file_name" : "resume.txt"
      }
    }
  ]
};

注意,有效负载结构来自这个链接,特别是“申请一个开口”部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 06:44:30

您正在一次运行所有代码(document.ready()),而需要在form submit中运行它,比如$('.applicantForm').on('submit', function(e){})。检查更新的小提琴

代码语言:javascript
运行
复制
var $ = jQuery;
$(document).ready(function() {
  const ApplyOpeningPayloadBuilder = function() {
    let payload = {
      "fields": []
    };
    return {
      withKeyValue: function(key, value) {
        let param = {};
        param.key = key;
        param.value = value;
        payload.fields.push(param);
        return this;
      },
      withFile: function(key, encoded_data, filename) {
        let value = {};
        value.encoded_data = encoded_data;
        value.file_name = filename;
        this.withKeyValue(key, value);
        return this;
      },
      build: function() {
        return payload;
      }
    }
  }
  let encoded_file = "aGVsbG8gd29ybGQ=";

  $('.applicantForm').on('submit', function(e) {
    e.preventDefault();
    let apply_for_an_opening_payload_builder = new ApplyOpeningPayloadBuilder();
    $(".applicantForm input[type=text]").each(function() {
      apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
    });
    $(".applicantForm input[type=email]").each(function() {
      apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
    });
    $(".applicantForm input[type=tel]").each(function() {
      apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
    });
    $(".applicantForm input[type=url]").each(function() {
      apply_for_an_opening_payload_builder.withKeyValue(this.name, this.value);
    });
    apply_for_an_opening_payload_builder.withFile("resume", encoded_file, "resume.txt");
    let payload = apply_for_an_opening_payload_builder.build();
    console.log("Log payload:", payload);
  })
});
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="container" id="json-response">
  <div class="form-container">
    <div class="header">
      <h1>Application form</h1>
    </div>
    <form action="#" class="applicantForm">
      <div class="form-group">
        <div class="input-group">
          <label for="First Name">First Name <span>*</span></label>
          <input type="text" name="First Name">
        </div>
        <div class="input-group">
          <label for="Last Name">Last Name <span>*</span></label>
          <input type="text" name="Last Name">
        </div>
      </div>
      <div class="form-group">
        <div class="input-group">
          <label for="Email">Email <span>*</span></label>
          <input type="email" name="Email">
        </div>
        <div class="input-group">
          <label for="Phone">Phone <span>*</span></label>
          <input type="tel" name="Phone">
        </div>
      </div>
      <div class="form-group">
        <div class="input-group">
          <label for="Resume">Resume <span>*</span></label>
          <input class="form-control" type="file" name="Resume">
        </div>
        <div class="input-group">
          <label for="LinkedIn Profile">LinkedIn Profile<span>*</span></label>
          <input type="url" name="LinkedIn Profile">
        </div>
        <div class="input-group">
          <label for="Website link">Website Link <span>*</span></label>
          <input type="url" name="Website link">
        </div>
        <div class="input-group">
          <label for="In lieu of a cover letter, please tell us more about why you are interested in joining the Compass Fellowship?"> In lieu of a cover letter, please tell us more about why you are interested in joining the Compass Fellowship?<span>*</span></label>
          <input type="text" name="In lieu of a cover letter, please tell us more about why you are interested in joining the Compass Fellowship?">
        </div>
      </div>
      <button class="submit" type="submit">Apply Now</button>
    </form>
  </div>
</div>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59961619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档