我在jQuery中有一段代码,用于在单击链接后获取iFrame的内容,并在内容完成加载后使用。它有效,但我有一个问题重复 - 至少我认为这是它正在做的,但我无法弄清楚为什么或如何。
jQuery JS:
$(".pageSaveButton").bind("click",function(){
var theID = $(this).attr("rel");
$("#fileuploadframe").load(function(){
var response = $("#fileuploadframe").contents().find("html").html();
$.post("siteCreator.script.php",
{action:"savePage",html:response, id: theID},
function(data){
alert(data);
});
});
});
HTML链接(众多网站之一):
<a href="templates/1000/files/index.php?pg=0&preview=false"
target="fileuploadframe" class="pageSaveButton" rel="0">Home</a>
因此,当您单击链接时,链接到的页面将打开到iframe中,然后JS将触发并等待内容完成加载,然后抓取iframe的内容并将其发送到PHP脚本以保存到一份文件。我有一个问题,当您单击一行中的多个链接以保存多个文件时,所有以前文件的内容都会被您单击的当前文件覆盖。我已经检查了我的PHP,并且我非常肯定是JS的错误。
我注意到 - 因为我提醒PHP的返回值 - 我得到了多个警告框。如果它是您加载主页后点击的第一个链接 - 那么它很好,但是当您点击第二个链接时,除了预期的警报之外,您还会获得您点击的每个页面的警报。当前页面。
我希望我已经解释得很好,如果我需要更好地解释,请告诉我 - 我真的需要帮助解决这个问题。 :)(如果你认为php脚本是相关的,我可以发布它 - 但它只打印出$ _POST变量,让我知道为了调试目的发送了什么页面信息。)
提前谢谢, 键
答案 0 :(得分:1)
来自jQuery .load()
documentation我认为您需要将脚本更改为:
$(".pageSaveButton").bind("click",function(){
var theID = $(this).attr("rel");
var lnk = $(this).attr("href");//LINK TO LOAD
$("#fileuploadframe").load(lnk,
function(){
//EXECUTE AFTER LOAD IS COMPLETE
var response = $("#fileuploadframe").contents().find("html").html();
$.post("siteCreator.script.php",
{
action:"savePage",
html:response,
id: theID
},
function(data){alert(data);}
);
});
});
对于多个回复,您可以使用blockui之类的内容来停用任何进一步的点击,直到.post
来电回复。
答案 1 :(得分:0)
这是因为行
$("#fileuploadframe").load(function(){
每次按下链接时都会执行。只将loadhandler添加到document.ready上的iframe。
答案 2 :(得分:0)
如果用户有能力通过您的用户界面点击触发此功能的多个链接,那么无论您使用单个iframe,都会遇到此问题。我建议为每个保存过程创建一个iframe,这就是为什么渲染一个不会影响另一个。