0

我有一个包含很多 e.stopPropagation 的页面,所以我决定我要做的是创建一个函数。这是代码

function stopProp(name) {
 if($(e.target).hasClass(name)) {
   e.stopPropagation();
   }
 }

尽管每次在控制台中它似乎根本不起作用,并说 stopProp 是未定义的。

这是我试图变成一个函数的实际 JS

$('#chatting').on('click','.chatheader',function(e){
     if($(e.target).hasClass('setting')) {
         e.stopPropagation();
      }
    }
});

任何人都可以帮助我弄清楚为什么这不起作用以及我应该如何解决这个问题?我认为只需更改为一个函数就相当容易,因此我可以轻松编写stopProp('setting');,尽管这里不是这种情况。

4

2 回答 2

1

事件的处理程序click应返回一个参数,该参数将是事件。所以你应该有一个返回事件的函数,例如:

$('#chatting').on('click','.chatheader',stopProp('setting'));

function stopProp(name) {
  return function(e) {
    if($(e.target).hasClass(name)) {
      e.stopPropagation();
    }
  }
}
于 2013-04-29T08:13:37.800 回答
1

您需要将event对象传递给stopProp方法。

function stopProp(e) {
    if($(e.target).hasClass(e.data.className)) {
        e.stopPropagation();
    }
}

然后

$('#chatting').on('click', '.chatheader', {className: 'setting'}, stopProp);

演示:小提琴

于 2013-04-29T08:14:23.293 回答