1

同様の質問がいくつかありますが、それらはすべてネイティブのjQueryコールバック関数に関するもののようです。

したがって、いくつかのフォーム要素を含むdivを(ライブで)作成するこのコードがあります。これらの要素の値は、divが削除されたとき(前)にコールバック関数内で取得する必要があります。

function popup(callback) {
    // ...
    // before removing the div
    callback.call();

    // remove div
}

予期せぬことに、最初にポップアップが実行された後、コールバック関数が複数回(ますます)起動されています。

コードを簡略化しました。これがフィドルです。

4

3 に答える 3

1

これがあなたが必要としているものであることを願っています。

function popup(callback) {
    $("body").append('<div><span id="test">test</span> <a href="#" id="close">close</a></div>');
    $(document).on("click", "#close", function() {
        callback.call();

        //
        //callback = function() {};
        $(document).off("click", "#close");
        $("div").remove();

    });
};

$(document).on("click", "#open", function() {
    popup(function() {
        alert('$("#test").length = ' + $("#test").length);
    });
});

基本的に、 off()メソッドを呼び出してイベントハンドラーを削除する必要があります。

于 2013-02-12T10:57:18.773 に答える
0

文字列を使用する代わりに、要素を動的に生成してみてください。これにより、イベントを簡単にバインドできます。

function popup(callback) 
{   var $elem = $("<div></div>");
    $elem.append($("<span></span>").html("test"));
    $elem.append(" ");
    $elem.append($("<a></a>").html("close").attr("href", "#"));

    $("body").append($elem);
    $elem.find("a").click(function() {
        callback.call();  
        $elem.remove();
    });
};

$(document).on("click", "#open", function() {
    popup(function() {
        alert('$("#test").length = ' + $("#test").length);
    });
});

例: http: //jsfiddle.net/4se7M/2/

于 2013-02-12T10:57:04.827 に答える
0

正確なシナリオはわかりませんが、ポップアップを表示するたびにイベントをバインドおよびバインド解除する必要があるのはなぜですか?

このように一度だけバインドできますね。

$(document).on("click", "#close", function() {
    alert('$("#test").length = ' + $("#test").length);
    $("div").remove();
});

function popup() {
    $("body").append('<div><span id="test">test</span> <a href="#" id="close">close</a></div>');
};

$(document).on("click", "#open", function() {
    popup();
});
于 2013-02-12T11:07:46.997 に答える