【问题标题】:Showing value of multiple selected checkboxes and the form assiciated with them as JSON format以 JSON 格式显示多个选中复选框的值以及与它们关联的表单
【发布时间】:2020-03-02 07:53:58
【问题描述】:

我对 javascript 很陌生,并且还在尝试 fetch api 与后端交互。我已经制作了一些复选框,如果它们被选中,我想将它们的值存储在一个数组中(以 json 格式),以及将在输入框中输入的值,然后使用 fetch api 将该数组发送到后端,以便它可以用来做处理。任何人都可以在这里帮助我。

$("#step1").click(function() {
  $("#checked1").css("display", "initial");
  $("#checked1").toggle($(this).prop("checked"));
});
      
$("#step2").click(function() {
  $("#checked2").css("display", "initial");
  $("#checked2").toggle($(this).prop("checked"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<p> Ready to start </p>
<div class="form-check checkbox-rounded checkbox-filled">
 <input type="checkbox" class="form-check-input filled-in" value="Yes" name="demo" id="Yes">
  <label class="form-check-label" for="Yes">Yes</label>
</div>

<div class="form-check checkbox-rounded checkbox-filled">
 <input type="checkbox" class="form-check-input filled-in" value="step1" name="demo" id="step1">
  <label class="form-check-label" for="step1">Check to start step1</label>

   <div id ="checked1" style="padding-left:20px; display: none;" class="custom-control-inline">

    <input type="text" id="inputValue" class="form-control form-centrol-sm" style="width: 60%; display: inherit;" placeholder="Enter your name">
      <hr style="margin-top: 0.5rem !important; margin-bottom: 0.5rem !important;">
    </div>
</div>

<div class="form-check checkbox-rounded checkbox-filled">
 <input type="checkbox" class="form-check-input filled-in" value="step2" name="demo" id="step2">
   <label class="form-check-label" for="step2">Check to start step2</label>

     <div id ="checked2" style="padding-left:20px; display: none;" class="custom-control-inline">
     <input type="text" id="inputValue" class="form-control form-centrol-sm" style="width: 60%; display: inherit;" placeholder="Enter your age">
      <hr style="margin-top: 0.5rem !important; margin-bottom: 0.5rem !important;">
     </div>
</div>

【问题讨论】:

  • 既然你用的是jQuery,有没有查serialize?。做一些研究,然后尝试一下。当您的努力似乎徒劳无功时,请返回此处询问您的代码为什么不起作用或您可能做错了什么。您将学到更多,我们也更容易为您提供帮助。
  • 你已经在使用jQuery了,为什么不直接使用$.ajax呢?为什么必须是 Fetch API?

标签: javascript jquery html json fetch-api


【解决方案1】:

好的,这就是您将值放入数组的方式。如果您更新您的问题以显示您计划如何使用 fetch api,我将更新我的答案以包含它。

我将它作为一个数组,就像您需要的问题一样,但我建议使用一个对象,因为这就是 JSON —— JavaScript Object Notation。

$("#step1").click(function() {
  $("#checked1").css("display", "initial");
  $("#checked1").toggle($(this).prop("checked"));
});
      
$("#step2").click(function() {
  $("#checked2").css("display", "initial");
  $("#checked2").toggle($(this).prop("checked"));
});

$('input').on('input', () =>{
  let dataArray = [ 
    "Yes checked: " + ($("#Yes").is(':checked')),
    "step1 checked: " + ($("#step1").is(':checked')),
    "step1 value: " + ($("#checked1Input").val() === "" ? "Not entered" : $("#checked1Input").val()),
    "step2 checked: " + ($("#step2").is(':checked')),    
    "step2 value: " + ($("#checked2Input").val() === "" ? "Not entered" : $("#checked2Input").val())
  ];
  
  let dataObject = {
  "Yes checked" : ($("#Yes").is(':checked')),
    "step1 checked" : ($("#step1").is(':checked')),
    "step1 value" : ($("#checked1Input").val() === "" ? "Not entered" : $("#checked1Input").val()),
    "step2 checked" : ($("#step2").is(':checked')),    
    "step2 value" : ($("#checked2Input").val() === "" ? "Not entered" : $("#checked2Input").val())  
  };
  
  let jsonArrayString = JSON.stringify(dataArray);
  let jsonObjectString = JSON.stringify(dataObject);
  console.clear();
  console.log("As an array: ", jsonArrayString);
  console.log("As an object: ", jsonObjectString);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<p> Ready to start </p>
<div class="form-check checkbox-rounded checkbox-filled">
 <input type="checkbox" class="form-check-input filled-in" value="Yes" name="demo" id="Yes">
  <label class="form-check-label" for="Yes">Yes</label>
</div>

<div class="form-check checkbox-rounded checkbox-filled">
 <input type="checkbox" class="form-check-input filled-in" value="step1" name="demo" id="step1">
  <label class="form-check-label" for="step1">Check to start step1</label>

   <div id ="checked1" style="padding-left:20px; display: none;" class="custom-control-inline">

    <input type="text" id="checked1Input" class="form-control form-centrol-sm" style="width: 60%; display: inherit;" placeholder="Enter your name">
      <hr style="margin-top: 0.5rem !important; margin-bottom: 0.5rem !important;">
    </div>
</div>

<div class="form-check checkbox-rounded checkbox-filled">
 <input type="checkbox" class="form-check-input filled-in" value="step2" name="demo" id="step2">
   <label class="form-check-label" for="step2">Check to start step2</label>

     <div id ="checked2" style="padding-left:20px; display: none;" class="custom-control-inline">
     <input type="text" id="checked2Input" class="form-control form-centrol-sm" style="width: 60%; display: inherit;" placeholder="Enter your age">
      <hr style="margin-top: 0.5rem !important; margin-bottom: 0.5rem !important;">
     </div>
</div>

【讨论】:

  • 感谢您的解决方案,目前我不会使用 fetch,所以我的问题仅通过您提供的代码解决。
猜你喜欢
  • 2019-05-09
  • 2017-04-06
  • 2021-01-01
  • 2020-12-20
  • 2022-01-24
  • 2011-11-13
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多