2011-09-04 56 views
3

只是一個簡單的問題。jQuery event.target和(「:checked」)不起作用

我使用

console.log(jQuery(event.target).is(":checked")); 

,並返回false每次。

如果我做一個console.log(jQuery(event.target))被打印出來的輸入框,所以我知道event.target是正確的。

我不能在這裏使用this因爲jQuery事件綁定到父div。

任何想法,爲什麼這不起作用?看起來很簡單。

編輯######################################### 代碼的其餘部分:

jQuery(".core-create-install-pkg-parent").live("click", function(event){ 
var cls = jQuery(event.target).attr("type"); 
if(cls != "checkbox"){ 
    event.stopPropagation(); 
    jQuery(".core-create-install-pkg-child:first", this).toggle(); 
}else{ 
    console.log(event.target); 
    if(jQuery(event.target).is(":checked")){ 
     console.log("it's checked"); 
     jQuery("input[type=checkbox]", this).removeAttr('checked'); 
    }else{ 
     console.log("not checked"); 
     jQuery("input[type=checkbox]", this).attr("checked", true); 
    } 
} 
}); 

和HTML的樣子:

<div class="core-create-install-pkg-parent"> 
    <div class="core-create-install-pkg-title"> 
    <input type="checkbox" value="" checked> 
    plugins 
    </div> 
</div> 
+0

是的,該複選框被選中;) –

+1

除非我誤解你,這似乎爲我工作的罰款:http://jsfiddle.net/68Msz/6/ –

+0

這如果複選框被選中,將會返回給我。你能提供其餘的代碼嗎?我懷疑event.target是「指向」複選框。 – Waltsu

回答

6

這段代碼被剪掉的問題是,當它切換後立即恢復控制。

if (jQuery(event.target).is(":checked")) { //Enters if the checkbox is checked 
    console.log("it's checked"); 
    jQuery("input[type=checkbox]", this).removeAttr('checked'); //Removes the checked attribute, effectively unchecking it 
} else { //Enters if the checkbox is Unchecked 
    console.log("not checked"); 
    jQuery("input[type=checkbox]", this).attr("checked", true); //Sets the checked attribute, checkbox becomes checked again 
} 

此外,我會建議測試檢查狀態(它返回true或false)的jquery的prop方法。 [需要的jQuery 1.6)

($(event.target).prop("checked") 
($(event.target).prop("checked", true) 
+0

請原諒你的赦免? :)你是什麼意思,我切換後恢復控制?切換後,檢查狀態?這不像它正在重新評估,它是在一個if else語句中。所以,其中一個或另一個發生,而不是「如果它被檢查,取消選中它並再次測試」 –

+0

哦,我想我明白你在說什麼。由於該複選框實際上正在被點擊,瀏覽器沒有選中它,然後它正在測試,我重新檢查它。如果是這樣的話,那麼返回false應該可以解決這個問題,但它不會:http://jsfiddle.net/68Msz/11/ –

+0

好吧,所發生的是Fionn建議的。在我測試狀態之前,瀏覽器正在處理取消選中(因爲使用「click」事件而不是mousedown)。所以在我的情況下,我只是讓瀏覽器做這件事,並檢查和取消選中的孩子,並離開實際的event.target。 –

14

無需jQuery的:

event.target.checked 

應該工作,如果event.target是一個複選框。但是,然後,你的代碼應該工作,如果它不,該元素不是複選框或其他錯誤。

+0

這實際上不像'prop()'工作# –