2016-07-12 5 views
0

Ich habe ein Formular auf meiner Website, die Besucher Medien mit dem Filestack/filepicker.io API (filestack.com) hochladen können. Nachdem der Upload erfolgreich abgeschlossen wurde, gibt Filestack ein JSON-Objekt zurück, das Details zum Upload bereitstellt.JavaScript Ereignisbehandlung und Firefox

Es funktioniert in Chrome, Safari, iOS, funktioniert jedoch nicht in Firefox. In Firefox erzeugt es diesen Fehler: ReferenceError: Ereignis ist nicht definiert

Mein Verständnis ist, dass Firefox Ereignisse anders als Browser mit Webkit behandelt (siehe diesen Artikel: ReferenceError: event is not defined error in Firefox), aber meine Javascript-Fähigkeiten sind nicht genug entwickelt, um mir bei der Fehlersuche zu helfen das ohne Hilfe.

Ich benutze ein onchange-Ereignis, das die Funktion löst setVideoUrl(); Kann mir jemand helfen, zu verstehen, wie ich diesen Code aktualisieren kann, damit er Event-Handler korrekt deklariert und in Firefox funktioniert?

<input type="filepicker" data-fp-apikey="xxx" data-fp-mimetypes="video/*" data-fp-container="modal" data-fp-services="COMPUTER" data-fp-store-location="azure" data-fp-store-container="app1" data-fp-button-text="&nbsp;" data-fp-button-class="select-your-video-button" onclick="uploadVideo()" onchange="return setvideourl();"> 

function setVideoUrl(){ 
    var myvideourl = event.fpfile.url; 
    var myvideofilename = event.fpfile.filename; 

    jQuery("#input_1_14").val(myvideourl); 
    jQuery("#input_1_11").val(myvideofilename); 

    jQuery("#input_1_11").attr("readonly", true); 
    jQuery("#input_1_11").show(); 
    jQuery("#videochoice").hide(); 
    jQuery("p.required-field").hide(); 
    jQuery("#choosedifferentvideo").show(); 
} 

Update: ich nun den Code verwenden jedoch unten, wenn die Medien auf Dateistapel hochgeladen und es gibt die JSON die Funktion nie in jedem Browser auslöst.

<input type="filepicker" data-fp-apikey="xxx" data-fp-mimetypes="video/*" data-fp-container="modal" data-fp-services="COMPUTER" data-fp-store-location="azure" data-fp-store-container="app1" data-fp-button-text="&nbsp;" data-fp-button-class="select-your-video-button" onclick="uploadVideo()"> 


jQuery('input[type="filepicker"]').on("change", function(event){ 
    alert('function triggered'); 

    var myvideourl = event.fpfile.url; 
    var myvideofilename = event.fpfile.filename; 

    jQuery("#input_1_14").val(myvideourl); 
    jQuery("#input_1_11").val(myvideofilename); 

    jQuery("#input_1_11").attr("readonly", true); 
    jQuery("#input_1_11").show(); 
    jQuery("#videochoice").hide(); 
    jQuery("p.required-field").hide(); 
    jQuery("#choosedifferentvideo").show(); 

}); 
+3

die implizite globale 'event' Objekt veraltet ist. Ich würde sagen, 'addEventListener' verwenden, aber Sie verwenden jQuery, so gibt es absolut keine Entschuldigung für die Verwendung von' on * 'Ereignisattribute. – zzzzBov

+1

Wie ich festgestellt habe, ist mein Javascript ein bisschen eingerostet, also nur, damit ich verstehe, was Sie sagen, sollte ich onclick und onchange vom '' Tag entfernen? Würde ich den Onclick und Onchange mit so etwas auslösen? '$ (" input [type = filepicker] ") .click (function() {}' und '$ (" input [type = filepicker] ") .change (function() {}' – brianfidler

+0

Benutze entweder jQuerys eingebautes Event handling functions, oder verwenden Sie stattdessen addEventListener() für Ihr Eingabeelement und binden Sie an eine Funktion, die ein event-Objekt als Argument verwendet. Dann können Sie dieses Ereignisobjekt in der Funktion verwenden. – ManoDestra

Antwort

0

Verwenden Sie die jQuery on Methode anstelle von Ereignis in-HTML mit Attributen:

<input type="filepicker" data-fp-apikey="xxx" data-fp-mimetypes="video/*" data-fp-container="modal" data-fp-services="COMPUTER" data-fp-store-location="azure" data-fp-store-container="app1" data-fp-button-text="&nbsp;" data-fp-button-class="select-your-video-button" onclick="uploadVideo()" /> 

jQuery('input[type="filepicker"').on("change", function(event){ 
    var myvideourl = event.fpfile.url; 
    var myvideofilename = event.fpfile.filename; 

    jQuery("#input_1_14").val(myvideourl); 
    jQuery("#input_1_11").val(myvideofilename); 

    jQuery("#input_1_11").attr("readonly", true); 
    jQuery("#input_1_11").show(); 
    jQuery("#videochoice").hide(); 
    jQuery("p.required-field").hide(); 
    jQuery("#choosedifferentvideo").show(); 

}); 
+0

Dank Jacques gab es ein paar Syntax-Probleme Mit diesem Code ist es aber ähnlich wie was Ich habe getestet. Wenn das Hochladen der Medien abgeschlossen ist, wird die Änderung jedoch nie ausgelöst, sodass diese Funktion nicht ausgeführt wird. Ich habe es mit der obigen Syntax und auch mit '.change (function (event))' versucht. – brianfidler

+0

@brianfidler Froh, zu helfen! Wenn diese Antwort für Sie funktioniert, akzeptieren Sie sie bitte als die richtige Antwort. –