1

有一些类似的问题,但它们似乎都与原生 jQuery 回调函数有关。

所以我有这段代码(实时)创建一个包含一些表单元素的 div。当(之前)删除 div 时,应在回调函数中检索这些元素的值。

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

    // remove div
}

出乎意料的是,在第一次执行弹出窗口后,回调函数被多次(越来越多地)触发。

我已经简化了代码,这里是fiddle

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

我不知道确切的场景,但是为什么每次显示弹出窗口时都想绑定和取消绑定事件?

你只能绑定一次,像这样,不是吗?

$(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 回答
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 回答