0

私はこの機能を持っています:

function main() {
    var bottomArea = document.getElementsByClassName("bottom-area");
    for (var i = 0; i < bottomArea.length; i++) {
        var showDialogLink = document.createElement("a");
        showDialogLink.innerHTML = "link";
        showDialogLink.onclick = function(){showSelect(this);return false;};
        bottomArea[i].insertBefore(showDialogLink, bottomArea[i].childNodes[3]);
    }
}

これまでのところ、コードは問題なく動作します。新しく作成したリンクをクリックすると、showSelect(this) 関数が正常に呼び出されます。

問題は、別の userscript/browser 拡張機能 (アクセスできない - それは私のものではありません) があることです。これは基本的に、「bottom-area」div がネストされている別の div 全体を複製します。これも問題ありませんが、問題は、関数トリガーを複製せず、そのリンクの新しく複製されたインスタンス (その性質はよくわかりません) が showSelect(this) 関数をトリガーしなくなることです。私のユーザースクリプトによって作成された最初のものだけがそうします。

リンクに関数トリガーを追加する方法はありますか?

編集: HTML ツリーを表示するように編集します: これは冒頭にあります:

<div>
<div class="bottom-area"></div>
</div>

私のユーザースクリプトは、「a」タグに onclick イベントリスナーを含むリンクを追加します。

<div>
<div class="bottom-area"><a>link</a></div>
</div>

他のユーザースクリプトは基本的にそれを複製します(div内にテキストエリアがあり、その値も複製されます)が、イベントリスナーがないため、複製されたリンクをクリックしても関数がトリガーされなくなります。

EDIT2:それが役立つ場合、私が作成しているユーザースクリプトはredditユーザースクリプトです。コメントに小さな機能を追加し、コメント テキスト フィールドの下の「reddiquette」リンクのすぐ隣にリンクを追加しています。これは、事前に生成されたテキスト フィールドで機能します。ただし、コメント ツリーの [返信] をクリックすると、div 全体とテキスト フィールド、送信ボタン、およびリンクが返信中のコメントの下に複製されますが、リンク自体に関数トリガーがありません。

4

1 に答える 1

0

最も簡単な解決策は、HTML イベント属性 ( の代わりにaddEventListener) などを単純に使用する<a onclick="dostuff();">link</a>ことです。この属性は「複製」中に保持する必要があるためです。例については、このフィドル(Firefox 40 でテスト済み) を参照してください。

onclick 属性のコードをユーザー スクリプトと対話させるのは、別の JavaScript 環境で実行されるため、少し難しい場合があります。幸いなことに、正確なニーズに応じて、可能な回避策がたくさんあります。

于 2015-08-25T12:55:50.390 に答える