[英]How can I separate my HTML form submit from my JavaScript form update?
[英]How to separate HTML from Javascript in this form?
不, 这个话题根本没有回答我的问题。 请在做任何事情之前阅读问题。
我有一个带有 Javascript 的表单,它按预期工作:
<script>
function checkForm(form)
{
if(form.cb1.checked) {
window.open('http://google.com/','_blank');
}
if(form.cb2.checked) {
window.open('http://yahoo.com/','_blank');
}
return true;
}
</script>
<form onsubmit="return checkForm(this);">
<label for="cb1">G</label>
<input name="cb1" type="checkbox">
<label for="cb2">Y</label>
<input name="cb2" type="checkbox">
<input type="submit" value="Submit">
</form>
但是,如果我尝试将 HTML 与 JS 分开,它将停止工作。
点击后Submit
的URL变化checkbox.html?cb1=on
,如果第一个复选框被选中,还是checkbox.html?cb2=on
,如果第二复选框被选中,还是checkbox.html?cb1=on&cb2=on
,如果两者都选中。 但是带有 url 的标签不会打开。
我的分离尝试看起来像:
document.getElementById('cbx').addEventListener( 'submit', function checkForm(event) { if (form.cb1.checked) { window.open('http://google.com/', '_blank'); } if (form.cb2.checked) { window.open('http://yahoo.com/', '_blank'); } return true; });
<form id="cbx"> <label for="cb1">G</label> <input name="cb1" type="checkbox"> <label for="cb2">Y</label> <input name="cb2" type="checkbox"> <input type="submit" value="Submit"> </form> <script type="text/javascript" src="form.js"></script>
使用event.preventDefault()
解决问题。 它本质上与在诸如onsubmit
类的 HTML 元素属性中执行return true
相同,它可以防止通常会发生的默认行为。 如果您希望在新选项卡中打开某些 URL 的自定义行为发生,您必须首先覆盖默认行为。
另外,请确保您的表单变量在某处定义,不确定它是否在您的代码中,因为它不在您的第二个示例中。
document.getElementById('cbx').addEventListener( 'submit', function checkForm(event) { //Prevents default action that would normally happen onsubmit event.preventDefault(); //Define the form element var form = document.getElementById("cbx"); if (form.cb1.checked) { window.open('http://google.com/', '_blank'); } if (form.cb2.checked) { window.open('http://yahoo.com/', '_blank'); } return true; });
<form id="cbx"> <label for="cb1">G</label> <input name="cb1" type="checkbox"> <label for="cb2">Y</label> <input name="cb2" type="checkbox"> <input type="submit" value="Submit"> </form>
该代码经过测试并有效。 (由于代码段对在新选项卡中打开 URL 的反应,它在代码段中不起作用,但这里有一个有效的JSFiddle 。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.