Wenn Sie einfach diesen Inline-Event-Handler direkt an der Vorlage Element hinzugefügt wird, dann überraschend ist es nicht, dass es nie ausgelöst wird. Fine Uploader-Vorlagen sind recht primitiv, da die Vorlage als HTML-Zeichenfolge interpretiert und anschließend zum Erstellen von DOM-Elementen innerhalb Ihres Containerelements verwendet wird (das Element, das als your element
option referenziert wird).
Sie sollten nie Inline-Event-Handler verwenden. Dieser Ansatz hat einige Nachteile. Ich spreche darüber in meinem Buch - Beyond jQuery. Und die Methode, Event-Handler anzuhängen, ist in Ihrem Fall überhaupt nicht notwendig, soweit ich das beurteilen kann. Fügen Sie nach dem Erstellen einer neuen Instanz von Fine Uploader einfach einen Ereignishandler Ihrer Wahl dem Eingabeelement mithilfe von addEventListener
hinzu. Zum Beispiel, wenn Ihr <input>
Element eine CSS-Klasse Namen ‚qq-edit-caption‘ gegeben, können Sie ein „change“ Event-Handler wie folgt anhängen:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.querySelector('.qq-edit-caption')
.addEventListener('change', function(event) {
// event handler logic here...
})
... und wenn Sie erstellen diesen Eingang Element für jede Datei und müssen einen "change" - Handler an alle dieser Eingabeelemente anhängen, sollten Sie einen einzelnen delegierten Ereignishandler an das Containerelement anhängen und basierend auf dem Element reagieren, das das Ereignis ausgelöst hat (siehe target
Eigentum der Veranstaltung). Sie können die ID der Datei ermitteln, indem Sie sich die CSS-Klasse des übergeordneten Elements <li>
der event.target
ansehen, oder Sie können nach einem Attribut 'qq-file-id' für das übergeordnete Element <li>
des Zielelements suchen (der Wert ist der Datei-ID). Dieser Code könnte wie folgt aussehen:
var uploadContainer = document.querySelector('#my-uploader')
var uploader = new qq.FineUploader({
element: uploadContainer
...
})
uploadContainer.addEventListener('change', function(event) {
if (event.target.className.indexOf('qq-edit-caption') >= 0) {
var fileId = parseInt(event.target.getAttribute('qq-file-id'))
// ...
}
})
Danke Ray. Das macht viel Sinn, warum mein Code nicht ausgelöst wurde; Lass mich deinen Vorschlag ausprobieren und sehen, wo ich das hinnehmen kann. Wird bald aktualisiert werden ..... – bizready
Ray's Rat arbeitete für mich, aber ich konnte nicht qq-Datei-ID-Attribut von meinem Eingabeelement erhalten. Ich musste aus dem aktuellen Element navigieren, um das Update-Button-Element zu finden und dann den Button zu deaktivieren. Beispiel: updateButton = event.target.parentElement.parentElement.querySelector ('. file-section-button'); – bizready
@bizready Sie können die Datei-ID für ein beliebiges Dateielement oder ein untergeordnetes Element eines Dateielements mithilfe der Fine Uploader-UI-Methode "getId" abrufen (http://docs.fineuloader.com/branch/master/api/methods). html # getId). –