2016-09-07 2 views
-1

Ich habe 2 Eingabefelder mit dem gleichen Namen - das ist, weil Geschäftslogik des Projekts.Zwei Eingabefelder mit dem gleichen Namen - bei Änderung Ereignis

Sie sehen wie folgt aus:

<input type="file" name="director_front_passport[]" class="app-file" id="director_front_passport" /> 
 
<input type="file" name="director_front_passport[]" class="app-file" />

Ich brauche Bildnamen nach Eingabefeld auf Änderung anhängen event.But auf diese Weise, wie Unterschied zwischen diesen zwei Eingängen zu machen?

Ich dachte zu versuchen, sie durch id Attr zu unterscheiden, aber ich habe clone Taste, um weitere Felder hinzuzufügen, und ich glaube nicht, dass dies auf Änderung Ereignis arbeiten wird.

Aktualisiert: Mein Code für auf Änderungsereignis ist die folgende:

var inputs = document.querySelectorAll('.app-file'); 
 
Array.prototype.forEach.call(inputs, function(input) 
 
{ 
 
    input.addEventListener('change', function(e) 
 
    { 
 
    //my code for displaying image 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

ich meinen Code aktualisiert $(this) geänderten Eingang zu finden Verwendung und mein Code aussieht:

var inputs = document.querySelectorAll('.app-file'); 
 

 
     Array.prototype.forEach.call(inputs, function(input) 
 
     { 
 
      input.addEventListener('change', function(e) 
 
      { 
 
       var changed = $(this); 
 
       var label \t = changed.next(), 
 
        labelVal = label.innerHTML, 
 
        divName = label.next(); 
 
       fileName = e.target.value.split('\\').pop(); 
 
       divName.html(fileName); 
 
       
 
      }); 
 
      });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="file" name="director_front_passport[]" class="app-file" id="director_front_passport" /> 
 
<input type="file" name="director_front_passport[]" class="app-file" />

+0

warum brauchen Sie zwischen ihnen zu unterscheiden, wird Ändern entweder Eingabe anhängen einen Bildnamen? – depperm

+0

Da, wenn Benutzer Datei von der ersten Eingabe auswählt, muss ich den Bildnamen anhängen. Wenn der Benutzer das Bild von der zweiten Eingabe hochlädt, um das Bild von der zweiten zu entfernen. –

+0

Warum haben Sie 2 Eingänge, wenn der eine den anderen entfernt? Warum nicht eine Eingabe haben? – depperm

Antwort

4

Sie können das Schlüsselwort this im Ereignishandler verwenden, um das Element zu identifizieren, das das Ereignis ausgelöst hat. Versuchen Sie folgendes:

$('.app-file').change(function() { 
 
    $(this).after('<div>' + this.files[0].name + '</div>'); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="file" name="director_front_passport[]" class="app-file" id="director_front_passport" /> 
 
<input type="file" name="director_front_passport[]" class="app-file" />

Mit Ihrem zweiten Beispiel ist es ein wenig seltsam forEach in der Art und Weise rufen Sie sind. Sie können nur forEach auf dem nodeList von querySelectorAll zurückrufen, wie folgt aus:

document.querySelectorAll('.app-file').forEach(function(input) { 
    input.addEventListener('change', function(e) { 
     // my code for displaying image 
    }) 
} 
+0

Würdest du meine aktualisierte Frage sehen? Ist es falsch, es auf diese Weise zu benutzen? –

+0

Es ist ein bisschen seltsam, ja. Ich habe meine Antwort für Sie aktualisiert –

+0

Auf diese Weise mit foreach wie folgt, habe ich Fehler: TypeError: document.querySelectorAll (...). Foreach ist keine Funktion und document.querySelectorAll (...). Jeder ist keine Funktion –

Verwandte Themen