0

我有一个无论我尝试什么都不会运行的 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 从未被调用过)。先生们(和女士们)我错过了什么吗?

4

2 回答 2

1

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

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

"$(function() {})" 是 "$(document).ready(function() {})" 的快捷方式

于 2012-12-04T15:39:39.167 回答
1

根据我的专业知识(这并不是很出色),我认为“$(function () {})”与 document.ready 是一回事。

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

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

在第二种情况下,脚本会等到 DOM 中的所有元素都加载完毕后才会执行。

于 2012-12-04T15:42:57.220 回答