stopPropagation函数读取未定义

时间:2013-04-29 08:11:15

标签: javascript jquery function stoppropagation

我有一个包含大量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 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

然后

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

演示:Fiddle