是.submit ajax调用需要包装在$(function(){})

时间:2012-12-04 15:32:49

标签: jquery form-submit

我有一个ajax提交,无论我尝试什么都无法运行。直到我找到一个包含在$(function () {});调用中的提交的教程。然后我在函数调用中包装了我的.submit,它似乎有效。令我难以理解的是,我还有其他.submit ajax函数调用,它们也可以在函数中包含。我想知道我是否错过了我不理解的jQuery细微差别?

为了更全面地说明我的意思,这是我在函数中包装之前和之后的函数...

之前...

$("#FormPutMsg1").submit(function (e) {
    debugger;
    e.preventDefault();
    //animateSpinner();
    var theURL = this.action;
    var type = "POST";//this.methd;
    var data = $(this).serialize();
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        dataType: "json",
        success: function (result) {
            debugger;
            var data = result;
            if (data.split(':')[0] == "Error") {
                //$("#list").unblock();
                $('#resultDiv').html('<b><p style="color: #ff00ff">' + data + '</p></b>');
                setTimeout(function () {
                    $('#resultDiv').html("");
                }, 10000);
            }
            else {
                binddata(data);
            }
        }
    });
    return false;
});

之后(这个有效)......

$(function () {
    $("#FormPutMsg1").submit(function (e) {
        debugger;
        e.preventDefault();
        //animateSpinner();
        var theURL = this.action;
        var type = "POST";//this.methd;
        var data = $(this).serialize();
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            dataType: "json",
            success: function (result) {
                debugger;
                var data = result;
                if (data.split(':')[0] == "Error") {
                    //$("#list").unblock();
                    $('#resultDiv').html('<b><p style="color: #ff00ff">' + data + '</p></b>');
                    setTimeout(function () {
                        $('#resultDiv').html("");
                    }, 10000);
                }
                else {
                    binddata(data);
                }
            }
        });
        return false;
    });
});

在我将函数包装到函数中之前,常规提交功能已经过时(因为e.preventDefault从未被调用过我认为)。我错过了绅士(和女士们)的一些事情吗?

2 个答案:

答案 0 :(得分:1)

原始代码块永远不会被执行,因为“#FormPutMsg1”还不存在。第二个代码块在页面加载后执行,因此“#FormPutMsg1”将存在。

$(“#FormPutMsg1”)。submit()需要触发器才能执行。用“$(function(){})”包装它将在页面加载时执行块。您也可以使用点击“事件”触发它。

“$(function(){})”是“$(document).ready(function(){})”

的快捷方式

答案 1 :(得分:1)

基于我的专业知识(这不是很棒),我认为“$(function(){})”与document.ready是一样的。

唉,这个函数里面的脚本将在DOM完全加载时执行。

在第一种情况下,脚本在元素加载之前尝试执行,因此它不起作用。

在第二种情况下,脚本会一直等到DOM中的所有元素在执行之前都已加载。