2011-03-03 97 views
13

我使用plupload在客戶端上傳之前縮放圖片。我喜歡這個功能,如果用戶沒有安裝flash,silverlight等引擎,它會優雅地回退到html4。使用plupload手動觸發「打開文件對話框」

我希望能夠開始上傳,當用戶點擊頁面上的某些元素,我想處理事件(有時停止打開文件對話框)。事實上,我想彈出使用JavaScript打開文件對話框。除非用戶點擊瀏覽按鈕(或覆蓋了瀏覽按鈕的覆蓋層),否則HTML4(或者說瀏覽器,除了Chrome:P)不會讓我這樣做,所以當我得到回到HTML4我會接受,我不能這樣做,但大多數用戶將安裝Flash或Silverlight,他們沒有這個限制。所以我的問題是這樣的:

我如何觸發plupload中的文件打開對話框(記住我只需要flash和silverlight引擎來做到這一點)。

回答

4

如果有人搜索的HTML5解決方案,那就是:

var up= $('#uploader').pluploadQueue(); 
if (up.features.triggerDialog) { 
    plupload.addEvent(document.getElementById('idOtherButton'), 'click', function(e) { 
     var input = document.getElementById(up.id + '_html5'); 
     if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] 
      input.click(); 
     } 
     e.preventDefault(); 
    }); 
} 
+2

是的,HTML5是現代瀏覽器的最佳選擇(Flash,Silverlight和HTML4只是後備運行時)。由於我沒有使用''pluploadQueue()'',所以我使用'plupload.Uploader''實例來獲取輸入的ID並觸發點擊甚至獲得Select Files對話框(下面的答案)。 – Ilija 2013-10-14 14:36:56

1
+0

目前您的解決方案有關的JavaScript/HTML4和實際上都不爲我所需要的情況下工作。我知道我的問題是非常具體的,但我只需要pluploads silverlight和flash引擎中的此功能,而不是html4 – 2011-03-15 22:47:46

2

確定。這似乎並不可能做到這一點,所以,除非有人實現對Silverlight和Flash組件我很倒黴的事件句柄

+2

實際上,Flash和Silverlight不會讓您以編程方式觸發文件對話框。它只能作爲對鼠標點擊等事件的反應發生(http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#browse())。 – jayarjo 2013-04-05 11:56:23

+1

@jayarjo - 文檔狀態方法拋出「錯誤 - 如果未響應用戶操作調用方法,例如鼠標事件或按鍵事件。」它沒有說明該鼠標事件或按鍵是否必須在閃光燈控制內。有誰知道是否可以通過按下外部按鈕觸發上傳? – Mark 2013-12-11 03:26:37

5

隨着時間的推移,回退運行時間將變得無關緊要。這意味着遲早我們將全部使用HTML5運行時。在您使用HTML5運行,但不使用pluploadQueue()情況下,這也能發揮作用:

// Set up and initialise uploader 
var uploader = new plupload.Uploader({ 
    'runtimes' : 'html5', 
    'browse_button' : 'id_of_the_first_button' 

    // Other options 
}); 

uploader.init(); 

// Hook in the second button 
plupload.addEvent(document.getElementById('id_of_the_second_button'), 'click', function(e) { 
    var input = document.getElementById(uploader.id + '_html5'); 
    if (input && !input.disabled) { 
    input.click(); 
    } // if 
    e.preventDefault(); 
}); 
+0

找到了一些對此和pluploadQueue的參考... http://www.plupload。com/punbb/viewtopic.php?pid = 6879#p6879 – CrandellWS 2014-08-05 13:28:22

+0

非常好。正是我所需要的 – robert 2014-08-14 03:08:54

14

前者的解決方案不是plupload 2.1.2曾在iPhone上。

下面的代碼的伎倆(jQuery的需要):

$("#id_of_the_second_button").click(function() { 
    $('div.moxie-shim input[type=file]').trigger('click'); 
}); 
+0

謝謝你,這是我唯一的工作。 – Flezcano 2015-04-10 04:51:11

+0

也爲我工作plupload()_not pluploadQueue()_ 這裏是我的問題和鏈接到@estornes回答:) – Meloman 2016-04-29 15:43:05

+0

優秀,這應該是公認的答案! – 2017-06-10 02:21:21