我有一个简单的指令,它呈现一个按钮。
该指令的链接函数执行以下操作:
- 绑定“mouseenter”和“mouseleave”事件。
- 取消绑定 'mouseenter' 和 'mouseleave' 事件。
- 再次绑定 'mouseenter' 和 'mouseleave' 事件。
事件的处理程序将简单的消息记录到控制台。我希望在 mouseenter 或 mouseleave 上调用一次处理程序。但是,它们会执行两次,就好像步骤 2 从未发生过一样。
该指令的代码:
function ButtonDirective() {
return {
restrict: 'E',
template: '<button><span ng-transclude></span></button>',
transclude: true,
replace: true,
link: function (scope, element, attrs) {
function mouseEnterHandler() {
console.log('mouse enter');
}
function mouseLeaveHandler() {
console.log('mouse leave');
}
element.bind('mouseenter', mouseEnterHandler);
element.bind('mouseleave', mouseLeaveHandler);
element.unbind('mouseenter');
element.unbind('mouseleave');
element.bind('mouseenter', mouseEnterHandler);
element.bind('mouseleave', mouseLeaveHandler);
}
}
}
以下 plunker 说明了这个问题:
http://plnkr.co/ocXYYZ2jv09Ch7GDRaat
有人知道它为什么会这样吗?
更新:如果你包含 jQuery 而不是依赖 JQLite,它就可以工作。唉,这不是我的选择。