奇怪的冒泡问题

时间:2010-08-02 22:03:50

标签: javascript jquery ajax events event-bubbling

我不确定为什么会冒泡,但事实确实如此。想知道是否有人有任何想法?

$('#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 doc load($(function(){...});

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

使用它:

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

或者,更浪费但每次都可以.unbind()

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