Javascript返回false不工作ie

时间:2011-03-08 06:54:17

标签: javascript jsp struts2

全部

我的JSP中有以下几行。

<s:submit name="submit"  onclick="return validateUser();" action="saveUser"  theme="simple" value="Save" />

java脚本方法validateUser()验证用户并返回true或false。验证失败时,不应提交表单。

这适用于FF,但不适用于IE8。

即使验证失败,IE8也会提交表单。

4 个答案:

答案 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”。这是逻辑:

  1. 用户点击锚点
  2. onClick会触发validateUser()
  3. validateUser()中存在错误,因此Javascript崩溃并停止所有代码执行。
  4. 返回false永远不会被解雇,因为Javascript已经停止。
  5. 浏览器尝试转到href属性
  6. 如果您依赖第三方JavaScript API(我使用Recyclebank提供的代码来生成弹出窗口),并且第三方API会进行更新以破坏JavaScript,那么您将遇到问题。

    以下内容将在正常条件和错误条件下停止链接。

    <a class="button" href="javascript:;" onclick="validateUser();return false;">Validate User</a>