I have a list where there either can be pure text or a link inside. If a link is available, the entire list-element must be clickable. So when I do this:
if ($('.link').length) {
$('li[data-contains-link]').on('click', function (e) {
$('.link').click()
})
}
it gives me the error: Uncaught RangeError: Maximum call stack size exceeded
is there some way to avoid this?
答案 0 :(得分:0)
您在点击事件后提升点击事件 - 可能是递归调用。确保li[data-contains-link]
不是.link
,否则会产生无限循环。
答案 1 :(得分:0)
$(' .link')位于$(' li [data-contains-link]')
内或
某些$(' li [data-contains-link]')有类链接。
这会让你进入一个循环,听一下点击,然后在自己或其中一个孩子上生成它,从而进行递归。
答案 2 :(得分:0)
尝试在PrintSettingsXml.Descendants("PrintDestination");
的点击处理程序中添加event.stopPropagation()
:
.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!!!!');
})
表明它是具有li[data-contains-link]
元素的父元素。由于您已在父元素上绑定了一个click事件,并且您触发了对子元素的单击,因此会进行递归调用,从而导致错误: Uncaught RangeError:超出最大调用堆栈大小 即可。
这是由于 事件冒泡 。 .link
可以用来阻止事件冒泡到父元素,所以不会有任何递归调用,因为父母没有得到事件。