Javascript 返回 false 在 ie 中不起作用

发布于 2024-10-20 22:31:02 字数 299 浏览 0 评论 0 原文

大家好,

我的 JSP 中有以下几行。

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

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

这在 FF 中有效,但在 IE8 中无效。

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

HI All

I have following lines in my JSP.

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

The java script method validateUser(), validates the user and returns true or false. The form should not be submitted when the validation fails.

This is working in the FF but not in the IE8.

IE8 submits the form even after validation fails.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心凉怎暖 2024-10-27 22:31:02

永远不要假设您可以取消提交按钮,而是在表单上设置一些 javascript 变量或隐藏字段并使用 onsubmit。相信我的话。让 onsubmit 查看由不同提交按钮设置的变量

切勿使用 javascript:(javascript 冒号),除非您使用的是 IE 并且将 VBScript 作为页面上的第一个脚本。在所有其他情况下,javascript 都是默认的。

切勿使用诸如 之类的暴行,而不是

最后,在 IE 中,当发生错误时,默认操作是提交表单,您很可能在其他地方完全出现其他错误,并让验证返回错误,该错误被视为 true(0 计算结果为 false,大多数其他内容都是正确的

<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>

Never assume you can cancel the submit button, instead set some javascript variable or hidden field on the form and use onsubmit. Take my word for it. Have the onsubmit look at the variable set by the different submit buttons

Never use javascript: (javascript colon) unless you are in IE and have a VBScript as the first script on the page. In all other cases javascript is default.

Never use such atrocities as <a href="javascript:something()" instead of <a href="#" onclick="return something()

Lastly, in IE, when you have an error occurring, the default action is to submit the form. You may very well have other errors completely elsewhere and have the validate return the error, which is seen as true (0 evaluates to 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>
软甜啾 2024-10-27 22:31:02

首先,可以执行多个操作的单个表单是一个坏主意,也就是说......

不要使用提交按钮:

<button type="button" onclick="javascript:validateUser();">Save user</button>
<button type="button" onclick="javascript:deleteUser();">Delete user</button>

现在您只需担心表单的默认提交行为(当用户在字段中按 Enter 时) 。

First, a single form that can perform multiple actions is a bad idea, that said...

Do not use submit buttons, instead:

<button type="button" onclick="javascript:validateUser();">Save user</button>
<button type="button" onclick="javascript:deleteUser();">Delete user</button>

Now you only have to worry about default submit behaviour of a form (when user presses enter in a field).

空城之時有危險 2024-10-27 22:31:02

您唯一需要更改的是 validateUser() 函数。
IE 正在寻找事件的返回值,因此您需要指定:

event.returnValue = true;
return true;

event.returnValue = false;
return false;

Only thing you need to change is in your validateUser() function.
IE is looking for the return value on the event, so you need to specify this:

event.returnValue = true;
return true;

event.returnValue = false;
return false;
森末i 2024-10-27 22:31:02

请注意,如果 validateUser() 或 deleteUser() 中存在错误或错误,则“return false”将不会停止锚点操作,并且您的浏览器将尝试链接到 href“subaction”。逻辑如下:

  1. 用户点击锚点
  2. onClick 触发 validateUser()
  3. validateUser() 中存在错误,因此 Javascript 崩溃并停止所有代码执行。
  4. return false 永远不会被触发,因为 Javascript 已经停止了。
  5. 浏览器尝试转到 href 属性

如果您依赖第三方 JavaScript API(我使用 Recyclebank 提供的代码来生成弹出窗口),并且第三方 API 进行的更新破坏了 JavaScript,那么您将会遇到问题。

以下将在正常情况和错误情况下停止链接。

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

Please note that if there is a bug or error in validateUser() or deleteUser() then "return false" will NOT stop the anchor action and your browser will try to link to the href "subaction". Here is the logic:

  1. User clicks on anchor
  2. onClick fires validateUser()
  3. There is an error in validateUser() so Javascript crashes and stops all code execution.
  4. return false is never fired because Javascript has already stopped.
  5. browser tries to go to href attribute

If you are relying on a third party JavaScript API (I was using code supplied by Recyclebank to spawn a popup), and the third party API makes an update that breaks the JavaScript, then you'll have problems.

The following will stop the link under normal conditions and error conditions.

<a class="button" href="javascript:;" onclick="validateUser();return false;">Validate User</a>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文