2014-05-06 82 views
3

我已經看到了幾個類似的帖子,其解決方案似乎適用於這些人,但我無法讓這個工作。我在項目中使用http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/。它完美地工作在所有瀏覽器中,除了Safari瀏覽器,「BROWSE」按鈕不會打開文件對話框。存在下面的代碼中的script.js(其中包括該插件工作):jQuery .click()在Safari中不起作用

$('#drop a').click(function(){ 
    // Simulate a click on the file input button 
    // to show the file browser dialog 
    $(this).parent().find('input').click(); 
}); 

的。點擊()在Safari不火。我曾嘗試解決方案按jQuery .click() works on every browser but Safari和實施

$('#drop a').click(function(){ 
    var a = $(this).parent().find('input'); 
    var evObj = document.createEvent('MouseEvents'); 
    evObj.initMouseEvent('click', true, true, window); 
    a.dispatchEvent(evObj); 
}); 

但後來我得到的錯誤dispatchEvent is not a function。然後,我對此進行了一些研究,並嘗試了jQuery.noConflict()路由,但這並未解決該錯誤。另外,我在我的主文件中使用了很多jQuery,並且我無法爲整個頁面激活noConflict()模式。也沒有理由說,jQuery應該與任何東西衝突,因爲我只使用jQuery和普通的JavaScript,而我沒有使用任何類似原型或角色。有人知道另一種方式來模擬Safari中的點擊嗎?

UPDATE:僅供參考,我在提到功能添加了一個alert('test')(當「瀏覽」點擊觸發),並且我得到Safari中的警報,但它不是模擬文件的點擊輸入元素,即:它不打開文件對話框。

+1

試試這個$(this).parent()。find('input')。trigger(「click」); –

+1

嘗試'var a = $(this).parent()。find('input')[0];' – jalynn2

+1

@sudharsan:在一個jQuery對象上,'.trigger(「click」)''和'.click() '是一回事。 –

回答

4

在我原來的問題代碼的第二部分竟然工作,除了2件事情。

1)的方法,不喜歡的jQuery,所以不是

var a = $(this).parent().find('input')[0];

我分配一個ID到我的文件輸入和代替稱爲

var a = document.getElementById('upload_select');

2)的Safari公然忽略如果輸入是隱藏的(display:none;),這是,所以我做了輸入font-size = 1px;和不透明度= 0.

實現這兩個更改得到了代碼工作。 (「click」);

2

您需要仔細閱讀that answer。 :-)

dispatchEvent是DOM元素上的函數,而不是jQuery對象。你試圖在jQuery對象上調用它。所以:

$('#drop a').click(function(){ 
    var a = $(this).parent().find('input')[0]; 
    // Change here -----------------------^^^ 
    var evObj = document.createEvent('MouseEvents'); 
    evObj.initMouseEvent('click', true, true, window); 
    a.dispatchEvent(evObj); 
}); 

jQuery對象上使用[0]給你的第一個DOM對象jQuery對象中,或者undefined如果jQuery對象是空的。

+0

好吧,我認爲這是因爲jQuery正在檢索一個數組,並且他們想要引用檢索到的第一個元素。我現在不再在Firefox中使用'dispatchEvent不是函數'錯誤了(但它工作正常),但它在Safari中仍然不起作用。它什麼都不做。我通常不使用Safari,所以我無法確定從Safari的調試中去哪裏... – Magnanimity

+0

@Magnanimity:目前的Safari可能無法實現。來自tvanfossen的[這個答案](http://stackoverflow.com/a/210709/157247)表明你的原始東西在Safari上適合他,他通常知道他在做什麼。如果沒有這樣做,這裏有一個[有趣的解決方法](http://stackoverflow.com/a/3030174/157247)。這是一種解決方法,而不是「解決方案」,但是相當不錯。 –