9

我试图从 serialize() jQuery 输出中排除不可见的表单值。不可见的输入/选择位于 div.ui-tabs-hide div 中。不是它的孩子,而是它的后代。因此,基本上,我需要在没有 ui-tabs-hide 类的情况下将所有元素(输入、选择)包含在 div 中,并以一种形式在具有 ui-tabs-hide 类的 div 中排除所有元素(输入、选择)。

现在,我尝试过的内容包括所有表单元素,但我认为我没有正确指定选择器。

请参阅下面的代码以重现该问题:

<!DOCTYPE html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                var formdata = $("#outboundcall:not(.ui-tabs-hide input, .ui-tabs-hide select)").serialize();

                console.log(formdata);
            });
        </script>
        <meta charset="utf-8" />
        <title>JS Bin</title>
    </head>
    <body>
       <form id="outboundcall">
        <div class="content">
            <div class="tabs ui-tabs ui-widget ui-widget-content ui-corner-all">
                <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
                    <li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active">
                        <a href="#tabs-1">Credit Card</a>
                    </li>
                    <li class="ui-state-default ui-corner-top">
                        <a href="#tabs-2">Cheque</a>
                    </li>
                    <li class="ui-state-default ui-corner-top">
                        <a href="#tabs-3">Direct Debit</a>
                    </li>
                </ul>
                <div id="tabs-1" class="ui-tabs-panel ui-widget-content ui-corner-bottom">
                    <input type="hidden" value="1" name="lead-payment-method" />
                </div>
                <div id="tabs-2" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide">
                    <p>Cheque functionality is not currently available.</p>
                </div>
                <div id="tabs-3" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide">
                    <input type="hidden" value="3" name="lead-payment-method" />
                </div>
            </div>
        </div>
      </form>
    </body>
</html>

这是带有此代码的 jsbin:http: //jsbin.com/iyevux/5/

4

3 回答 3

13

您可以将:not()应用于您的类选择器,然后将表单元素子项与:input选择器匹配:

var formdata = $("#outboundcall :not(.ui-tabs-hide) > :input").serialize();
于 2013-04-29T09:33:37.640 回答
1

尝试这个:

$(document).ready(function() {
    var formdata = $("#outboundcall:not(.ui-tabs-hide) input,#outboundcall:not(.ui-tabs-hide) select").serialize();
    console.log(formdata);
});

或者

$(document).ready(function() {
    var formdata = $("#outboundcall").find(":input:not(:hidden)").serialize();
    console.log(formdata);
});

来自jQuery:表单序列化、隐藏字段和不显示字段

于 2013-04-29T09:41:32.493 回答
1

这将起作用:

$(document).ready(function() {
  var formdata = $("#outboundcall input").not(".ui-tabs-hide input").serialize();

  console.log(formdata);
});

抱歉之前我没有完全理解这个问题,将删除该答案

于 2013-04-29T09:56:20.937 回答