2013-07-18 47 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

编辑我的答案 –

相关问题