排除序列化上的某些输入

时间:2010-12-29 17:14:59

标签: jquery serialization

我试图按名称排除输入(它是隐藏的输入,包含我的随机数)

以下问题几乎就是我要找的:

How do I use jQuery's form.serialize but exclude empty fields

但我有2个关于那里的解决方案的问题 - 其中说明了序列化表单数据,除了空输入和输入,其中值=“。”

$("#myForm :input[value][value!='.']").serialize();

首先,我无法使用jquery变量“this”

$('#ofform').live('submit', function(e) {
    e.preventDefault();
    var serializedReturn = $(this :input[name!='security']).serialize();        
});

其次,我有一个单独的形式,其id为ofform-reset,如果我使用的话:

var serializedReturn = $(#ofform :input[name!='security']).serialize(); 

它接收其他#ofform-reset形式的输入,AND / OR输入未包含在标记内。

在我以前的一个问题中找到答案。样式的无效标记:

<form id="ofform">
 <div id="toolbar">
 <button id="save">Save</button>
</form>
<form id="ofform-reset">
 <button id="reset">Reset</button>
</form>
</div>

现在要弄清楚如何使用2个不同的按钮来控制同一个表格

6 个答案:

答案 0 :(得分:42)

您不需要:,因为input是一个元素而不是伪选择器。其次,您不能在选择器中使用对象和文本字符串。您需要将此作为范围参数提供给$()

$('#ofform').live('submit', function(e) {
    e.preventDefault();
    var serializedReturn = $('input[name!=security]', this).serialize();        
});

答案 1 :(得分:12)

首先,您需要调用.find()方法,如:

var serializedReturn = $(this).find('input[name!=security]').serialize(); 

否则完整的字符串将进入css查询引擎(Sizzle)。

其次:

  

我有另一个id为的表单   ofform-reset如果我使用:

你需要改变它。拥有多个ID的无效标记。如果我在这里理解你错了,第一个解决方案也可以帮助你,调用.find()方法:

var serializedReturn = $('#ofform').find('input[name!=security]').serialize(); 

答案 2 :(得分:7)

在我的情况下,这很好用:

$("fieldset").not(".tasks-container").serialize()

答案 3 :(得分:4)

我对'input[name!=security]'不满意,因为它排除了所有其他输入类型,例如select,..您可以手动添加它们,但此列表会随着新的HTML标记不断增加。因此,随着每个新标记的到来,您的代码将再次被破坏。

这是我的解决方案:

$form.find(':not(input[name=draft])').serialize()

$('form[name=expenses] :not(input[name=draft])').serialize()

在第二个例子中,空间非常重要。

答案 4 :(得分:1)

解决了!您应该使用给定的解决方案排除要序列化的输入字段。 经过测试,解决了我的问题。

var formdata = $($("#myform")[0].elements).not("#field_id").serialize();

对于多个字段,您可以使用类名将其排除。

var formdata = $($("#myform")[0].elements).not(".class_name").serialize();

答案 5 :(得分:0)

您可以过滤结果数组

var ignoreFields = ["_csrf"];

$('form')
 .serializeArray()
 .filter(function(val){
    return ignoreFields.indexOf(val.name) === -1;
 });

或更短的变体

$('form').serializeArray().filter(val => ignoreFields.indexOf(val.name) === -1)