Chrom-file-upload-bug: auf change-Ereignis nicht ausgeführt werden zweimal mit der gleichen Datei
Arbeite ich auf diese html5-Datei-uploader-plugin, aber es hat einen Fehler auf Google Chrome, die ich nicht verstehen kann, und es zu beheben. Es funktioniert auf Firefox.
Das problem ist, dass Sie nicht hochladen der gleichen Datei zweimal von Ihrem desktop aus.
Wenn Sie zuerst klicken Sie auf wählen Sie, und drücken Sie OK zum hochladen einer Datei von Ihrem desktop, es sollte Warnung eine Nachricht, zum Beispiel".Taste-1' - hängt davon ab, welche upload-button, den Sie anklicken.
Dann, wenn Sie versuchen, uploaden die gleiche Datei wieder, diese code-Zeile wird nicht mehr ausgeführt,
$(".upload-file",object_parent).change(function() {
...
...
alert($cm.selector);
});
Irgendeine Idee, was schief läuft in diesem plugin?
(function($){
//Attach this new method to jQuery
$.fn.extend({
//This is where you write your plugin's name
upload_file_html5: function(options) {
//Set the default values, use comma to separate the settings, example:
var defaults = {
objectSuperparent: '.media'
}
var options = $.extend(defaults, options);
var o = options;
var $cm = this.click(function(e){
//<a> button is the object in this case.
var object = $(this);
//Get other info from the element belong to this object group.
var object_href = object.attr('href');
var object_parent = object.parent();
alert($cm.selector);
//Trigger the click event on the element.
//Due to security policies triggering click on the input type=file is not allowed/supported in some browsers and Opera is one of them.
//$('input[type=file]').trigger('click'); //or:
$(".upload-file",object_parent).click();
return false;
});
//Trigger ajax post when ever the file is changed by the user.
var $cm_2 = $(".upload-file").change(function(){
//<input> is the object in this case.
var object = $(this);
var object_form = object.parent();
var object_superparent = object.parents(o.objectSuperparent);
var path_config = $($cm.selector,object_superparent).attr('href');
var path_post = object_form.attr('action');
alert($cm.selector);
//alert(path_config);
....
....
});
}
});
})(jQuery);
War es OK arbeitet auf Chrome aber gerade erst kürzlich gescheitert ist, wahrscheinlich Chrome aktualisiert und die neueste version auf meinem Rechner und das update verursacht den Fehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Mein Chrome hat unterschiedliche Verhalten von Firefox, aber ich denke Chrome ist korrekt.
Laut W3C-Dokument:
wenn Sie versuchen, uploaden einer Datei der Wert von Datei-Eingabe nicht ändern. Versuchen Sie, drucken Sie es aus:
Wenn Sie möchten, laden Sie zweimal die clear file input-Wert
jsfiddle test
könnte es sein, dass die Eingabe wird erneut gerendert wird. Aus welchem Grund dies auch sein mag, für mich ist es irrelevant.
Die $.auf('change', callback) Funktionen verloren.
Versuchen mit .delegieren Funktion, die ich absolut Liebe!
http://api.jquery.com/delegate/
Ok so delegieren, ist genau das gleiche, es zeigt nur, dass jquery wenn es ein element auf dem Bildschirm gerendert mit einem bestimmten Griff, befestigen Sie eine Funktionalität, um es.
Also auch, wenn Sie das element ist neu gerendert, es wird noch immer zu funktionieren.
Kann man das für ein throw-away-Funktion & sagen, was ist der Unterschied, aber dieser hat mich gerettet, eine Menge Zeit auf Projekte.