0

よし、これで取り引きだ。この init 関数を 1 回呼び出しています。それは関数を実行し、私の region.prototype.load(); も起動します。そして私の region.prototype.edit(); 一度機能します。init 関数の途中で、クリックとタッチスタートのイベントを .myElement にバインドしています

ただし、ここに問題があります。$ths は、region.prototype.edit() の値を持つと定義されていません。最初に関数をロードするとき。$ths は、.myElement をクリックするまで定義されません。しかし、$ths を別の関数に渡す必要があります。しかし、 region.prototype.edit(); を入れることはできません。ドキュメント レベルでイベントを HTML 要素にバインドしているため、クリック イベント内で .myElement をクリックするたびに別のクリック イベントが要素に関連付けられ、基本的に再帰が発生します。したがって、1 回のクリックごとに、3 つ以上のイベントが発生します。

region.prototype.edit() が 1 回だけ起動し、.myElement をクリックして $ths を定義した後に 1 回だけ起動するように設定するにはどうすればよいですか?

    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() 関数は 1 回だけ起動し、伝播しません。

それはひどく間違っていたので、私はそのリターンコールも削除しました

于 2012-06-22T13:40:48.887 に答える