2016-04-28 7 views
0

Я сделал расширение хром, чтобы получить элемент с веб-страниц, используя прослушиватель событий на странице содержимого, но preventDefault работает только несколько раз.event.preventDefault не работает везде?

например, на this website, когда я нажимаю на панель меню, она перенаправляется на следующую страницу, а не предотвращает действие щелчка. это мой слушатель событий в content.js

document.addEventListener('click', function xyz(e){ 
e.preventDefault(); 
//alert(e); 
var target = e.target || event.srcElement; 
var attributes = Array.prototype.slice.call(target.attributes).map(function(i) { 
    return [String(i.name)+": "+String(i.value)] 
}) 
alert(attributes); 
prompt("xpath1 :",getPathTo(target)); 
chrome.runtime.sendMessage({method:"captureElement",data:attributes}); 
},true) 

как остановить нажмите событие из встречающихся!

+0

Возможно, 'e.preventDefault()' не работает, если исходный элемент является 'span' внутри' a'? – Halcyon

+0

Не этот обработчик событий использует режим захвата, о чем свидетельствует третий параметр = true? – James

ответ

-1

Вам либо необходимо использовать return false;, либо использовать e.preventDefault(); и e.stopPropagation() вместе. Поскольку это предотвратит появление пузырьков до тега родительского якоря.

+0

Я попробовал это, но на этом веб-сайте, тогда это не дало детали элемента с щелчком! –

+0

вы попробовали 'return false;' ? Кроме того, вы должны привязать событие click только к тегам 'a'. не так ли? –

+0

stopPropagation работал :) –

0

Это связано с тем, что вы прикрепляете обработчик событий к самому документу, а не к некоторому ребенку. Поэтому, если вы нажмете на дочерний элемент, это событие будет предотвращено только тогда, когда оно достигнет документа через пузырь, но в то же время оно будет запущено.

Смежные вопросы