2010-08-02 86 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