Странная пузырящаяся проблема - PullRequest
0 голосов
/ 03 августа 2010

Я не уверен, почему это пузырится, но это так. Хотите знать, если у кого-нибудь есть идеи?

$('#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 ]

2 голосов
/ 03 августа 2010

Это потому, что вы каждый раз присоединяете обработчик новый / дополнительный .load(), это означает, что только что добавленный вами и все предыдущие обработчики событий load работают,Если вы хотите, чтобы обработчик запускался только один раз, используйте .one(), вместо этого:

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

используйте это:

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

или, немногоболее расточительно, но вы могли бы .unbind() каждый раз:

$('iframe').unbind('load').load(function(){
2 голосов
/ 03 августа 2010

Если вы используете one, ваша проблема должна быть решена.

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