16

ユーザーが特定のアクションを実行した後に動的に作成される iframe 内のイベント (click任意の a など) にバインドする必要があります。<input>iframe を追加するコードと iframe 内のコードは私のものではなく、変更することはできません (これは CMS 管理パネルです)。

jQuery 1.6を使用してイベントをリッスンするにはどうすればよいですか(繰り返しますが、これは私の選択ではありません。私delegate()が欲しいものかもしれないと思った:

$('body').delegate('iframe input', 'click', function(e) {
    alert('bingo?');
});

しかし、上記は入力がクリックされたときに警告しません。ただし、以下は期待どおりに機能します。

$('body').delegate('input', 'click', function(e) {
    alert('bingo?');
});

しかし、これは iframe の外側にあります。

srciframe、明らかに同じドメインを指しています。

正しい方向への助けや単なる製品は大歓迎です。

4

1 に答える 1

17

これは、 内の要素を'iframe input'選択しません。inputiframe

次のようにイベントをバインドできます

$('body iframe').contents().find('input').bind('click',function(e) {
    alert('bingo?');
 });

次のようなものも使用できると思います

$('body iframe').contents().find('body').delegate('input','click',function(e) {
    alert('bingo?');
 });

iframe が完全に読み込まれたかどうかを検出するには、この回答 https://stackoverflow.com/a/5788723/344304で説明されている方法を使用します

メイン/親ドキュメントに追加:

function iframeLoaded() {
    $('body iframe').contents().find('input').bind('click',function(e) {
        alert('bingo?');
     });
}

iframe ドキュメントに追加します。

window.onload = function() {
    parent.iframeLoaded();
}

または使用

$('body iframe').load(function(){
     $('body iframe').contents().find('input').bind('click',function(e) {
            alert('bingo?');
         });
});
于 2012-06-18T17:38:35.693 に答える