全部
我的JSP中有以下几行。
<s:submit name="submit" onclick="return validateUser();" action="saveUser" theme="simple" value="Save" />
java脚本方法validateUser()验证用户并返回true或false。验证失败时,不应提交表单。
这适用于FF,但不适用于IE8。
即使验证失败,IE8也会提交表单。
答案 0 :(得分:3)
永远不要假设您可以取消提交按钮,而是在表单上设置一些javascript变量或隐藏字段并使用onsubmit。请相信我的话。让onsubmit查看由不同的提交按钮设置的变量
永远不要使用 javascript:(javascript冒号),除非您在IE中并且将VBScript作为页面上的第一个脚本。在所有其他情况下,javascript是默认的。
永远不要使用<a href="javascript:something()"
而不是<a href="#" onclick="return something()
最后,在IE中,当您发生错误时,默认操作是提交表单。您可能在其他地方完全有其他错误,并且验证会返回错误,该错误被视为true(0计算结果为false,most anything else is true)
<script type="text/javascript">
var isvalidateNeeded = true;
function validate(theForm) {
if (!isvalidateNeeded) return true; // allow submission
. // normal validation
.
.
return true; // allow submission
}
</script>
<form onsubmit="return validate(this)">
.
.
.
<input type="submit" name="subaction" value="Test" onclick="isvalidateNeeded=false" />
<input type="submit" name="subaction" value="Check" onclick="isvalidateNeeded=false" />
<input type="submit" name="subaction" value="Submit" onclick="isvalidateNeeded=true" />
</form>
答案 1 :(得分:1)
首先,可以执行多项操作的单个表单是一个坏主意,即...
请勿使用提交按钮:
<button type="button" onclick="javascript:validateUser();">Save user</button>
<button type="button" onclick="javascript:deleteUser();">Delete user</button>
现在您只需担心表单的默认提交行为(当用户在字段中按Enter键时)。
答案 2 :(得分:1)
只有您需要更改的内容才在validateUser()
功能中。
IE正在寻找事件的返回值,因此您需要指定:
event.returnValue = true;
return true;
event.returnValue = false;
return false;
答案 3 :(得分:0)
请注意,如果validateUser()或deleteUser()中存在错误或错误,则“return false”将不会停止锚操作,您的浏览器将尝试链接到href“subaction”。这是逻辑:
如果您依赖第三方JavaScript API(我使用Recyclebank提供的代码来生成弹出窗口),并且第三方API会进行更新以破坏JavaScript,那么您将遇到问题。
以下内容将在正常条件和错误条件下停止链接。
<a class="button" href="javascript:;" onclick="validateUser();return false;">Validate User</a>