2012-08-06 45 views
0

所有, 檢查我有PHP的以下位選中一個複選框:禁用複選框沒有顯示在jQuery的

<input type="checkbox" name="check_out_gear[]" id="'.$resultsetgear['gear_checkout_id'].'" value="'.$resultsetgear['gear_checkout_id'].'" class="gear_checkout_checkbox" checked disabled> 

該代碼工作正常,並選中該複選框,它是禁用的。我檢查,看它是否至少一個複選框使用以下jQuery的檢查:

var fields = jQuery(".gear_checkout_checkbox").serializeArray(); 
if (fields.length == 0) 
{ 
    jQuery.wl_Alert('Please select a piece of equipment that you\'re checking out!','warning','#no_answers','#workform', {sticky:false}); 
    one_selected = false; 
} 

當該複選框被選中和殘疾人的長度始終爲0。但是當我從移除已停用它的代碼長度至少爲1.任何想法如何讓這個代碼與禁用的複選框一起工作?

+1

我不明白,如果複選框在你的代碼檢查上的任何檢查。 – zerkms 2012-08-06 01:02:13

回答

1

這是已記錄的禁用輸入行爲。從jQuery docs on .serializeArray()

.serializeArray()方法使用標準的W3C規則來確定哪些元素應該包含在成功的控件中;特別是元素不能被禁用並且必須包含一個name屬性。

只是檢查的使用:checked selector [jQuery docs],像這樣的檢查框的長度:

if (jQuery(".gear_checkout_checkbox:checked").length === 0) 
0

可以使用jQuery對象的屬性length未由serializeArray()方法返回的數組的長度,嘗試以下方法:

if ($(".gear_checkout_checkbox:checked").length === 0) { 
    jQuery.wl_Alert('Please select a piece of equipment that you\'re checking out!','warning','#no_answers','#workform', {sticky:false}); 
    one_selected = false; 
} 
2

serializeArray模仿形式提交。提交表單時,禁用的元素不會被髮送。

改爲使用is(":checked")

jQuery(".gear_checkout_checkbox").is(":checked") 

docs

的.serializeArray()方法使用用於 成功控制,以確定哪些元素應當包括標準的W3C規則;在 中,特定元素不能被禁用,並且必須包含名稱 屬性。

1

無論是否選中,禁用的複選框都不會被髮送。因此它不會被serializeArray拾取。你應該檢查複選框本身是否被選中,而不是它是否被提交。

1

禁用的輸入不會顯示,因爲它被禁用。它被檢查的事實並不重要。

如果您使用jQuery來啓用和禁用複選框,則可以使用jQuery在禁用複選框(並在複選框再次啓用時再次更改它)時在隱藏輸入上設置值。然後,您可以處理隱藏的輸入和複選框,並做正確的事情。

另一種可能性是根本不禁用該複選框,但隨後使用CSS更改來指示它已鎖定並捕獲onchange事件以防止它被修改。