2012-01-19 13 views
11

Sto tentando di attivare un evento click sul tipo di input = "file" con un clic su un altro pulsante.Il clic del trigger di Jquery non funziona sui browser safari in mac, Ipad e Iphone

Demo: http://jsfiddle.net/Y85g6/

Sta funzionando bene in tutti i browser tranne il browser Safari in Mac, Ipad & Iphone.

Esiste qualche trucco per eseguire questa operazione?

+0

possibile duplicato di [In JavaScript posso fare un evento "click" a livello di programmazione per un elemento di input del file?] (Http://stackoverflow.com/questions/210643/in-javascript-can-i-make-a -click-event-fire-programmatically-for-a-file-input) – ceejayoz

+0

quindi come fare una funzionalità di navigazione dei file personalizzati. –

+0

O non farlo, o farlo con una soluzione basata su Flash come SWFUpload. – ceejayoz

risposta

6

Trovato un'alternativa.

Basta posizionare l'ingresso type="file" sul pulsante personalizzato posizionandolo in modo assoluto e utilizzare jQuery fadeTo('fast',0) per nasconderlo.

Ora, se si fa clic sul pulsante personalizzato, viene visualizzata la finestra del browser.

Il suo lavoro in tutti i browser desktop, ma non in iPhone & iPad in quanto non consentono di caricare qualsiasi tipo di file.

+2

che jQuery imposta semplicemente l'opacità su 0. Il CSS è probabilmente più appropriato dell'utilizzo di un'animazione jQuery –

1

I browser possono essere molto schizzinosi quando si tratta di interazioni JavaScript con input di file, per motivi di sicurezza. Safari ti impedisce di attivare qualsiasi evento click su di essi. Alcune versioni di Chrome e Firefox hanno anche questa restrizione. Questo è stato previously discussed here.

+0

Capito, non è possibile per i browser Safari di kit web, grazie per l'alternativa. –

+0

Si prega di condividere anche altre alternative se presenti. –

1

È meglio usare CSS anziché JS per nascondere l'elemento perché renderà il tuo elemento nascosto direttamente.

1

Il seguente approccio ha fatto il trucco per me:

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

provare a caricare lo script nel piè di pagina. Ho avuto un problema simile un paio di volte e questo ha fatto il trucco.

1

Non sono sicuro che qualcuno stia leggendo più questa domanda, ma recentemente ho avuto un problema simile con Safari, quindi ho pensato di condividerlo.

In primo luogo, come ceejayoz accennato, vedere la discussione qui: In JavaScript can I make a "click" event fire programmatically for a file input element?

La soluzione, quindi, se non si desidera utilizzare il posizionamento tasto, è quello di visualizzare il pulsante di input del file (rimuovere il "display: none; ") e invece lo nascondi usando" opacity: 0; ". Probabilmente vuoi anche posizionarlo in modo assoluto in modo che non interagisca con altri elementi. Ad ogni modo, in questo modo puoi comunque utilizzare JS per attivare l'inserimento di file in tutti i browser.

12

Invece di trigger("click") è possibile utilizzare il seguente codice che funziona con successo in tutti i browser:

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

Solo 'initEvent()' è ora deprecato. Il 'jQuery.trigger (" click ")' ha il vantaggio di usare l'ultima interfaccia disponibile come resa disponibile ... –

5

rendere l'elemento visibile, come il lavoro evento trigger pretende molto su elementi nascosti in Mac safari.

0

ho avuto la risposta più semplice per questo

opacity : 0.01 sul vostro elemento file di input

0

sufficiente rimuovere "display: none" e utilizzare "visibility: hidden" e lavora cross browser.

Problemi correlati