2015-09-06 70 views
2

點擊複選框應該給予警報檢查,如果選中並給出警報不檢查,如果不是。代碼如下:

<input type = "checkbox" id = "all" value="all" /> MyCheckbox 

<script src="jquery-2.1.4.js"></script> 
<script type="text/javascript"> 
    $("input[type=checkbox]").click(function(){ 
    if ($(this).attr("checked")) { 
alert("checked"); 
} 
else{ 
alert("not checked"); 
} 
}); 
</script> 

最初複選框未被選中。只要我點擊它,調試器就會顯示它的值爲true。現在控件應該輸入if {} block,因爲它的值是true,但是它的輸入是else {} block。 (我正在使用斷點)。

爲什麼會發生這種情況。請幫忙嘗試幾個小時。

+2

您也可以使用'.prop()'。有關'attr()'和'prop()'之間區別的一個很好的答案可以在這裏找到(http://stackoverflow.com/questions/5874652/prop-vs-attr) –

+0

怎麼樣?你可以使用'.prop(「checked」,true)'來檢查複選框是否被選中。 *編輯*:好的,上面的評論被刪除。這個評論是針對前一個... –

+0

http://api.jquery.com/prop/甚至有一個例子顯示了attr()和prop()之間的區別。 – sinisake

回答

1

問題是,您正在檢查checked屬性,該屬性在檢查狀態更改時不會被刪除或添加。這是一個你應該瞭解屬性和屬性的細微差別。您需要比較checked屬性的複選框元素,而不是屬性。

此外它最好使用change事件處理程序(因爲您不僅可以使用鼠標點擊複選框,而且還可以使用鍵盤)。

$("input[type=checkbox]").change(function() { 
 
    if (this.checked) { 
 
     alert("checked"); 
 
    } 
 
    else { 
 
     alert("not checked"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type = "checkbox" id = "all" value="all" /> MyCheckbox

+0

謝謝! (this.checked)與$(this).prop(「checked」)相同或if($(this).is(「:checked」))? – mustafa1993

+0

是的,它是一樣的,只是jQuery包裝。我會與本土的東西,更短,更清晰。 – dfsq

1

此:

$(this).attr("checked") //in old versions of jquery this yield "checked" , 

息率undefined這是一個Falsy聲明。

在jQuery 1.6,未定義尚未設置

您可以使用屬性 的.attr()方法返回:

if ($(this).is(":checked")) 

$(this).prop("checked") 
0

jQuery 1.6.attr()方法對於尚未設置的屬性返回undefined。要檢索和更改DOM屬性,例如檢查,選定或禁用狀態的表單元素,請使用.prop()方法。

相關問題