2010-08-02 85 views
0

我不知道为什么这是鼓泡,但它是。想知道是否有人有任何想法?奇怪的鼓泡问题

$('#file_upload').live('submit',function(event){ 
     $('#file_upload').attr('action','io.cfm?action=updateitemfile&item_id='+$('.agenda-modal').attr('data-defaultitemid')); 
     $('iframe').load(function(){ 
      $('.upload_output').empty(); 
      $livepreview.agenda({ 
       action:'get', 
       id:$('.agenda-modal').attr('data-defaultitemid'), 
       type:'item', 
       callback:function(json){ 
        for(x in json[0].files){ 
         $('.upload_output').append('<li class="file-upload"><a target="blank" href="io.cfm?action=getitemfile&item_file_id='+json[0].files[x].item_file_id+'">'+json[0].files[x].file_name+'</a> <a style="color:red" href="#deletefile-'+json[0].files[x].item_file_id+'">[X]</a></li>'); 
        } 
        console.log('callback'); 
       } 
      }); 
      console.log('iframed'); 
     }); 
     console.log('go'); 
    }); 

所以,如果我上传一个文件,我得到了我的控制台如下:

go 
iframe 
callback 

如果我去做了一个第二次在一排:

go 
iframed 
iframed 
callback 
callback 

和三次:

go 
iframed 
iframed 
iframed 
callback 
callback 
callback 

我认为如果live()事件冒泡“go”也会冒泡,但事实并非如此。我试过event.stropPropagation就在里面提交,并且.die()连接到$('#file_upload').die().live(...就这样。

任何想法?

P.S.这live()调用只是在一个jQuery文档加载($(function(){...});

回答

2

如果您使用one您的问题应该解决。

$('iframe').one("load", function() { 
+0

谢谢,这工作!虽然问题,这仍然会检查每次提交表单时是否加载iframe? – 2010-08-02 22:12:36

2

这是因为你每次附加新/附加.load()处理程序,这意味着一个你刚才添加和所有以前load事件处理程序运行的。如果您希望处理程序只运行一次,使用.one(),而不是这样的:

$('iframe').load(function(){ 

使用本:

​​3210

,或者多一点浪费,但你可以.unbind()每次:

$('iframe').unbind('load').load(function(){ 
+0

谢谢,这工作!虽然问题,这仍然会检查每次提交表单时是否加载iframe? – 2010-08-02 22:13:19

+0

@Oscar - 是的,它只是不会运行*你附加的每个*'load'处理程序,我们正在清理以前提交的上述处理程序在上述每个解决方案中......它会像你想要的那样工作,搏一搏 :) – 2010-08-02 22:14:35