2012-01-19 37 views
11

我想觸發一個點擊事件上的輸入類型=「文件」點擊另一個按鈕。jquery觸發器點擊不工作在Safari瀏覽器在Mac,Ipad

演示:http://jsfiddle.net/Y85g6/

它的正常工作在所有瀏覽器,除了在MAC,IPAD & iPhone Safari瀏覽器上。

是否有任何技巧可以完成這項任務?

+0

可能的重複[在JavaScript中,我可以做一個「點擊」事件消防編程的文件輸入元素?](http://stackoverflow.com/questions/210643/in-javascript-can-i-make-a -click-event-fire-programmatically-for-a-file-input) – ceejayoz

+0

然後如何製作一個定製的文件瀏覽功能。 –

+0

或者不要,或者使用像SWFUpload這樣的基於Flash的解決方案。 – ceejayoz

回答

6

找到了一個替代方案。

只需將輸入type="file"定位在自定義按鈕上並通過絕對定位並使用jQuery fadeTo('fast',0)來隱藏它。

現在,如果我們點擊自定義按鈕文件瀏覽器窗口出現。

它在所有桌面瀏覽器中都可以使用,但不能在iPhone & iPad之間,因爲它們不允許上傳任何文件。

+2

jQuery只是將不透明度設置爲0. CSS可能比使用jQuery動畫更合適 –

1

出於安全原因,當涉及到與文件輸入的JavaScript交互時,瀏覽器可能非常挑剔。 Safari可以防止你觸發任何點擊事件。 Chrome和Firefox的某些版本也有此限制。這已經是previously discussed here

+0

明白了,它是不可能的網絡遊獵瀏覽器,謝謝替代。 –

+0

如果有的話,請分享其他選擇。 –

1

它更好地使用CSS而不是JS來隱藏元素,因爲它會將您的元素直接隱藏。

1

下面的方法奏效了我:

$(".upload_on_click").each(function(index) { 
    var form = $(this).next("form"); 
    //form.hide(); /* THIS TECHNIQUE DIDN'T WORK IN SAFARI */ 
    form.css("position", "absolute"); 
    form.css("visibility", "hidden"); 
    $(this).css("cursor", "pointer"); 
    $(this).click(function() { 
     $('input[type="file"]', form).trigger("click"); 
    }); 
    $('input[type="file"]', form).change(function() { 
     $('input[type="submit"]', form).trigger("click"); 
    }); 
}); 
-1

嘗試加載你的腳本在頁腳。我曾經有過類似的問題,並且做了這個訣竅。

1

不知道是否有人再讀這個問題,但我最近有一個類似的問題與Safari瀏覽器,所以我想我會分享。

首先,作爲ceejayoz提到,看到這裏的討論:In JavaScript can I make a "click" event fire programmatically for a file input element?

的解決方案,那麼,如果你不希望使用按鈕定位,是顯示文件輸入按鈕(刪除「顯示:無; 「),而是使用」opacity:0;「隱藏它。你可能也想絕對定位它,所以它不會與其他元素交互。無論如何,這樣你仍然可以使用JS來激活所有瀏覽器中的文件輸入。

12

相反的trigger("click")您可以使用下面的代碼在所有瀏覽器成功的作品:

var evt = document.createEvent("HTMLEvents"); 
evt.initEvent("click", true, true); 
document.getElementById(elem_id).dispatchEvent(evt); 
+0

現在只有'initEvent()'被棄用。 jQuery.trigger(「click」)具有使用可用的最新可用接口的優點... –

5

使元素可見,作爲觸發事件不工作在MAC野生動物園隱藏要素。

0

我得到這個

opacity : 0.01最簡單的答案輸入文件元素

0

只需刪除「顯示:無」和使用「visibility:hidden的」和工程跨瀏覽器。

相關問題