2012-08-23 34 views
0

我想初始化html複選框的checked值爲false。但是,當我嘗試設置它,然後立即記錄它的值時,它仍然顯示爲true,並且複選框仍處於檢查狀態。什麼會導致複選框忽略其檢查值?

什麼可能導致checked屬性忽略通過JavaScript顯式設置其值?

console.log("setting", self.checkbox.testid, "to", self.checked); 
self.checkbox.checked = self.checked; 
console.log(self.checkbox.testid + " checked: ", self.checkbox.checked); // still true 
+1

你能在[小提琴]複製(http://jsfiddle.net/)? –

+0

它似乎在小提琴中工作正常,暗示其他東西在我的框架中導致它失敗。在這一點上,我正在尋找關於其他地方可能發生的事情的想法。我遇到了類似的問題,點擊事件被意外取消,但在這種情況下,我以編程方式設置它,它以某種方式失敗,但我無法理解如何甚至有可能。 – devios1

+1

也許'self.checkbox'是**不是**你認爲你處理的元素.. – 0x499602D2

回答

1

嘗試一些其他的方法:

如果你碰巧使用jQuery:

$('#myCheckbox').removeAttr('checked'); 

,或者如果沒有,嘗試設置一個ID上的複選框,並確保你正在處理的右元素:

document.getElementById('myCheckbox').checked = false; 
+0

@ianpgall不是一個好的假設。那些對此一無所知的初學者呢? – 0x499602D2

+1

@David對不起,我以爲你會意識到我的諷刺:) – Ian

+1

我在發佈後意識到自己的錯誤,這就是爲什麼我將它編輯成可以在沒有jQuery的情況下運行的代碼。 – Krycke

0

啊哈!問題其實不在checked屬性的複選框,但我試圖將其設置爲。

如果我明確將self.checked更改爲false,它現在可以使用。所以問題是爲什麼它被記錄爲「假」,但「假」值實際上並不是false

...

確實是這樣,當我登錄typeof self.checked它實際上是一個有「假」的值!當然,字符串「假」實際上是真的。多麼具有欺騙性!

現在問題是爲什麼heck是self.checked一個字符串,但這是我自己的問題來解決。感謝您幫助我通過人們思考。

+0

在問題中沒有提及'self.checked',代碼顯示布爾文字'false'被使用。只是說實際的代碼總是有用的提出你的問題:P – Esailija

+0

哎呀你是對的 - 我簡化了它,在示例代碼中刪除它並不認爲它實際上可能是問題所在。我把它放回來,現在答案是有道理的。 :) – devios1

0

爲了跨瀏覽器的變化選擇框的值編程,你需要這樣做:

 
checkbox.checked = checkbox.defaultChecked = false; 
+0

有趣。沒有意識到這一點。 – devios1

相關問題