0

コーディングが正確な 2 つのファイル、ファイル A と B があります。ファイル A 内には、ファイル B のポップアップを作成するためのリンクがあります。ファイル A の上部に、リンク (a href) を作成しました。ユーザーに警告します。この正確なコードはファイル B にあります。ファイル A では機能しますが、ファイル B では機能しません。

    <a href="#" id="send-email">Send Email</a>

そしてjQuery:

    $('#send-email').click(function(e) {
        alert('works');
    });

奇妙なことに、それらはすべて同じ外部 jQuery ファイルにリンクされており、このポップアップ クリックを除いて、そこにある他のすべての jQuery 関数 (アコーディオン メニューなど) が機能します。最初に jQueryUI を使用してみましたが、それがこの問題を発見した方法です。それから必要最小限のクリック アラートに行き着きました。それが上に投稿したコードです。

.click はポップアップで機能しますか? もしそうなら、どのように?

4

3 に答える 3

1

@voigtanに同意します。動的コンテンツにイベント ハンドラーを割り当てるのは難しい場合があります。

ドキュメント準備ハンドラーでイベントをバインドする場合、イベント ハンドラーがポップアップのコンテンツにバインドされていない場合があります。それを処理するには、次の 2 つの方法があります。

  1. ポップアップ コンテンツが表示された後にコールバックを行い、新しい要素のイベントをバインドします。
  2. 要素に統一されたイベント ハンドラーがある場合は、セレクターとして使用できるクラスを要素に割り当て、jQuery::live() 呼び出しでイベントをアタッチします。次に例を示します。

    <a href="#" class="send-email">Send Email</a>
    
    $(function() {
        $(document).on("click", "a.send-email", function(e) {
            alert('works');
            e.preventDefault();
        });
    });
    
于 2012-08-22T17:43:41.690 に答える
1

ポップアップは、実際には他のページと何ら変わりはありません (特定のブラウザーでセッション状態とコンテキストについて話す場合を除きますが、それはここでは問題ではありません)。clickポップアップでも、他のウィンドウと同じように機能します。ただし、問題を引き起こしている可能性のあることがたくさんあります。ID の重複、機能の欠落/スペルミスなど。

したがって、まだ決定的な答えを出すことはできませんが、デバッグするための良いステップは次のとおりです。

あなたがやっている方法でクリックイベントをアタッチする代わりに(あなたの方法は私の方法よりもはるかに正しいことに注意してください。ただし、私の方法はデバッグに役立ちます)、次のようにします:

<a href="#" onclick = "alert('works')" id="send-email">Send Email</a>

それでもうまくいかない場合は、ポップアップなどをブロックしている可能性があります。アラートの問題です。うまくいく場合は、これを試してください:

<a href="#" onclick = "AlertIt()" id="send-email">Send Email</a>

あなたのページの他の場所でこれを使用してください:

function AlertIt() {
alert("worked");
}

これも機能する場合は、jQuery の読み込みに問題があるか、jQuery の競合が発生している可能性が高いです。

編集:ああ、もう1つ。jQueryのlive機能を使ってみてください。これにより、要素が既に存在するかどうかにかかわらず、イベント ハンドラーが要素にアタッチされます。click要素が既に存在する場合にのみ、イベントを添付します。これは、いわば、使用している操作の順序が原因である可能性があります。

live次のようになります。

$("#send-email").live("click", function(){ alert("Worked"); });
于 2012-08-22T17:30:31.993 に答える
0

ポップアップとはどういう意味ですか? jQueryUIダイアログですか?もしそうなら、JavaScriptコードをロードしたときにマークアップは存在しますか?

.onjQuery 1.7+を使用している場合に使用でき#send-email、ロード時にページ上にあるすべてのものに対してデリゲートを実行するか、AJAXを使用して動的にロードします:

$(function() {
    $(document).on("click", "#send-email", function(e) {
        alert('works');
        e.preventDefault();
    });
});
于 2012-08-22T17:23:52.587 に答える