2016-05-17 21 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()可以用来阻止事件冒泡到父元素,所以不会有任何递归调用父没有得到事件。

相关问题