0

何を試しても実行されないajax送信があります。それは、送信が$(function () {});呼び出しにラップされているチュートリアルを見つけるまでです。次に、.submitを関数呼び出しでラップしましたが、機能しているように見えました。私の頭を悩ませているのは、関数にラップされていなくても同様に機能する他の.submitajax関数呼び出しがあることです。私が理解していない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」がまだ存在しないため、元のコード ブロックが実行されることはありません。2 番目のコード ブロックは、ページが読み込まれた後に実行されるため、「#FormPutMsg1」が存在します。

$("#FormPutMsg1").submit() を実行するにはトリガーが必要です。「$(function() {})」でラップすると、ページの読み込み時にブロックが実行されます。クリックイベントを使用してトリガーすることもできます。

「$(function() {})」は「$(document).ready(function() {})」のショートカットです

于 2012-12-04T15:39:39.167 に答える
1

私の専門知識に基づいて (これはまったく素晴らしいことではありません)、「$(function () {})」は document.ready と同じものだと思います。

残念ながら、DOM が完全にロードされると、この関数内のスクリプトが実行されます。

最初のケースでは、スクリプトは要素がロードされる前に実行しようとしているため、機能しません。

2 番目のケースでは、スクリプトは DOM 内のすべての要素が読み込まれるまで待機してから実行されます。

于 2012-12-04T15:42:57.220 に答える