私は奇妙な問題に遭遇しています:Javasriptを使って8種類のHTML要素を作成します(それぞれほぼ同じ方法で)イベントリスナーが追加されていません。ここでJavascript addEventListenerが特定の要素で機能していない
はうまく機能要素の一つのコードです:
var primaryProductNameLink = document.createElement("a");
primaryProductNameLink.setAttribute("id", "primaryProductNameLink");
primaryProductNameLink.setAttribute("href", result.primaryProduct.pageLink);
primaryProductNameLink.setAttribute("data-resultRequestID", getResultResponse.resultRequestID);
primaryProductNameLink.setAttribute("data-linkName", "primaryProduct");
primaryProductNameLink.addEventListener("click", clickedLinkInResultSection);
をI:
var primaryProductImageLink = document.createElement("a");
primaryProductImageLink.setAttribute("id", "primaryProductImageLink");
primaryProductImageLink.setAttribute("href", result.primaryProduct.pageLink);
primaryProductImageLink.setAttribute("data-resultRequestID", getResultResponse.resultRequestID);
primaryProductImageLink.setAttribute("data-linkName", "primaryProduct");
primaryProductImageLink.addEventListener("click", clickedLinkInResultSection);
そしてここでは、イベントリスナーが適用されていない要素のコードですキャッシュのクリア、変更のアップロード、ページの表示次のコマンドを実行すると、イベントリスナーが最初の要素に追加されますが、2番目の要素には追加されません。
getEventListeners(document.getElementById( "primaryProductImageLink"));
{click:Array(1)}
getEventListeners(document.getElementById( "primaryProductNameLink")));
{}
私は私のJavascriptの一番最後に次のコードを追加する場合は、イベントリスナーが正常にprimaryProductNameLink要素に追加されます。
document.getElementById("primaryProductNameLink").addEventListener("click", clickedLinkInResultSection);
検証:
getEventListeners(document.getElementById( "primaryProductNameLink"));
{クリック:配列(1)}
私はこの要素に異なるイベントリスナーを追加しようとしているが、どれも働いていません。私もテスト属性を追加して、うまく表示されます。テストコード:
var primaryProductNameLink = document.createElement("a");
primaryProductNameLink.setAttribute("id", "primaryProductNameLink");
primaryProductNameLink.setAttribute("href", result.primaryProduct.pageLink);
primaryProductNameLink.setAttribute("data-resultRequestID", getResultResponse.resultRequestID);
primaryProductNameLink.setAttribute("data-linkName", "primaryProduct");
primaryProductNameLink.addEventListener("mouseover", function() { console.log("test"); });
primaryProductNameLink.addEventListener("mouseout", function() { console.log("test"); });
primaryProductNameLink.addEventListener("click", clickedLinkInResultSection);
primaryProductNameLink.setAttribute("data-test", "test");
私は自分のJavascriptファイル全体を見渡しましたが、 "primaryProductNameLink"への参照はありません。これはイベントリスナーを削除する可能性があります。
私は回避策があることを知っています(スクリプトの最後にイベントリスナーを追加して示したような)が、私は本当に興味があり、この問題の原因を知りたいと思っています。ありがとう!
EDIT:フルJavascriptがここで見つけることができます:https://jsfiddle.net/fbchm4ov/(4つの質問が回答された後、私の記事で説明した要素のみが生成されます。)私はあなたがprimaryProductNameLink
primaryProductInfoDiv
に以降後に追加することをお読みフィドルから
現在3回コメントして申し訳ありません。 jsFiddleは素晴らしいだろう、私はこれを掘り起こしたい。 – Syntac
おそらく 'clickedLinkInResultSection'はあなたがバインドしているスコープでは定義されていませんか?私はatmしか推測できません。 – Syntac
@Syntac私は完全なjavascriptファイルでjsfiddleリンクを追加しました。これらの要素を生成するコードは関数 "getProductSelectorResultCallback"にあります。 –