我有一个表单,它接受邮政编码输入,并根据输入将用户转发到两个URL之一。当你点击提交按钮时,一切都很好,然而,按回车重新加载页面,我已经通过大约30个类似的论坛无济于事。我尝试过多种方法,包括从提交按钮更改提交按钮类型。我已经尝试了几个片段来强制输入键做我想要的但是没有一个有效。它只是不断重新加载页面。以下是我目前在网站上的代码:
<div align="center">
<script type="text/javascript">
//<![CDATA[
function zipValidate() {
val = document.zipForm.zip.value;
switch (val) {
case '94005':
document.location = 'http://www.crossborderscheduling.com/home/calendar/';
break;
default:
document.location = 'http://crossborder.fedex.com/us/';
break;
}
}
//]]>
</script>
<form name="zipForm" id="zipForm" method="post">
<input name="zip" type="text" id="zip" maxlength="5" size="10%" placeholder="Zip Code" />
<input name="zipButton" type="button" id="zipButton" value="Submit" onclick="zipValidate()" />
</form>
</div>
答案 0 :(得分:3)
MAP_FAILED
默认[action]
为<form>
,这意味着在提交表单时,数据会发布到当前页面。
您的""
元素使用<input name="zipButton"...>
代替type="button"
,并且您已将type="submit"
事件处理程序绑定到它。
点击onclick
元素并未实际提交表单,这就是#zipButton
回调有效的原因。
在关注zipValidate
字段时按 Enter 将触发表单的implicit submission行为,从而触发#zip
上的submit
事件} element,并完全忽略form
点击回调。
那么你如何解决它?
让我们从修复HTML开始:
#zipButton
[size]
属性的值应为非负整数<form name="zipForm" id="zipForm" method="post">
<input name="zip" type="text" id="zip" maxlength="5" size="10" placeholder="Zip Code" aria-label="Zip Code" />
1: ^^^^^^^^^ 2: ^^^^^^^^^^^^^^^^^^^^^
<input name="zipButton" type="submit" id="zipButton" value="Submit" />
3: ^^^^^^^^^^^^^ 4: ^
</form>
元素it's important to provide a label for accessibility。 <label>
属性不是一个充分的替代品。submit
type 现在已经清理了HTML,让我们看一下JavaScript:
[placeholder]
<script>
// 1 ^^^,
// 2
function zipValidate() {
// 3
var val,
action;
// 4
val = document.getElementById('zip').value;
switch (val) {
case '94005':
// 5
action = 'http://www.crossborderscheduling.com/home/calendar/';
break;
default:
action = 'http://crossborder.fedex.com/us/';
break;
}
// 6
this.setAttribute('action', action);
}
// 7
document.getElementById('zipForm').addEventListener('submit', zipValidate, false);
</script>
,很长一段时间没有必要[type="text/javascript"]
,getElementById
,getElementsByTagName
,getElementsByClassName
,或querySelector
querySelectorAll
语句或三元运算符已经足够了,但我离开了开关,因为这对于这种情况几乎不重要。if
属性,以告知表单要提交的位置。您不需要在活动中致电[action]
,因为提交行为会处理您之后的重定向。preventDefault
,以便在尝试将事件绑定到document.onreadystatechange
时存在#zipForm
元素。答案 1 :(得分:-1)
要阻止表单提交,您需要在return false
代码中onclick
。为此,您可以将其更改为:
onclick="zipValidate() && return false;"
或者,您可以修改函数以返回false,然后将onclick
更改为:
onclick="return zipValidate();"