2013-07-18 48 views
17

我在表單中有2個複選框,並且這兩個複選框都被包裝在form之內。如何在默認情況下取消選中該複選框總是

對於form之一,我添加了屬性autocomplete="off"
下面是代碼片段

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head></head> 
    <body> 
     <form name="chkBoxForm" > 
      <div> 
       <input type="checkbox" value="100" name="product"/>My Checkbox1 
      </div> 
     </form> 
     <form name="chkBoxForm" autocomplete="off"> 
      <div> 
       <input type="checkbox" value="200" name="product"/>My Checkbox2       
      </div> 
     </form> 
    </body> 
</html> 

現在我的問題就在這裏,如果我們手動檢查的複選框,如果我們按F5 ,然後用屬性autocomplete="off"複選框選中了。但沒有該屬性的複選框仍然被選中。這發生在FireFox 22中。

此行爲因瀏覽器而異。
在IE中,兩個複選框都保持選中狀態,在Chrome中,兩個複選框均未選中。

但是當我按下地址欄中的輸入時,它在所有瀏覽器中都沒有選中。

有人能告訴我如何讓這些複選框始終處於未選中狀態當我們按F5
我知道這可以通過Javascript處理。

是否有任何其他的HTML方式來處理?

+3

重複:http://stackoverflow.com/questions/299811/why-does-the-checkbox-stay-checked-when-reloading-the-page – FSou1

+0

這個HTML表單運行在什麼上下文?我的意思是,這是一個asp.net應用程序,還是別的?據我所知,當你重新加載頁面,除非你有一個cookie或一個視圖狀態,複選框將恢復到它們的默認狀態。 – Zack

+0

這只是一個獨立的html頁面 – Vel

回答

13

不,簡單的HTML沒有辦法。 JavaScript的可能是你在這個時候唯一的辦法..

遍歷JavaScript中所有的複選框,並將它們設置爲未選中:

var checkboxes = document.getElementsByTagName('input'); 

for (var i=0; i<checkboxes.length; i++) { 
    if (checkboxes[i].type == 'checkbox') { 
    checkboxes[i].checked = false; 
    } 
} 

包起來的onload事件監聽器,你應該罰款呢:)

1

這是瀏覽器特定的行爲,並且是填充表單以更方便用戶使用的一種方式(例如在遇到錯誤時重新加載頁面,而不會丟失他們剛輸入的內容)。所以沒有什麼可行的方法可以在瀏覽器中禁用此功能,而無需使用JavaScript設置頁面加載時的默認值。

火狐雖然似乎禁用此功能,當你指定標題:

Cache-Control: no-store 

看到這個question

+0

我不認爲這是一個很好的解決方案,因爲你說過,如果出現錯誤,用戶必須再次輸入所有內容。使用JavaScript不會觸摸輸入文本字段,同時仍然設置你想要的狀態。 –

+0

@David同意。我不認爲禁用這個功能是一個好主意(通過JavaScript或緩存頭)。如果用戶更改了值,那麼很可能,如果由於某種原因刷新頁面,他或她將再次輸入相同的值。但是這是OP所要求的 – Mel

+0

是的,但是使用JavaScript解決方案,您仍然可以完全控制要重置的內容。這樣,您可以簡單地重置複選框,但保留文本框。 –

2

一個浮現在腦海快速的解決方案: -  

的document.getElementById( 「markitem」)。checked = false;
6

jQuery的

$('input[type=checkbox]').removeAttr('checked'); 

或者

<!-- checked --> 
<input type='checkbox' name='foo' value='bar' checked=''/> 

<!-- unchecked --> 
<input type='checkbox' class='inputUncheck' name='foo' value='bar' checked=''/> 
<input type='checkbox' class='inputUncheck' name='foo' value='bar'/> 

+

$('input.inputUncheck').removeAttr('checked'); 
+3

從jquery 1.6開始,這應該是'.prop('checked',false)'。 –

2

如果你有一個ID的複選框checkbox_id.You可以設置它與JS狀態prop('checked', false)prop('checked', true)

$('#checkbox_id').prop('checked', false); 
+2

**來自複審隊列**:我可以請求您在答案中添加更多的上下文。僅有代碼的答案很難理解。如果您可以在帖子中添加更多信息,它可以幫助提問者和未來的讀者。 – RBT

+0

編輯我的答案 –

相關問題