如何取消在IE8中提交?

时间:2011-01-25 10:50:38

标签: javascript jquery events

我一直在努力使这项工作相当长一段时间。我有以下代码:

$(document).ready(function (event) {
    $('form').submit(function (event) {
    ...
    });
});

我在大多数地方发现,包括在jQuery网站上,这会阻止提交表单:

return false;

没有。

接下来,我已阅读本网站上的所有相关问题和答案,并全力以赴。 在Chrome和Firefox中,这有效:

event.preventDefault();

在IE8中没有。我已经读过IE不支持这个,我们应该使用它:

event.returnValue = false;

虽然有几个人确认它对他们有用(例如event.preventDefault() function not working in IE. Any help?),但它并不适合我。我不知道为什么会这样。我有一个带有提交按钮的表单,没什么特别的,但是,即使我只放了这段代码,表单仍然会提交:

$(document).ready(function (event) {
    $('form').submit(function (event) {
        event.returnValue = false;
    });
});

有什么想法吗?

最后一件事:我已经读过我们应该在调用preventDefault()之前先测试它:

if (event.preventDefault) { event.preventDefault(); }

但是在IE8中,event.preventDefault存在并且不会抛出任何错误。如果它不受IE支持,该怎么办?

更新1:我尝试使用以下代码的简化版本:

CancelSubmitTest.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CancelSubmitTest.aspx.cs" Inherits="HtmlEditor.CancelSubmitTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script src="Scripts/CancelSubmit.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="SaveButton" runat="server"
            Text="Save" OnClick="SaveButtonClick" CausesValidation="true" ValidationGroup="SomeValidationGroup" />
    </div>
    </form>
</body>
</html>

CancelSubmitTest.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HtmlEditor
{
    public partial class CancelSubmitTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void SaveButtonClick(object sender, EventArgs e)
        {

        }
    }
}

CancelSubmit.js

$(document).ready(function (event) {
    $('form').submit(function (event) {
        event.returnValue = false;
    });
});

这是一个非常直截了当的例子。尽管我将event.returnValue设置为false,但仍会执行JavaScript代码,但仍会提交表单。我做错了什么?

更新2:我更改了简化项目中的javascript代码,如下所示:

$(document).ready(function (event) {
    $('form').submit(function (event) {
        return false;
    });
});

它适用于IE,但我仍然需要弄清楚为什么它在我的应用程序中不起作用。感谢大家的帮助。

3 个答案:

答案 0 :(得分:1)

  1. 确实有效:http://jsfiddle.net/AEC2U/
  2. 问题出在代码中的其他地方。
  3. 发布更多代码/剥离示例,它不起作用。

答案 1 :(得分:1)

return false等于event.returnValue

但有时由于DOM兼容性,这不起作用

例如:

// Not Working
OnClientClick="return confirm('Are you sure want to Delete this file?');"

// Working
OnClientClick="event.returnValue=confirm('Are you sure want to Delete this file?');"

答案 2 :(得分:0)

$(document).ready(function () {
    $('form').submit(function () {
        alert( 'test' )        
        return false;
    });
});

这对我来说在IE8中没问题。如果我所做的一切都是摆脱了两个传递的事件变量