簡體   English   中英

Javascript:停止onClick默認

[英]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/227299https://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM