开发者问题收集

stopPropagation 函数读取未定义

2013-04-29
2048

我有一个包含大量 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'); ,尽管这里不是这种情况。

2个回答

click 事件的处理程序应返回一个参数,即事件。因此,您应该有一个返回事件的函数,例如:

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

function stopProp(name) {
  return function(e) {
    if($(e.target).hasClass(name)) {
      e.stopPropagation();
    }
  }
}
Samuel Caillerie
2013-04-29

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

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

然后

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

演示: Fiddle

Arun P Johny
2013-04-29