0

好的,这就是交易。我调用了这个初始化函数一次。它贯穿该函数,它还触发了我的 region.prototype.load(); 和我的 region.prototype.edit(); 功能一次。在 init 函数的中间,我将 click 和 touchstart 事件绑定到 .myElement

这是问题所在。$ths 未定义为具有 region.prototype.edit() 的值;当它第一次加载函数时。在您单击 .myElement 之前,不会定义 $ths。但我需要将 $ths 传递给另一个函数。但我不能放 region.prototype.edit(); 在单击事件内部,因为它在文档级别将事件绑定到 HTML 元素,如果我这样做,那么每次单击 .myElement 时,都会将另一个单击事件附加到元素上,它基本上会导致递归。因此,每单击一次,我就会触发 3 个或更多事件。

我如何设置它以便我的 region.prototype.edit() 只触发一次,并且在我单击 .myElement 并定义 $ths 后它只触发一次?

    region.prototype.init = function() {
region.prototype.load();        
var chfTxt;
var $ths;

$(document).on("click", ".myElement", function (e, $ths) {
    e.stopPropagation();        
    $ths = $(this);

    $ths.each(function () {
        var options = {
            splitScreen: true,
            titleTxt: "Test"
        }
        $ths.openPopUp(options);

        if ($ths.data("x") == "yes") {
            chfTxt = $ths.text();
            $('#thing').text(chfTxt);
            $('#thing2').addClass("selected");      
        } else if($ths.data("y") == "yes") {
            $('#thing3').addClass("selected");
        }
    });
    return $ths;
});
region.prototype.edit(compPages, chfTxt, $ths);

}

4

1 回答 1

0

我解决了这个问题。

我给了我的第一次点击一个像这样的命名空间:

$(document).on("click.myElement", ".myElement", function (e) {})

我把我的 region.prototype.edit(); jQuery .one() 方法中的函数,如下所示:

$(document).one("click", ".myElement", function (e) {
    region.prototype.edit(compPages, chfTxt, $ths);
});

所以现在它们都在点击时触发,并且 $ths 正在为我的函数定义,但我的 edit() 函数只会触发一次并且不会传播。

我还删除了那个回电,因为那是非常错误的

于 2012-06-22T13:40:48.887 回答