序列化没有表格?

v3n*_*3nt 16 jquery serialization object

大家好,我正在使用html对象而不是表单在html页面上"打开(添加类.active)和关闭"对象.并且在每次点击时我都希望它用类.active创建一个项目数组但是我似乎无法获得任何结果?!

这是正确的方向吗?

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'
}) 
Run Code Online (Sandbox Code Playgroud)

保持警报和空窗口,但当我在表单上使用它时,它会抓取类.active的所有对象

任何指针欢迎!

小智 15

您可以序列化元素内的所有输入,如下所示:

var data = $('YourId :input').serialize()
Run Code Online (Sandbox Code Playgroud)

  • 科隆在错误的地方.应该是var data = $('YourId:input').serialize() (2认同)

fed*_*ich 10

这就是我正在使用的

(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);
Run Code Online (Sandbox Code Playgroud)

在你的情况下使用 $('li.tagToggle.active').serializeAny();

  • 这不是一个好的答案.您没有检查元素是否具有名称,如果它是一个按钮,或者它是一个选中的复选框或无线电.`.serializeArray`还检查元素是否被禁用.你也可以使用`$ .param`来参数化你的数组. (4认同)
  • 人们可以很容易地添加IF条件,以满足他的需要.即使该元素被禁用,您仍应将其发送到服务器.最后,如果它的复选框或无线电,.val()仍然应该处理它 (3认同)

v3n*_*3nt 6

好的 - 让它工作,但它的不如串行化()

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'
    }) 

}
Run Code Online (Sandbox Code Playgroud)

认为有更好的方法吗?


pep*_*n88 6

使用此功能,您可以将任何元素集可序列化:

function makeSerializable(elem) {
  return $(elem).prop('elements', $('*', elem).andSelf().get());
}
Run Code Online (Sandbox Code Playgroud)

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

var arr = makeSerializable('li.tagToggle.active').serializeArray();
Run Code Online (Sandbox Code Playgroud)

要么

var $elem = $('li.tagToggle.active');
var data = makeSerializable($elem).serialize();
Run Code Online (Sandbox Code Playgroud)