無論元素是否匹配,jQuery選擇器總是返回一個對象。
你有效地得到了什麼是:
if (new Object())
item_id[category] = $(this).attr("id");
else
item_id.splice(category, 1);
對象總是truthy(不管它是一個空的對象或對象約翰Resig的初始化),所以這if
聲明絕不會執行else
。
你大概什麼後:
if ($('input[name="'+category+'"]:checked').length)
item_id[category] = $(this).attr("id");
else
item_id.splice(category, 1);
哪些檢查length
屬性。
但是這仍然不起作用,因爲splice()
會移動數組中的所有元素;使得category
錯誤。
如果您將事件綁定到多個複選框元素上,則使用.bind()
(及其對應的.click()
)將是不明智的,因爲此方法將爲每個複選框綁定一個事件。相反,請使用.live()
或.delegate()
;這會將一個事件綁定到所有複選框元素的祖先,並偵聽事件(使用JavaScripts事件冒泡),效率更高。
考慮到這兩點,你可能會喜歡這樣的東西。如果條件是返回jQuery的元素列表選擇
$('input[name="'+category+'"]').is(':checked')
正如馬特提到,當前的:
$(yourJquerySelector).live('change', function() {
var category = '?' // (this.value ?)
item_id[category] = this.checked ? this.id : undefined;
});
「item_id」肯定是一個數組,而`category`絕對是一個整數嗎? – 2010-11-23 10:02:00