Javascript 与ng click一起使用的ng mousedown的意外行为

Javascript 与ng click一起使用的ng mousedown的意外行为,javascript,angularjs,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Click,我有以下html布局: <label ng-mousedown="mousedownHandler($event)" ng-click="clickHandler($event)"> <input type="checkbox" /> </label> 这个plunker似乎成功了:,但我不能用同样的方式在代码中复制它,尽管我有一些明显的区别,比如我不需要在单击处理程序中手动处理复选框模型值来更改其值 另外,我也不明白为什么要在单击处理

我有以下html布局:

<label ng-mousedown="mousedownHandler($event)"
       ng-click="clickHandler($event)">
    <input type="checkbox" />
</label>
这个plunker似乎成功了:,但我不能用同样的方式在代码中复制它,尽管我有一些明显的区别,比如我不需要在单击处理程序中手动处理复选框模型值来更改其值

另外,我也不明白为什么要在单击处理程序中放入
e.preventDefault()
,以使此代码段正常工作?为什么不这样做会导致触发两次
clickHandler

但我遇到的最重要的问题是,更改属性顺序会改变我的案例中的小部件行为


当我第一次放置
ng mousedown
然后
ng click
时,我将mousedown事件加倍,并且根本没有单击,但当我首先放置
ng click
然后放置
ng mousedown
时,我将mousedown事件加倍,并且没有单击。是AngularJS bug还是我遗漏了一些重要的东西?

所以,我最后要自己回答:这是因为Chrome的AngularJS Batarang扩展


以下是相关问题:。但在我的情况下,仅仅从控制台禁用扩展并没有帮助我。后来,我从设置中关闭了整个扩展,问题就解决了。

标签会将单击事件转发到已包装的复选框,最终导致两个单击事件。因此,最简单的方法是注册ng,单击复选框而不是包装标签。见@michael谢谢你的建议。看来我找到了这个问题的根源——AngularJS Batarang插件。我通过禁用整个插件解决了这个问题。
$scope.mousedownHandler = function(e) {
    console.log('mousedown');
};
$scope.clickHandler = function(e) {
    console.log('click');
};