jQuery代码重复问题

时间:2011-01-29 03:47:32

标签: javascript jquery iframe

我在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变量,让我知道为了调试目的发送了什么页面信息。)

提前谢谢, 键

3 个答案:

答案 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,这就是为什么渲染一个不会影响另一个。