1

我有一个使用.ajax()jQuery 中的方法提交的联系表单,以便在不刷新页面的情况下提交表单。它适用于除 IE 之外的所有浏览器,它非常适合并坚持刷新页面。

这是我的代码:

function appointmentform() {    
    $("#appointment-form").on("submit", function(e) {

        // serialize all input data
        var dataString = $(this).serialize();
        console.log(dataString);

        // if there are no inputs with errors
        if ($("input.required.error").length < 1) {

            // ajax call to mail.php script
            $.ajax({
                type: "POST",
                url: "http://www.thesalonleamingtonspa.com/mail",
                data: dataString,
                success: function() {
                    // success notice
                }
            });

        }

        // cancel form submit
        if (e.preventDefault) { 
            e.preventDefault(); 
        } else { 
            e.returnValue = false; 
        }
    });
}

我意识到这e.preventDefault()对 IE 没有任何意义,但我认为e.returnValue = false是等价的。有人知道为什么它不适合我吗?

编辑:这只是 IE8 问题的孩子。

4

4 回答 4

4

真正的罪魁祸首是 IE8 &console.log

IE8 不支持console直接写入,所以脚本一console遇到函数就停止运行。在我的代码中,preventDefault在该console部分之后,所以它没有运行。

解决方案:在 IE8 中保持开发人员工具打开将允许您写入console

我正在回答我自己的问题,因为其他答案都不是 100% 正确的,尽管它们很有帮助。任何将来查看我的问题的人都可能会从听到我现在概述的真正原因中受益。

于 2012-05-25T17:42:33.517 回答
1

返回false应取消表单提交

代替

    if (e.preventDefault) { 
        e.preventDefault(); 
    } else { 
        e.returnValue = false; 
    }

采用

return false;
于 2012-05-25T15:51:44.833 回答
1

怎么样:而不是使用提交,只需使用一个按钮:

// use this ~ buttons don't do anything unless explicitly told to
<input type="button">

// not this ~ the default behavior is to submit ~ which you don't want
<input type="submit">

您只需要监听按钮的点击,然后触发该功能。

我已经好几年没用过提交按钮了……从字面上看……只是为了避免这个问题。

我通常监听“提交”事件的方式是点击。以我的经验,即使是 IE 也可以处理点击事件。

function doAjaxStuff {
    // do form validation
    // do ajax stuff
}
myButton.click(doAjaxStuff);
于 2012-05-25T16:28:43.917 回答
1

我意识到 e.preventDefault() 对 IE 没有任何意义

仅当您不使用 jQuery 时,这才是正确的。jQuery 使这个跨浏览器。

猜猜:你使用 jQuery < 1.4 吗?

JavaScript 提交事件不会在 Internet Explorer 中冒泡。但是,从 jQuery 1.4 开始,依赖事件委托和 submit 事件的脚本将在浏览器中始终如一地工作,这已经规范了事件的行为。

-- http://api.jquery.com/submit/

于 2012-05-25T16:50:38.050 回答