2016-06-29 48 views
1

請檢查下面的控制檯輸出,請注意,第一個輸入已檢查屬性和選擇:jQuery的:選中不與初始(HTML屬性)無線輸入工作

enter image description here

你可以看到我有2無線電input s,1是checked,然而無論是選擇器還是prop也不是is都適用於它。如果我手動點擊其中一個收音機,代碼就能正常工作。這裏是我的HTML:

<div class="col-sm-6"> 
    Type: 
    <div class="btn-group" data-toggle="buttons"> 
     <label class="btn btn-default active"> 
      <input type="radio" name="generator-type" id="opt-type-passphrase" value="0" autocomplete="off" checked> 
      Passphrase 
     </label> 
     <label class="btn btn-default"> 
      <input type="radio" name="generator-type" id="opt-type-password" value="1" autocomplete="off"> 
      Password 
     </label> 
    </div> 
</div> 

爲什麼代碼不工作時頁面加載,當我沒有點擊任何收音機?有沒有辦法解決它?

編輯:發現這個問題,我有這樣的代碼在頁面加載:

 $("input[name='generator-type'][value=" + this.Options.Type + "]").prop("checked", ""); 

正確的解決方法是使用:

.prop("checked", true) 

但任何人都可以請解釋它是如何工作的?爲什麼有checked屬性,但prop函數仍然是錯誤的?

+0

@HectorBarbossa謝謝你,我發現了問題的根源,但仍不明白「prop」和「is」是如何工作的。你能解釋一下嗎? –

+1

關於它如何工作的問題在[文檔](http://api.jquery.com/prop/)中有介紹。要掌握的一個關鍵方面:HTML屬性只設置屬性的* initial *值。如果通過代碼或用戶交互進行更改,則HTML不會更改,但屬性會更改。 –

回答

1

你需要檢查這樣

$(...).is(':checked') 

爲什麼?因爲jquery is方法接受一個css選擇器,它用來過濾當前匹配的元素。

因此temp.is('checked')只有在temp元素具有checked標籤時纔會成立。在你的情況下,他們有input標籤,因此不匹配。

在css僞選擇器上使用:checked匹配是否檢查當前元素。這是你想要的。

知道了這一點,您也可以使用$(...).is('[checked]'),如果匹配的元素具有checked屬性,則返回true。這可能是你最初想要做的。雖然,傳統的方法是使用:checked

+0

好抓。更新。 – asemahle

3

嘗試​​而不是.is('checked')。請檢查這個Fiddle

1

你缺少一個冒號的是,檢查代碼:的

temp.is(":checked") 

代替

temp.is("checked") 
+0

這與現有的答案有什麼不同? –