[英]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.