2016-07-25 13 views
0

Ich habe mehrere ähnliche Felder in meiner Form:Wie dynamisch auf Änderungen in Feld hören

<select class="form-control" name="Ops[1][WorkCentre]">..</select> 
<select class="form-control" name="Ops[2][WorkCentre]">..</select> 
... 
<select class="form-control" name="Ops[n][WorkCentre]">..</select> 

Ich weiß nicht, wie viele solcher Felder wird es, wenn der Benutzer dynamisch die Felder hinzufügt.

Ich brauche eine Art der Ausführung einer Java-Skript-Funktion, wenn einer dieser Eingänge ändert, und innerhalb dieser Funktion muss ich auf den Schlüssel der Eingabe zugreifen können, die in Bezug auf die 'Ops' Array geändert hat.

Ich bin glücklich, jquery zu verwenden. Ich dachte etwas wie

$('select[name=Ops[i][WorkCentre]').change(function(i){ 
    // A function using i 
}); 

Oder vielleicht ein Java-Skript-Ereignis Listener?

Jede Hilfe wird geschätzt.

Antwort

1

Sie können Ereignis Delegation verwenden:

// Listen for 'change' event on every element that has class 'form-control' 
$(document).on('change', 'select.form-control', function() { 
    var name = $(this).attr('name'); 
    // You code here ... 
}); 

UPDATE

Um die Anzahl von Namensattribut zu extrahieren, können Sie den Namen wie folgt festgelegt:

name="Ops_[1]_[WorkCentre]" 

und dann durch "_" teilen:

var number = $(this).attr('name').split('_')[1]; 

UPADATE # 2

Eine bessere Lösung wie diese wäre die Zahl in einem separaten Attribut zu setzen:

<select class="form-control" name="Ops[1][WorkCentre]" data-number="1">..</select> 

und es dann wie folgt ab:

var number = $(this).attr('data-number'); 
+0

Bessere zu benutzen ''select.form-control'' – Tushar

+0

Danke, weißt du, wie ich dann die' Nummer 'aus' var name 'extrahieren kann? –

+0

ja, die erste würde nicht funktionieren, weil ich ein Array einreichen muss, weiß nicht, warum ich nicht an die zweite dachte. Vielen Dank –

Verwandte Themen