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()的实例iframe,它们不会相互触发。

除此之外,也许我对jQuery / JS的理解是错误的,但.load()事件不应该只在点击相应按钮后才监听吗?

谁能帮帮我,这让我整个下午都很忙。

4

4 回答 4

4

尝试使用 on,一旦加载,取消绑定

$("#iframe").on("load", function(){
    $(this).off("load");
    $('#button').click();
});

这样您就可以在单击第二个按钮之前删除您放置的处理程序?

于 2013-03-20T14:28:57.213 回答
2

通过编写 : $('#iframe').load(function (){ $('#button').click(); });,您将在 load 事件上添加一个侦听器,该侦听器将保留并在 iframe 的每次后续重新加载时重新执行。

这是一个jsfiddle来演示这一点:单击“重新加载”按钮,查看“已加载”消息出现在控制台中的次数。

在您的情况下,如果您单击#somebutton,然后#someotherbutton单击 ,在第二次单击后,您将在load事件上绑定两个处理程序,并且都将被触发。

如果你点击 5 次#somebutton,你最终应该会调用 5 次$('#button').click()

如果你想执行一次,你可以按照Fred 的建议,或者使用 jQuery .one()binder:

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

这是更新后的jsfiddle:“加载”每次点击应该只显示一次。

于 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 回答