0

そうですね、私はこれでかなり動揺しています。私はおそらく何か間違ったことをしていますが、ここで私がやっていることは次のとおりです。

$(document).ready(function () {
    $('#somebutton').click(function () {
        openPage1();
    });
    $('#someotherbutton').click(function () {
        openPage2();
    });
});
var openPage1 = function () {
    $('#iframe').attr('src', 'someurl');
    $('#iframe').load(function () {
        $('#button').click();
    });
};
var openPage2 = function () {
    $('#iframe').attr('src', 'anotherurl');
    $('#iframe').load(function () {
        $('#anotherbutton').click();
    });
}

クリックするたびにsomebutton、すべてが期待どおりに進みます。しかし、私がクリックするとsomeotherbutton.load()fromが最初に呼び出され、それopenPage1()を止める方法が見つかりません。.load()fromopenPage1()には同じ名前のボタンがありますが、ボタンをクリックopenPage2()する前に内容を変更する必要があります。

.load()ドキュメントの準備が整う前にボタンをクリックできないため、使用する必要があります。

基本的に私が必要と.load()しているのは、同じ上にある 2 つの別々のインスタンスであり、iframe互いに発火しません。

その上、jQuery/JS の私の理解が間違っているのかもしれませんが.load()、対応するボタンをクリックした後にのみイベントがリッスンされるべきではありませんか?

誰か助けてくれませんか、これで午後中ずっと忙しくしています。

4

4 に答える 4

2

:と書くこと$('#iframe').load(function (){ $('#button').click(); });で、loadイベントにリスナーを追加します。このリスナーは、iframeをリロードするたびに保持され、再実行されます。

これを示すjsfiddleを次に示します。「再ロード」ボタンをクリックして、「ロードされた」メッセージがコンソールに何回表示されるかを確認します。

あなたの場合、をクリックし#somebutton、次にをクリックする#someotherbuttonと、2回目のクリック後に、2つのハンドラーがloadイベントにバインドされ、両方がトリガーされます。

を5回クリック#somebuttonすると、5回呼び出すことになります$('#button').click()

一度実行したい場合は、 Fredの提案に従うか、jQuery.one()バインダーを使用できます。

$('#iframe').one('load', function(){  $('#button').click()  });

更新されたjsfiddleは次のとおりです。「loaded」はクリックごとに1回だけ表示されます。

于 2013-03-20T14:45:43.893 に答える
1

両方の関数の行を次のように置き換えてみてください。

$('#iframe').load(function() {
    $('#anotherbutton').click();
};
$('#iframe').attr('src', 'anotherurl');

そうしないと、新しいイベント ハンドラが設定される前にイベントが発生する可能性があります。

于 2013-03-20T14:27:24.897 に答える
0

これは実際にはあなたの問題に対する答えではありません今では答えですが、意図したとおりに関数を利用することはここで有益であると思います。

//Utilize a single function that takes arguments
var openPage = function (frame, src, eventEl) {
    frame.attr('src', src);      // If you pass frame as a jQuery object, you don't
    frame.on("load", function(){ // need to do it again
        $(this).off("load");
        evEl.click(); //Same for your buttons
    });
}



//Simplify other code
$(document).ready(function () {
    $('#somebutton').click(function () {
        openPage($("#iframe"),somehref,$("#buttonelement"));
    });
    $('#someotherbutton').click(function () {
        openPage($("#iframe"),anotherhref,$("#someotherbuttonelement"));
    });
});
于 2013-03-20T14:39:48.357 に答える