簡體   English   中英

e.preventDefault()和e.stopPropagation()無法按預期工作

[英]e.preventDefault() and e.stopPropagation() not working as expected

該應用基本上是一種DOM檢查器工具,類似於使用普通JS制作的Chrome開發工具中提供的工具。 基本上,當用戶單擊元素時,用戶應該可以使用諸如類名,xpath和文本之類的屬性。 我遇到了一個問題:當用戶單擊鏈接或按鈕之類的元素時,瀏覽器將導航到預期的頁面。 我嘗試使用以下代碼來防止此問題:

var target = getSelectedElementFromPoint(e.clientX, e.clientY); // target has the element the user wants to inspect
if(target.nodeName.toLowerCase() == "a" || target.nodeName.toLowerCase() == "button"){
        e.stopPropagation(); // e is the event
        e.preventDefault();
 }

代碼的目的是獲取用戶單擊的元素,檢查它是錨標記還是按鈕,如果是,則阻止事件進一步進行。 但是,它不能按預期方式工作,因為在單擊鼠標時,它仍導航到該頁面。

任何幫助,將不勝感激。

編輯:請注意,我不能在此特定實例中使用jQuery。 謝謝

EDIT2:可能早些時候應該提到這一點,但我忘了。 我實際上也嘗試過return false 使用return false可以實現所需的功能,但是唯一的問題是,一旦用戶離開“檢查模式”,該鏈接將不再可單擊,並且這不是理想的行為。

基本上我想要的是,當用戶進入“檢查模式”時,所有鏈接都是不可點擊的。 一旦刪除“檢查模式”,這些鏈接就應該可以單擊。 我想到了禁用用戶單擊的鏈接,而不是禁用頁面上的所有鏈接。

解決方案是將代碼簡單地包裝在'inspectMode'檢查中。 'inspectMode'應為布爾值var。

將以下代碼添加到事件處理程序中:

if (inspectMode)
{
    var target = getSelectedElementFromPoint(e.clientX, e.clientY);
    if(target.nodeName.toLowerCase() == "a" || target.nodeName.toLowerCase() == "button")    
    {
        e.stopPropagation(); // e is the event
        e.preventDefault();
        return false;
    }
}
return true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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