0

このコード:

$(document).ready(function(){
$('body')。click(function(evt){
if(evt.target.nodeName ==='A' && $(evt.target).hasClass('cross -link')){
$(' a [href =#2]')。trigger(' click');
}});});

私に与えられた「再帰が多すぎる」というエラー

クロスリンク要素にハンドラーをアタッチするだけでよいと思うかもしれません。これを試しましたが、クロスリンククラス要素が作成される前にDOMが読み込まれるため、機能させることができませんでした。これを修正するために何をする必要がありますか、それとも私がやろうとしていることを実装するために私が何をすべきかについてより良い考えがありますか?

エラーを自分で確認したい場合は、eataustineat.com / testfolder /を実行して、検索フィールドに「d」と入力し、全能の犬を選択します(これは、「再帰エラーが多すぎる」ことに気付くはずです。これにより、divが移動します。左側にありますが、非常にバグがあります。

4

5 に答える 5

2

liveまたはを使用delegateして、後で作成される要素のリスナーを追加できます。

$("a.cross-link").live("click", function()
{
   $('a[href=#2]').trigger('click');
   window.location.hash = "#2";
});

ただし、クリックはURLに移動するデフォルトのイベントをトリガーしないため、手動で行う必要があります。

于 2010-10-25T04:36:32.253 に答える
1

ドキュメントの作成後に既存のイベントを必要とする要素が追加された場合は、ライブで使用できます

$(document).ready(function() {
    $('.cross-link').live(function() {
        $('a[href=#2']).click(); //No cross-link class allowed on this element as it is responsible for the recursion
    });
});
于 2010-10-25T04:43:23.557 に答える
0

上記の私のコメントを参照するために、これは私がそれをした方法です。ライブを使用することをお勧めします...


var open = function (myObj, animationTime) {
    //do stuff
    $(myObj).unbind('click');
    $(myObj).click(function () {
        close(myObj, timer);
    });
}

var close = function (myObj, animationTime) {
    //dostuff
    //remove close click event and then rebind the click event to open
    $(myObj).unbind('click');
    $(myObj).click(function () {
        open(myObj, timer);
    });
}

$(".mySelector").click(function () {
    open($(this), timer);
});


于 2010-10-25T04:52:03.740 に答える
0

再帰はトリガーから発生します

$('a[href=#2]').trigger('click');

この要素がイベントからクリックされると、同じコードで処理されるさらに別のイベントがスローされます。

これは機能するはずです:

    $(document.ready)(function(){
      $('.cross-link').click(function(){
       #('a[href=#2').click();
});
});

また、パフォーマンスの観点から、IDによる選択は属性による選択よりも高速であるため、2番目のリンクにIDを追加する方が最適です。それでもhrefで選択したいが、そのようなリンクが1つしかない場合は、次のようにします。

#('a[href=#2 :first').click();
于 2010-10-25T04:37:11.780 に答える
0
$('body').click(function(evt) {
    if(evt.target.nodeName === 'A' && $(evt.target).hasClass('cross-link')) {
        $('a[href=#2]').trigger('click');
    }
  });

elseあなたはif-elseステートメントのを逃します。

于 2017-05-31T19:31:51.007 に答える