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(...类似的东西。

有任何想法吗?

PS 这个live()调用只是在一个 jQuery doc load ( $(function(){...});)

4

2 回答 2

2

如果你使用one你的问题应该得到解决。

$('iframe').one("load", function() {
于 2010-08-02T22:08:18.537 回答
2

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

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

用这个:

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

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

$('iframe').unbind('load').load(function(){
于 2010-08-02T22:08:49.937 回答