是的,我对此非常痴迷。我可能做错了什么,但这就是我正在做的事情:
$(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()
事件不应该只是在点击相应的按钮后才会收听?
有人可以帮助我,这一直让我整个下午都很忙。
答案 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"));
});
});