0

私はもともとこれをやっていた:

$('div.ocontainer').each(function() {
    var o = $(this);
    var newCode = $(this).attr('id');
    if (o.parents('.ocontainer').length != 0) {
        var oldCode = o.parents('.ocontainer').attr('id');
        console.log('unbinding '+oldCode);
        $('#'+oldCode+' a').each(function() {
            $(this).unbind('click')
            })
    }
    console.log('binding '+newCode);
    $('#'+newCode+' a').each(function() {
        $(this).click(function() {
            decideStMethod(newCode);
        })
    })
})

...しかし、機能してunbindいませんでした。元のコードがクリック関数に渡されることになりました。そこで、名前空間イベントを使用するように変更しました:

$('div.ocontainer').each(function() {
    var o = $(this);
    var newCode = $(this).attr('id');
    if (o.parents('.ocontainer').length != 0) {
        var oldCode = o.parents('.ocontainer').attr('id');
        console.log('unbinding '+oldCode);
        $('#'+oldCode+' a').each(function() {
            $(this).unbind('click.'+oldCode)
            })
    }
    console.log('binding click.'+newCode);
    $('#'+newCode+' a').each(function() {
        $(this).bind('click.'+newCode,function() {
            decideStMethod(newCode);
        })
    })
})

...そして今はunbind機能しますが、その後bindは機能しません。ただし、bindDOES を実行している行は、その後にない場合、つまり . が前にない場合に機能することに注意してくださいunbind

これを使用すると、最初にページの領域が処理され、その中のリンクに対してバインドが行われます。次に、サブ領域が処理され、そのうちの 1 つに独自のコードがある場合、領域のハンドラーをバインド解除して、サブ領域のハンドラーに置き換える必要があります。このすべての理由は、サブリージョンがリージョンに動的に配置されるため、サブリージョンがどうなるかは事前にわかりません。ああ、念のため言っておきますが、これは jQuery 1.72 です。

そう:

<div id="region" class="ocontainer">
   <div id="subregion" class="ocontainer">
      <a>

region の処理では、リンクは click.region と「region」を渡す関数にバインドされます。次に、click.region のバインドを解除する必要がありますが、これはそのままで、'subregion' を渡す関数を使用してその場所に click.subregion をバインドしますが、これは行われません。

4

1 に答える 1

0

まず最初に、bind()unbind()推奨の関数です。代わりに.on()とを使用してください。.off()

これもいくつかの改善を加えた例です。

$('div.ocontainer').each(function() {
    var o = $(this);
    var newCode = o.attr('id'); //Use cached version instead
    if (o.parents('.ocontainer').length != 0) {
        var oldCode = o.parents('.ocontainer').attr('id');
        console.log('unbinding '+oldCode);
        $('#'+oldCode+' a').each(function() {
            o.off('click', "#"+oldCode); //Turn off the event handler
        })
    }
    console.log('binding click.'+newCode);
    $('#'+newCode+' a').each(function() {
        $(this).on('click', "#" + newCode, function() {
            decideStMethod(newCode);
        })
    })
})
于 2012-10-02T14:56:34.780 に答える