2010-03-03 69 views
11

大家好,我正在使用html对象而不是表单将对象“打开(添加类.active)并关闭”在html页面上。在每次点击时,我都希望它可以创建一个类的数组。活动,但我似乎无法得到任何结果?!没有表格序列化?

这是正确的方向吗?

var data = $('li.tagToggle.active').serializeArray(); 
// li id format is 'id_0001' 
alert(data) 
$.post("/scripts/php/process.php",{ 
     'data[]': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
}) 

不断提醒和空窗口,但是当我使用这个窗体上它抓住所有的类。主动

任何指针欢迎的对象!

回答

5

OK - 得到了这个工作,但它的穷人整齐的序列化()

function getTags(){ 

    var data = []; 

    $('li.tagToggle.active').each(function(){ 
     var me = $(this); 
     var id = me.attr("id").split('_'); 
     data.push(id[1]) 

    }); 

    $.post("/scripts/php/process.php",{ 
     'data': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
    }) 

} 

认为有更好的方法?

+0

我喜欢它。 data.push是构建对象的一个​​很好的解决方案,并且可以将它与您可能需要提交的其他数据进行合并。 – 2013-08-12 22:32:50

+0

@丹尼尔请检查我的答案并考虑接受它。 – pepkin88 2014-07-19 11:49:39

9

这是我使用

(function($){ 
$.fn.serializeAny = function() { 
    var ret = []; 
    $.each($(this).find(':input'), function() { 
     ret.push(encodeURIComponent(this.name) + "=" + encodeURIComponent($(this).val())); 
    }); 

    return ret.join("&").replace(/%20/g, "+"); 
} 
})(jQuery); 

什么在你的情况下使用该 $( 'li.tagToggle.active')serializeAny()。

+3

这不是一个好的答案。你不检查一个元素是否有名称,如果它是一个按钮,或者它是一个复选框或收音机。 '.serializeArray'也检查一个元素是否被禁用。你也可以使用'$ .param'来参数化你的数组。 – pepkin88 2014-07-19 11:45:03

+3

人们可以轻松地添加IF条件来满足他需要的任何东西。即使元素被禁用,你仍然应该将它发送到服务器。最后,如果它的复选框或收音机,.val()仍然可以处理它 – fedmich 2014-07-19 22:41:48

+0

但它也会在未选中时发送值,所以它工作错误。 OP感兴趣的是'.serialize'对其他元素的效果,而不是形式,所以'.serialize'越相似越好。与jQuery对'.serializeArray'所做的操作相比,你的函数几乎不会执行任何过滤器和检查,并且你添加了可以并且应该由$ .param处理的样板文件。它看起来有些复杂,可能会让初学者认为它是安全的。那么,这是不安全的。这就是为什么我低估了你的答案。 – pepkin88 2014-07-20 10:51:48

5

有了这个功能,你可以做任何序列化元素的集合:

function makeSerializable(elem) { 
    return $(elem).prop('elements', $('*', elem).andSelf().get()); 
} 

然后你可以使用它像这样:

var arr = makeSerializable('li.tagToggle.active').serializeArray(); 

var $elem = $('li.tagToggle.active'); 
var data = makeSerializable($elem).serialize(); 
6

可以序列像这样的元素内的所有输入:

var data = $('YourId :input').serialize() 
+2

冒号在错误的地方。应该是var data = $('YourId:input')。serialize() – 2017-06-14 17:20:29

1

万一某人偶然发现这个问题,此链路是相同的问题,并将该溶液使用jquery连载

$('#divId :input').serialize(); 

所以在这种情况下

$('li.tagToggle.active :input').serialize(); 

链路质疑jQuery to serialize only elements within a div