Qua*_*mis 5 html javascript php firefox
为什么firefox(未在其他浏览器中测试)在地址栏中加载表单值时出现问题#;?如果我有<input type='radio' checked="checked">,则地址栏中存在此元素可能导致输入未实际检查(如预期的那样)
我该如何避免这种行为?
示例代码:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr" style="min-height:100%;">
<head>
<title>stuff2test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body class="popup" >
<form action="" id="frm">
<a href="#;" onClick="alert('added');">add #; to addressbar, and refresh</a>
<?php $rnd = mt_rand(1, 4); ?>
<label for="r_v1"> <input id="r_v1" type="radio" value="v1" <?php if($rnd==1){ echo 'checked="checked"';}?> name="r"></input> checked?</label>
<label for="r_v2"> <input id="r_v2" type="radio" value="v2" <?php if($rnd==2){ echo 'checked="checked"';}?> name="r"></input> checked?</label>
<label for="r_v3"> <input id="r_v3" type="radio" value="v3" <?php if($rnd==3){ echo 'checked="checked"';}?> name="r"></input> checked?</label>
</form>
<button onClick="getElementById('frm').submit();" type="button">submit</button>
<br/>
RND: <?php echo $rnd;?>
<?php
if($rnd>0 && $rnd<=3){
echo "Checkbox {$rnd} should be checked";
}
?>
<br/>
<?php
var_dump($_GET);
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Edit2:稍微清理了一下代码,添加了一个回音
你有这样的链接,对吧?
<a href="#">link</a>
Run Code Online (Sandbox Code Playgroud)
你用JavaScript做了一些事情(这里也是jQuery),对吧?
$('a').click(function() {
alert(1);
});
Run Code Online (Sandbox Code Playgroud)
您需要return false在函数末尾添加.
$('a').click(function() {
alert(1);
return false;
});
Run Code Online (Sandbox Code Playgroud)
编辑:
看你的代码后...你不要使用内嵌的JavaScript!
你需要一些能在点击上做某事的元素吗?只需添加类,ID - 您可以将其命名为......所以您可以区分元素然后...
$('a.my_class').click(function() { // $('a#my_id')
// All you need to do.
return false; // For preventing browser to add '#' after current link (if you have 'href="#"').
});
Run Code Online (Sandbox Code Playgroud)
从阅读该问题的评论来看,答案似乎很清楚。
问题是,当您重新加载页面时,Firefox 会尝试记住表单的状态,其中包括选中了哪些复选框,哪些没有选中。因此,即使您在重新加载时更改 HTML 中的默认值,Firefox 也会将其视为相同的表单,并忽略 HTML 中设置的默认值,而采用重新加载之前保存的内容。
我听说您可以通过提供 HTTP headerCache-Control: no-store或autocomplete="off"在表单元素上指定来禁用此行为。但我还没有亲自测试过这两种解决方案。或者您可以使用 Javascript 在页面加载时重置表单(使用表单对象reset()或通过显式设置每个字段的值)。
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |