【问题标题】:How to send multiple input values with same class name or id via ajax如何通过ajax发送具有相同类名或id的多个输入值
【发布时间】:2018-03-21 09:41:21
【问题描述】:

我正在尝试通过 AJAX 将多个输入值发送到我的 PHP 脚本。当我使用getElementById 时它工作正常。但是我可以选择添加一个孩子。它迭代输入字段,然后我只从第一个孩子那里得到值。我尝试使用getElementsByClassName,但它给出的值是undefined。这是我的代码:

<div id="name-field" class="name-field row">
  <div class="col-xs-12 col-sm-6 childname">
    <div class="field text-left">
      <label class="text-left">Name of child</label>
      <input id="firstname" class="firstname" name="firstname" type="text" />
    </div>
  </div>
  <div class="col-xs-12 col-sm-6 dateofbirth">
    <div class="field text-left">
      <label class="text-left">Date of birth</label>
      <input type="text" class="date" id="thedate" />
    </div>
  </div>
</div>

<a href="#" id="addChild" name="addchild" class="btn-success">Add Child</a>

<a href="#" id="stepname" class="btn" onclick="btnSubmit('step1')">Next Step</a>
//Iterate child function
jQuery(function($) {
  $("#addChild").click(function() {
    $(".name-field:first").clone().find("input").val("").end()
      .removeAttr("id")
      .appendTo("#additionalselects")
      .append($('<a class="delete" href="#"><i class="fa fa-times"></i></a>'));
  });
  $("body").on('click', ".delete", function() {
    $(this).closest(".name-field").remove();
  });
});

//Sending values function
function btnSubmit(step) {
  //Set Var with Name
  //Set Var with DoB
  if (step == 'step1') {

    //values using ID
    var Name = document.getElementById("firstname").value;
    var DoB = document.getElementById("thedate").value;

    //Values using classname
    var Name = document.getElementsByClassName("firstname").value;
    var DoB = document.getElementsByClassName("date").value;

    //Create a Variable catVar Having the Var Name and Var DoB Concatinated with a --

    var stepVar = Name + "--" + DoB;

    $(".thevoornaam, .date").each(function() {
      alert();
    });
  } else {

  }
  var xmlhttp;
  if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {



    }
  }
  xmlhttp.open("GET", "validations/btnSubmit.php?q=" + step + "&q2=" + stepVar, true);
  xmlhttp.send();
}

如果我没有正确解释,我希望你们能理解我想要达到的目的。

提前致谢。

【问题讨论】:

  • 您的date 输入具有date 类名,但您正在寻找thedate。此外,getElementsByClassName 返回一个匹配元素数组,因此您必须遍历而不是尝试获取 .value
  • 我也有日期 ID,我写了我的代码目标 id 和类。

标签: javascript php jquery ajax html


【解决方案1】:

使用 jQuery 你可以这样做。

var firstname = [];
$("#name-field .firstname").each(function(){
 firstname.push($(this).val());
});

在名字中,您将包含所有值。

更新

这是一支工作笔。

https://codepen.io/smitraval27/pen/dmvwVB

【讨论】:

  • 我尝试过这样使用,但无法正常工作。 $(document).ready(function(){ $("#stepname").click(function(){ var firstname = []; $(".firstname").each(function(){ firstname.push($ (this).val()); }); }); });
  • 忘记动态添加 div,请查看更新后的答案。给 $("#name-field .firstname").each
  • @SmitRaval 很高兴我找到了这个。这确实是实现仅获取输入值的最佳方法。我在做类似的事情,但我在做 $('.className').each(function(i, val){ array.push(val);} 值在那里,但有大量随机 dom 乱码我不需要。这只是让我只捕获输入值。谢谢。
【解决方案2】:
document.getElementsByClassName("firstname")

返回一个数组...所以下面将为您提供索引为 i 的元素值。要获取所有值,您需要执行 ForEach。

document.getElementsByClassName("firstname")[0].value

既然您在其他地方使用 JQuery,为什么不使用...

$('.firstname')[0].val();

【讨论】:

    【解决方案3】:

    最理想的方法是:

    • 将表单包装器添加到您的字段 (id="ajaxForm")
    • 为您的所有表单添加name 字段并使用以下代码生成要传递给的data 您的 AJAX 调用

    $("#ajaxForm").serialize()

    $.serialize()的返回值可以直接作为ajax调用的data

    $("#ajaxForm").on("submit", function () {
      var ajaxData = $("#ajaxForm").serialize();
      
      $("#ajaxData").text(ajaxData);
      
      
      $.ajax({
        url:"",
        type: "get",
        data : ajaxData,
        success: function (resp) {}
      });
      console.log(ajaxData);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form id="ajaxForm" onsubmit="return false" >
      <input id="firstname" class="firstname" name="firstname" type="text" />
      <input type="text" name="date" class="date" id="date" />
      
      <input type="submit" value="submit">
    </form>
    
    <div id="ajaxData"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      相关资源
      最近更新 更多