2016-04-28 10 views
0

コンテンツページでクリックイベントリスナーを使用してWebページから要素を取得するChrome拡張機能を作成しましたが、preventDefaultは数回だけ動作します。event.preventDefaultはどこでも動作しませんか?

たとえばthis websiteメニューバーをクリックすると、クリックアクションが発生するのを防ぐ代わりに、次のページにリダイレクトされます。 これはcontent.js occuringからのイベントをクリックして停止する方法

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()'はソースエレメントが 'a'の中の' span'の場合には動作しませんか? – Halcyon

+0

このイベントハンドラはキャプチャモードを使用していません(3番目のパラメータ= trueで示されていますか? – James

答えて

-1

return false;を使用するか、e.preventDefault();e.stopPropagation()を一緒に使用する必要があります。これにより、イベントが親のアンカータグまでバブリングするのを防ぐことができるからです。

+0

私はこれを試しましたが、このウェブサイトではクリックされた要素の詳細を与えていません! –

+0

あなたは 'return false;'を試しました?また、clickイベントを 'a'タグにバインドする必要があります。あなたはいけませんか? –

+0

stopPropagationが機能しました:) –

0

これは、イベントハンドラを子の代わりにドキュメント自体に添付するためです。したがって、子要素をクリックすると、バブリングによってドキュメントに到達するときにのみイベントが防止されますが、その間にイベントがトリガーされます。

関連する問題