2010-03-03 40 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

相關問題