triggering .click() inside list element gives error

时间:2016-05-17 11:19:10

标签: javascript jquery

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?

3 个答案:

答案 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可以用来阻止事件冒泡到父元素,所以不会有任何递归调用,因为父母没有得到事件。