无论我放在哪里,都会发生火灾

时间:2013-03-20 14:23:50

标签: javascript jquery

是的,我对此非常痴迷。我可能做错了什么,但这就是我正在做的事情:

$(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()的{​​{1}},我无法找到阻止它的方法。来自openPage1()的{​​{1}}有一个名称相同的按钮,但是在.load()上我需要在点击按钮之前修改内容。

我需要使用openPage1(),因为在文档准备好之前我无法点击按钮。

基本上我需要的是同一个openPage2()上的两个单独的.load()个实例,它们不会相互关联。

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

有人可以帮助我,这一直让我整个下午都很忙。

4 个答案:

答案 0 :(得分:4)

尝试使用on,并在加载后解除绑定

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

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

答案 1 :(得分:2)

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

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

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

如果您点击#somebutton上的5次,则最终应拨打5次$('#button').click()

如果您想执行一次,您可以关注Fred's suggestion,或使用jQuery .one() binder:

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

以下是更新后的jsfiddle:每次点击只能显示一次“已加载”。

答案 2 :(得分:1)

也许尝试并替换这两个函数中的行:

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

否则它可能在设置新事件处理程序之前触发事件。

答案 3 :(得分: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"));
    });
});