2015-04-30 37 views
2

我有以下的HTML佈局:意外行爲NG單擊

<label ng-mousedown="mousedownHandler($event)" 
     ng-click="clickHandler($event)"> 
    <input type="checkbox" /> 
</label> 

,按照該範圍的方法:

$scope.mousedownHandler = function(e) { 
    console.log('mousedown'); 
}; 
$scope.clickHandler = function(e) { 
    console.log('click'); 
}; 

這plunker似乎是成功的: http://plnkr.co/edit/pb02Zy6MtB322dUE4iUE?p=preview,但我不能在我的代碼中以相同的方式重現它,儘管我有一些明顯的差異,例如我不需要在點擊處理程序中手動處理複選框模型值來更改其值。

另外我不明白爲什麼我應該把e.preventDefault()放在點擊處理程序中使這個片段正常工作?另外爲什麼不這樣做會導致兩次觸發clickHandler

但我碰到的最重要的事情是改變屬性順序改變了我的情況下的窗口小部件行爲。

當我第一次把ng-mousedown然後ng-click我已經翻番mousedown事件並沒有點擊可言,但是當我把ng-clickng-mousedown我已經翻番點擊事件,並沒有鼠標按下。它可能是一個AngularJS錯誤還是我錯過了重要的東西?

+1

+0

@ michael感謝您的建議。看來我發現了這個問題的根源 - AngularJS Batarang插件。 http://stackoverflow.com/questions/29090162/我解決了它通過禁用整個插件。 – ivkremer

回答

2

所以,我最終會自己回覆:這是因爲Chrome的AngularJS Batarang擴展。

這裏是相對的問題:ng-mousedown handler attaching to ng-mouseup's event。但在我的情況下,只是從控制檯禁用擴展沒有幫助我。後來,我將整個分機從設置中解放出來,問題解決了。