[英]Javascript: Stop onClick default
我感到自己缺少明顯的東西,但可以看到。
設置了click事件的觸發器:
anchor.addEventListener("click", myClickEvent ); function myClickEvent() { this.preventDefault(); // fails return false; }
但是,默認的onClick方法仍然會發生。
我可以在添加事件監聽器的同時取消默認傳播,還是可以使用其他方法來取消傳播。 我無法在myClickEvent中使用.preventDefault(),因為該事件當時不可用。
為了清楚起見,請編輯以下注釋:即使myClickEvent返回false,也會發生標記的默認onClick。
從使用addEventListener
注冊的處理程序返回false不會執行任何操作。 參見https://stackoverflow.com/a/1357151/227299和https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
推薦的方法是調用event.preventDefault()
function myClickEvent(e) {
e.preventDefault()
}
來自HTML屬性的處理程序仍然有效,但是您不應該使用它,因為與event.preventDefault()
(不允許遵循鏈接)和event.stopPropagation()
(不要讓它return false
event.preventDefault()
相比, return false
含義還不清楚事件冒泡了)
element.addEventListener("click", myClickEvent );
function myClickEvent(event) {
event.preventDefault();
return false;
}
全局范圍中沒有名為preventDefault
此類函數-您需要使用已傳遞到回調中的事件。
還請確保您在事件附加的東西,可以點擊(一種形式,錨,按鈕等), 可以潛在地具有一個事件阻止。
如果將事件附加到子元素/父元素,則將無法按預期工作。
幾乎在這里感謝Teemu的代碼,但不完全是。
根據調用函數的方式而有所不同。 似乎既發送了定義'this'值的隱藏參數,又調用了不帶參數的自動事件對象作為第一個可見參數:
不帶參數調用它:
anchor.addEventListener("click", myClickEvent ); function myClickEvent(param1, param2) { // this = events parent element (<a>) // this.href = <a href=...> // param1 = event object // param2 = undefined oEvent = param1; oEvent.preventDefault(); }
但是然后使用參數調用它:
anchor.addEventListener("click", function (oEvent) { myClickEvent(oEvent, myParameter); }); function myClickEvent(param1, param2) { // this = [object Window] // this.href = undefined // param1 = event object // param2 = myParameter oEvent = param1; oEvent.preventDefault(); }
請注意,當手動發送參數時,“ this”的值從事件父元素變為“ [object Window]”,從而導致this.href出錯。
但是,preventDefault現在似乎可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.