2016-05-17 40 views
0

我有一個列表,其中有任一可以是純文本或者內部的鏈路。如果鏈接可用,則整個list-element必須是可點擊的。所以,當我這樣做:觸發。點擊()列表元素中給出錯誤

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

它給我的錯誤:Uncaught RangeError: Maximum call stack size exceeded

是有一些方法來避免這種情況?

+2

你爲什麼叫click事件本身的點擊它像扔石頭後扔一些這將是無限的 – guradio

+0

@guradio那是一個好點的:-)我可能會採取不同的方式則:-s – Steve

+2

如果您顯示你的HTML,你可以得到更多的幫助 –

回答

0

您點擊事件之後提高點擊事件 - 可能是一個遞歸調用。確保沒有li[data-contains-link].link,否則這會造成無限循環。

0

$( '鏈路 ')或者是內部$(' 的Li [數據包含鏈接] ')

一些$(' 的Li [數據包含鏈接]')有課程鏈接。

這讓你在聽一點擊,然後生成它自己或它的一個子,從而遞歸的循環。

0

嘗試增加在.link的點擊處理event.stopPropagation()

$('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!!!!');  
}) 

由於這種屬性選擇li[data-contains-link]指出,它是確實有.link元素的父元素。正如你所綁定的父元素上的click事件,你是觸發子元素上的點擊,這使得遞歸調用,從而導致錯誤:未捕獲的RangeError:最大調用堆棧大小超出

這是由於事件冒泡event.stopPropagation()可以用來阻止事件冒泡到父元素,所以不會有任何遞歸調用父沒有得到事件。

相關問題