2009-10-19 135 views
2

我敢肯定我會失去一些重要點,因爲這是一個基本的問題,但我無法弄清楚我在做什麼錯誤的jQuery選擇器使用「#」來按ID選擇。jQuery基本幫助

給出我的文檔中的該元素:

<%= Html.CheckBox("IsAlwaysValid", true, 
        new { onchange = "showHideValidSetList()", id = "IsAlwaysValidCheckBox" })%> 

(其輸出以下標記:

<input checked="checked" id="IsAlwaysValidCheckBox" name="IsAlwaysValid" onchange="showHideValidSetList()" type="checkbox" value="true" /><input name="IsAlwaysValid" type="hidden" value="false" /> 

):

<script type="text/javascript"> 
    function showHideValidSetList() { 
     if ($("#IsAlwaysValidCheckBox").checked) { 
      alert("IsAlwaysValidCheckBox is checked"); 
      return; 
     } 
     else { 
      alert("IsAlwaysValidCheckBox is NOT checked"); 
      return; 
     } 
    } 
</script> 

然後使用jQuery選擇此功能

應該完全等效於使用javascript DOM的這一個:

<script type="text/javascript"> 
    function showHideValidSetList() { 
     if (document.getElementById("IsAlwaysValidCheckBox").checked) { 
      alert("IsAlwaysValidCheckBox is checked"); 
      return; 
     } 
     else { 
      alert("IsAlwaysValidCheckBox is NOT checked"); 
      return; 
     } 
    } 
</script> 

對不對?但是JavaScript版本按預期工作,而jQuery版本總是使用「else」分支,表明它並沒有真正查看複選框的狀態。

我在做什麼錯?

感謝您與我的關係。

+2

fyi,我們不會降低「愚蠢」的問題;沒有了。我們可能會downvote重複雖然;-) – geowa4

回答

4

使用此:

if ($(checkBoxControl).attr("checked")) { 

,而不是這樣的:

if ($("#IsAlwaysValidCheckBox").checked) { 

雖然它看起來像jQuery選擇返回DOM元素(如複選框),他們真的返回一個jQuery對象,不具有一種稱爲checked的方法。您可以在未壓縮的jquery源代碼,最清楚地看到這一點(從the current release, version 1.3.2):

jQuery.fn = jQuery.prototype = { 
    init: function(selector, context) { 
     // ... 
     // Handle $(DOMElement) 
     if (selector.nodeType) { 
      this[0] = selector; 
      this.length = 1; 
      this.context = selector; 
      return this; 
     } 
     // ... 
    } 
} 

許多有趣的jQuery方法(如動畫,ATTR,HTML等)上this.context操作,它被指定或重新定義每當你應用選擇器。

+0

謝謝,傑夫(和其他人迴應)。我不明白返回一個jQuery對象和返回選定的元素之間的區別。 –

+0

我的榮幸 - 我喜歡jQuery,但它不會殺死他們在覈心文檔中解釋這個成語。 :) –

0

試試這個:

<script type="text/javascript"> 
    function showHideValidSetList() { 
     if ($("#IsAlwaysValidCheckBox").val()) { 
      alert("IsAlwaysValidCheckBox is checked"); 
      return; 
     } 
     else { 
      alert("IsAlwaysValidCheckBox is NOT checked"); 
      return; 
     } 
    } 
</script> 

val方法是排序的檢查值的「橫向件」的方式......它是否是一個文本框,選擇列表,或複選框...您可以使用.VAL()來獲取/設置的它:-)

3
$("#IsAlwaysValidCheckBox").checked 

的值是不正確的$("#IsAlwaysValidCheckBox")返回jQuery對象,而不是元件。 jQuery對象沒有名爲checked的屬性,這就是它進入else的原因。

你想:

$("#IsAlwaysValidCheckBox").val() 

或:

$("#IsAlwaysValidCheckBox:checked").length > 0 

或:

$("#IsAlwaysValidCheckBox").attr("checked") === "checked" 

或:

$("#IsAlwaysValidCheckBox")[0].checked 

或:

$("#IsAlwaysValidCheckBox").get(0).checked 
1

你有沒有嘗試使用

if ($("#IsAlwaysValidCheckBox").attr("checked")) { 
1

您需要使用這樣的:

$("#IsAlwaysValidCheckBox").attr("checked") 

確定複選框是否被選中與否。

1

另一種方式做一個簡單的事情:

$('#IsAlwaysValidCheckBox:checked').length

的選擇:檢查是特定於返回檢查元素的jQuery。長度檢查是否有任何元素返回。

許多方法可以做同樣的事情。