2016-05-17 5 views
0

純粋なテキストまたは内部のリンクがあるリストがあります。リンクが利用可能な場合、リスト要素全体をクリック可能にする必要があります。私はこれを行うときに:リスト要素内の.click()がエラーを返します

if ($('.link').length) { 
    $('li[data-contains-link]').on('click', function (e) { 
     $('.link').click()  
    }) 
} 

を、それは私にエラーを与える:Uncaught RangeError: Maximum call stack size exceeded

は、これを回避する方法はありますか?

+2

なぜあなたはクリックイベントそのものをクリックするのですか?それは無限になる石を投げた後にいくつか投げたようなものです – guradio

+0

@guradioそれは良い点ですね:-)私は別にそれをするかもしれません:-s – Steve

+2

より多くのヘルプを得ることができるあなたのHTMLを表示してください –

答えて

0

クリックイベント後にクリックイベントを発生させています。おそらく再帰呼び出しです。 li[data-contains-link].linkでないことを確認してください。そうしないと、無限ループになります。

0

$( 'リンク ')のいずれかの内部$です(' 李[データは、含まれているリンク] ')

または

いくつかの$(' 李[データ-含まれているリンク]')クラスリンクがあります。

これは、クリックをリッスンしてから、それを自己またはその子の1つ、つまり再帰でループさせます。この属性セレクタli[data-contains-link]は、それが.link要素を持っている親要素であることを述べたよう

$('li[data-contains-link]').on('click', function (e) { 
    $('.link').click();  
}) 

$('.link').on('click', function (e) { 
    e.stopPropagation(); // <---addd it here. 
    console.log('.link elem clicked!!!!');  
}) 

.linkのクリックハンドラでevent.stopPropagation()を追加

0

してみてください。親要素でクリックイベントをバインドし、子要素のクリックをトリガーすると、再帰呼び出しが行われ、エラーが発生します。キャッチされないRangeError:最大呼び出しスタックサイズがを超えました。

これは、イベントバブルのによるものです。です。 event.stopPropagation()を使用すると、イベントが親要素にバブルアップするのを止めることができます。したがって、親がイベントを受け取らないため、再帰呼び出しはありません。

関連する問題