【问题标题】:jquery ajax submit only submitting first valuejquery ajax提交只提交第一个值
【发布时间】:2016-02-23 10:42:57
【问题描述】:

我正在使用 jquery 和 ajax 提交表单。我有我的第一个选择菜单,根据这个选择菜单的值,包含不同菜单的 div 将变得可见。

 <table>
    <tr>
       <td>
          <select required="" class="input-medium" id="foulTypes" name="foul" data-original-title="" title="">
            <option value="">Select Foul</option>
            <option value="85">AID - Aiding Runner</option>
            <option value="1">BAT - Illegal Bat</option>
            <option value="2">BBW - Block Below Waist</option>
            <option value="3">BOB - Blocking Out of Bounds</option>
            <option value="4">CHB - Chop Block</option>
          </select>
        </td>
    </tr>
 </table
 <script>
     var foulTypes = $('#foulTypes');
     var select = this.value;
     foulTypes.change(function () {
        //We first disable all, so we dont submit data for more than 1 category
        $("#catDPI, #catILF, #catOPI, #catOH, #catDH, #catILD, #catUNS, #catUNR, #catTGT").hide().find(".category").attr("disabled", true);
        var $divSelectedCategory;
        if ($(this).val() == '1') {
            $divSelectedCategory = $("#catDPI");
            $('#catDPI').show();
        } else {
            $('#catDPI').hide();
        }

        if ($(this).val() == '85') {
          $divSelectedCategory = $("#catILF");
          $('#catILF').show();
        } else {
          $('#catILF').hide();
        }

        if ($(this).val() == '2') {
          $('#catOPI').show();
          $divSelectedCategory = $("#catOPI");
        } else {
          $('#catOPI').hide();
        }

        //We now enable only for the selected category        
        $divSelectedCategory.show().find(".category").attr("disabled", false).val('');
 });    
 </script>

  <div id="catDPI" style="display:none;">
      <select name="category" id="dpiCategory" class='category' style="width:210px;">
            <option value="Playing Through Receiver">Playing Through Receiver</option>
            <option value="arm bar">arm bar</option>
            <option value="Grabbing">Grabbing</option>
      </select>
  </div>

  <div id="catILF" style="display:none;">
     <select name="category" id="ilfCategory" class='category' style="width:210px;">
         <option value="">Select</option>
         <option value="moving">Moving</option>
         <option value="illegal">Illegal</option>
          <option value="standing">Standing</option>                                           
     </select>
  </div>

  <div id="catOPI" style="display:none;">
    <select name="category" id="opiCategory" class='category' style="width:210px;">
        <option value="">Select</option>
        <option value="restrict">Restrict</option>
        <option value="holding">Holding</option>
    </select>
  </div>

foulTypes .change 函数正在运行,并且正在显示正确的 div。我遇到的问题是提交表单时。如果#catDPI 可见,则可以正常提交类别菜单选择的值。如果#catILF 或#catOPI 可见,则类别的值为空白。我没有使用类别菜单的 ID。

  $("#submit-foul").submit(function(e){
    e.preventDefault();

    var category = $(".category").val();

    var dataString = 'category=' + category;

    if($("#submit-foul").valid()){
       $.ajax({
          url: 'myUrl',
          type: 'POST',
          success: function(data){
              if(data == 1){
                 alert('Success');
              };
          }
       });
     }
     return false;
  });

我不确定我做错了什么。是时候发给专家了!!我感谢您的所有帮助。

【问题讨论】:

  • 你的&lt;form action="action.php"&gt;标签在哪里?
  • 我通过 ajax 提交。您可以看到 .submit 函数。这是我的表单标签 -
  • 你能做个小提琴吗?发现错误有点困难
  • var category = $(".category").val(); 将返回带有class="category" 的第一个元素的值(不是启用且可见的那个)
  • @StephenMuecke 是对的,所以在下面的示例中,我添加了一个使用标志的类。

标签: php jquery ajax


【解决方案1】:

尝试更改函数“foulTypes”并在可见选择中添加类。

foulTypes.change(function () {
        //We first disable all, so we dont submit data for more than 1 category
        $("#catDPI, #catILF, #catOPI, #catOH, #catDH, #catILD, #catUNS, #catUNR, #catTGT").hide().find(".category").attr("disabled", true);
        var $divSelectedCategory;
        if ($(this).val() == '1') {
            $divSelectedCategory = $("#catDPI");
            $('#catDPI').show();
            $('#dpiCategory').addClass("visible");
        } else {
            $('#catDPI').hide();
            $('#dpiCategory').removeClass("visible")
        }

        .... CONTINUE

在你的 ajax 提交..

var category = $(".category.visible").val();

【讨论】:

  • 我认为通过这个 css 技巧,您可以获得可见选择的值。但是这种方法并不是发送数据的最佳形式。
  • .hide() 和 .show() 工作正常。如果followTypes 更改了正确的div 并显示类别选择菜单。它是在未通过的可见类别上选择的选项值。
  • 不明白我的想法。如果添加了这个类,不影响显示与否,只是用来选择选择是否实际可见,类名仅供参考。在您的示例中,当您获得 .category 的值时,选择了许多类别类。
  • 这与制作 $ (".category:visible") 类似,但如果您将此 css 属性用于这种情况,请注意。完成示例的其余部分并尝试一下! api.jquery.com/visible-selector
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
相关资源
最近更新 更多