2011-01-18 28 views
6

Hasta ahora, mi implementación de uploadify se está ejecutando sin problemas, excepto por un problema persistente.Uploadify + jQuery UI

Tengo mi petición de navegación uploadify en una ventana modal de diálogo jquery-ui. Los archivos se cargan bien, pero para cada elemento de archivo elegido, aparecen dos elementos de cola idénticos (el mismo ID).

Solo uno de estos elementos de la cola se actualiza con la barra de progreso aunque ambos parecen obtener las actualizaciones porcentuales.

Cuando se completa la carga del archivo, solo se elimina uno de estos elementos de cola (el mismo actualizado con la barra de progreso).

alt text

he comprobado fuera de la ventana de diálogo modal jquery-ui y el doble comportamiento de elemento de cola desapareció.

Sin embargo, me encantaría mantener la solicitud y la fila uploadify dentro de una ventana de diálogo modal.

¿Alguna pista sobre por qué el uso de uploadify en una ventana modal de jquery-ui causa este comportamiento de elemento de cola doble?

ACTUALIZACIÓN:

$("#Filedata").uploadify({ 
'scriptAccess': 'allways', 
'uploader'  :'<?php echo base_url();?>js/jquery.uploadify-v2.1.4/uploadify.allglyphs.swf', 
'script': '<?php echo site_url();?>/upload/process_upload', 
'cancelImg': '<?php echo base_url();?>js/jquery.uploadify-v2.1.4/cancel.png', 
'folder'   : '/', 
'fileDataName'  :'Filedata', 
'buttonText' : 'Document...', 
'width': '273', 
'height': '51', 
'wmode': 'transparent', 
'auto'   : true, 
'multi'   : false, 
'fileExt' : '*.pdf;', 'fileDesc' :'Document', 
'sizeLimit' : 10485760, 
'simUploadLimit' : 1, 
'queueSizeLimit' :'1', 
'uploaderType' : 'flash', 
'scriptData' : {'userdata':'<?php echo $userdata;?>','upload_token':'<?php echo $token['value'];?>'}, 
    onProgress: function() { 
    //hide upload button 
    $("object#FiledataUploader").height(0); 
    }, 

//workaround for bug in jQuery UI dialog/upoadify (double progress bars) 
onOpen  : function(event,ID,fileObj) { 
    $('#FiledataQueue div.uploadifyQueueItem:first-child').hide(); 
    }, 

onError: function(a, b, c, d) { 
if (d.status == 404) 
alert('Could not find upload script. Use a path relative to: ' + '<?= getcwd() ?>'); 
else if (d.type === "HTTP") 
alert('error ' + d.type + ": " + d.info); 
else if (d.type === "File Size") 
alert(c.name + ' ' + d.type + ' Limit: ' + Math.round(d.sizeLimit/1024) + 'KB'); 
else 
alert('error ' + d.type + ": " + d.info); 
}, 
onComplete : function (event, queueID, fileObj, response, data) { 
    var r = JSON.parse(response); 
    $('#token').val(r['token']);          
    $('#uploaded_filename').val(r['uploaded_filename']); 
    $('#filename_encryption').val(r['encryption']); 
    $('#FiledataQueue').html('Document <span class="bold" style="font-weight:bold;">'+ r['filename'] + '</span>'); 
}, 

onQueueFull: function(event, queueSizeLimit) { 
// supress dialog that mentions the queue is full 
return false; 
} 
}); 

HTML:

<form id="form-document" method="" action=""> 
    <input type="file" name="Filedata" id="Filedata" size="20" /> 
    <input type="hidden" name="response" id="response" value=""/> 
    <input type="hidden" name="upload_token" id="upload_token" value=""/> 
    <input type="hidden" name="uploaded_filename" id="uploaded_filename" value=""/> 
    <input type="hidden" name="filename_encryption" id="filename_encription" value=""/> 
    <input type="hidden" name="uploaded_extension" id="uploaded_extension" value=""/> 
    <input type="hidden" name="token" id="token" value="<?php echo $token['value'];?>"/> 
    </form> 

ACTUALIZACIÓN 2: de diálogo

jQuery UI:

dialog_data.dialog({ 
    autoOpen: false, 
    height: 700, 
    width: 800, 
    modal: true, 
    bigframe: true, 
    buttons: { 
    'Save': function() { 
    $.ajax({ 
    type: "GET", 
    url: "<?php echo site_url();?>/upload/finish", 
    dataType: 'html', 
    data: $('#form-document').serialize(), 
    success: function(){ 
     oCache.iCacheLower = -1; 
     oTable.fnDraw(); 
     dialog_data.dialog('close'); 
    } 
    }); 
    }, 
    'Close': function() { 
    $(this).dialog('close'); 
    $('.loading').hide(); 
    } 
    }, 
    open: function(){ 
    $('.loading').hide(); 
    $("object#FiledataUploader").height(30); 
    }, 
    close: function() { 
    $('#uploaded_filename').val(''); 
    $('#filename_encription').val(''); 
    $('#FiledataQueue').html(''); 
    } 
}); 
+0

Lo resuelto con solución alternativa, pero no estoy contento con la solución. Me gustaría saber más información sobre este (probablemente) error. – mojeime

+0

su código por favor? – ifaour

+2

Debe compartir su solución en caso de que alguien más se encuentre con el problema. – Jimmy

Respuesta

1

Puede intentar verificar qué sucede si proporciona otra identificación y nombre a su campo de archivo. Filedata es la variable utilizada en el script de carga, sea cual sea el ID/nombre que le dé a su campo, y me pregunto si no podría haber un conflicto.

Así que yo diría que intente cambiar el ID, agregue el parámetro id a su configuración de carga (con el nuevo ID como valor) y avísenos si eso soluciona el problema.

+0

No funciona – mojeime

+0

He revisado su código y no veo de dónde viene. Una cosa me molesta: ¿por qué no hay una extensión para su archivo de script? Recibí el mismo problema (2 colas para 1 archivo) mientras lo implementaba, pero ... ¡No recuerdo cómo lo arreglé! Debería intentarlo con una forma cruda, sin el cuadro de diálogo UI. ¿No obtiene ningún error de javascript? – Nabab

+0

¿Por qué no hay una extensión para su archivo de script? Porque uso framework y está reescribiendo mi url a este formato. Esta es la URL correcta. Y confirmo que probé todo de nuevo y cuando uploadify no está en el diálogo jQuery todo está funcionando bien y cuando está en el diálogo de jQuery UI hay una barra de progreso doble. – mojeime

0

¿Es esta la solución al error?

//workaround for bug in jQuery UI dialog/upoadify (double progress bars) 
onOpen  : function(event,ID,fileObj) { 
    $('#FiledataQueue div.uploadifyQueueItem:first-child').hide(); 
    }, 
0

Este error en función de la ausencia getAttributeNode y getAttribute en el elemento de Flash.

Cambio en "jquery-min.js"

elem.getAttributeNode(name) // OR a.getAttributeNode(b) 

a

(elem.getAttributeNode?elem.getAttributeNode(name):null) // OR (a.getAttributeNode?a.getAttributeNode(b):null) 

y

elem.getAttribute(name) // OR a.getAttribute(b) 

a

(elem.getAttribute?elem.getAttribute(name):null) // OR (a.getAttribute?a.getAttribute(b):null)