2011-01-18 49 views
6

Cho đến nay, việc triển khai tải lên của tôi đang chạy khá trơn tru ngoại trừ một vấn đề dai dẳng.Tải lên + Giao diện người dùng jQuery

Tôi có lời nhắc duyệt qua tải lên trong cửa sổ hộp thoại jquery-ui. Các tệp được tải lên tốt nhưng đối với mỗi mục tệp được chọn, hai mục hàng giống hệt nhau (cùng một id) xuất hiện.

Chỉ một trong các mục hàng đợi này thực sự được cập nhật với thanh tiến trình mặc dù cả hai dường như đều nhận được cập nhật phần trăm.

Khi tệp tải lên hoàn tất, chỉ một trong các mục hàng đợi này (cùng một mục được cập nhật với thanh tiến trình) bị xóa.

alt text

Tôi đã thử nghiệm nó bên ngoài cửa sổ modal thoại jquery-ui và hàng đợi đôi hành vi mục biến mất.

Tôi muốn giữ lời nhắc tải lên và xếp hàng trong cửa sổ hộp thoại phương thức nếu có thể.

Bất kỳ manh mối nào về lý do tại sao việc sử dụng uploadify trong cửa sổ phương thức jquery-ui làm cho hành vi mục hàng gấp đôi này?

UPDATE:

$("#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> 

UPDATE 2:

jQuery UI thoại:

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

Tôi giải quyết nó với giải pháp workaround nhưng tôi không hài lòng với cách giải quyết. Tôi muốn biết thêm thông tin về lỗi này (có thể). – mojeime

+0

mã của bạn, vui lòng? – ifaour

+2

Bạn nên chia sẻ cách giải quyết của mình trong trường hợp bất kỳ ai khác gặp sự cố. – Jimmy

Trả lời

1

Bạn có thể thử kiểm tra xem điều gì xảy ra nếu bạn cung cấp id và tên khác cho trường tệp của mình. Filedata là biến được sử dụng trong tập lệnh tải lên bất kể ID/tên bạn cung cấp cho trường của bạn và tôi tự hỏi liệu có thể không có xung đột hay không. Vì vậy, tôi muốn nói hãy thử thay đổi ID và thêm thông số id vào cài đặt uploadify của bạn (với ID mới làm giá trị) và cho chúng tôi biết liệu điều đó có khắc phục được sự cố hay không.

+0

Nó không hoạt động – mojeime

+0

Tôi đã thông qua mã của bạn và tôi không thấy nó đến từ đâu. Có một điều làm tôi bận tâm: tại sao không có phần mở rộng cho tệp kịch bản của bạn? Tôi đã nhận được một vấn đề tương tự (2 hàng đợi cho 1 tập tin) trong khi thực hiện nó nhưng ... Tôi không thể nhớ làm thế nào tôi cố định nó! Bạn có thể thử nó với một hình thức thô, không có hộp thoại giao diện người dùng. Bạn không nhận được bất kỳ lỗi javascript nào? – Nabab

+0

tại sao không có phần mở rộng cho tệp tập lệnh của bạn? Trở thành tôi sử dụng khuôn khổ và nó được viết lại url của tôi để định dạng này. Đây là URL chính xác. Và tôi xác nhận rằng tôi đã thử nghiệm tất cả mọi thứ một lần nữa và khi uploadify không phải là trong hộp thoại jQuery tất cả mọi thứ đang làm việc OK và khi đang ở trong hộp thoại jQuery UI có một thanh tiến trình kép. – mojeime

0

Đây có phải là giải pháp cho lỗi không?

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

Lỗi này trong chức năng vắng mặt getAttributeNodegetAttribute trong phần tử Flash.

Thay đổi trong "jquery-min.js"

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

để

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

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

để

(elem.getAttribute?elem.getAttribute(name):null) // OR (a.getAttribute?a.getAttribute(b):null) 
Các vấn đề liên quan