2013-04-11 89 views
12
拿起

(問題更新,以反映真正的問題)殘疾人領域不受serializeArray

我剛剛意識到serializeArray不取出由殘疾人領域的內容。

通過從autosuggest列表中選擇一個項目來填充一組(街道)地址字段。一旦完成,字段被禁用。我可以將其更改爲read only,但我希望禁用外觀而不必更改CSS。

有沒有辦法讓serializeArray抓取數據,禁用字段?

解決方案

感謝穆罕默德,我創建了一個小插件,可以幫助我解決我的問題:

Fiddle

var form_data = $('form').serializeAll(); 

    (function ($) { 
     $.fn.serializeAll = function() { 
     var data = $(this).serializeArray(); 

     $(':disabled[name]', this).each(function() { 
      data.push({ name: this.name, value: $(this).val() }); 
     }); 

     return data; 
     } 
    })(jQuery); 
+0

你有動態添加元素的名稱屬性 – 2013-04-11 20:59:02

+0

是的。所有需要提交的輸入字段都具有名稱屬性。哦,一個不起眼的說明,領域是禁用的! (對不起 - 我會更新Q) – Steven 2013-04-11 21:00:07

+0

這就是爲什麼serializeArray不選擇這些元素的原因 – 2013-04-11 21:04:30

回答

26

試試這個

var data = $('form').serializeAllArray(); 

這裏是一個小插件即使用

(function ($) { 
    $.fn.serializeAllArray = function() { 
    var obj = {}; 

    $('input',this).each(function() { 
     obj[this.name] = $(this).val(); 
    }); 
    return $.param(obj); 
    } 
})(jQuery); 

您還可以嘗試啓用所有元素的序列化,然後在序列化後禁用它們。

var myform = $('#form'); 
var disabled = myform.find(':input:disabled').removeAttr('disabled'); 
var serialized = myform.serializeArray(); 
disabled.attr('disabled','disabled'); 
+0

如果將新的插件中的'serializeArray'移到新的插件中並將數據串聯在那裏。然後,我需要做的是'data = $('form')。serializeAllArray()'。 – Steven 2013-04-11 21:13:41

+0

現在你可以使用'.serializeAllArray()'作爲你想要的 – 2013-04-11 21:26:25

+0

謝謝穆罕默德。我在這裏做了一個改進的版本:http://jsfiddle.net/gARuJ/ – Steven 2013-04-11 21:32:50

9

可以使用readonly serializeArray()可以讀取它。

+0

不幸的是'readonly'在