2016-05-03 4 views
1

Ich füge Zeile Nummer am Ende des Namens dynamisch mit Code unten für die Anforderung Parameter eindeutig sein.Update-Eingabe Name Attribut ohne eq()

$("#myTable").find("tr").each(function() { 
    var text = $(this).find("td input:text"); 
    var select = $(this).find("select"); 
    var cb = $(this).find("td input:checkbox"); 
    select.eq(0).prop("name", select.eq(0).prop("name") + counter); 
    text.eq(0).prop("name", text.eq(0).prop("name") + counter); 
    text.eq(1).prop("name", text.eq(1).prop("name") + counter); 
    cb.eq(0).prop("name", cb.eq(0).prop("name") + counter); 
}); 

Gibt es eine Möglichkeit, meinen obigen Code eher zu verringern als die Angabe eq() oder index obwohl ich auf verschiedene Arten von Eingabe gesetzt (Text, Kontrollkästchen), und wählen. Kann mir jemand einen einfacheren und kürzeren Ansatz vorstellen? Jede Hilfe wird so sehr geschätzt.

+0

HALLO @ Rayon, ich habe auch nicht nur für das erste Eingabefeld festgelegt. – bumbumpaw

+0

Die angegebene Antwort scheint perfekt für diesen Anwendungsfall zu sein ... – Rayon

Antwort

3

Der Selektor :input ruft alle Eingaben ab, sodass Sie keine separaten Klauseln für die Felder select und die Kontrollkästchen benötigen. Von dort können Sie die Notwendigkeit für die each()-Schleife negieren, indem Sie der Methode prop() eine Funktion bereitstellen, die den aktuellen Wert als Parameter akzeptiert, an den Sie anhängen können. Versuchen Sie folgendes:

$('#myTable :input').prop('name', function(i, v) { 
    return v + counter; 
}); 

Wenn Sie die counter Variable erhöhen, müssen dann würden Sie noch die each() Schleife benötigen, obwohl Sie es mit Hilfe des Index des aktuellen tr wie dies automatisieren könnte:

$('#myTable tr').each(function(tr_i) { 
    $(this).find(':input').prop('name', function(inp_i, v) { 
     return v + tr_i; 
    }); 
}); 
+0

Hallo @Rory, Danke für deinen Code. Mein Problem für den Code, den Sie vorschlagen, ist es, Zähler immer wieder anzuhängen, zum Beispiel, inputText01 wird zu inputText011, wenn ich irgendwie das Formular wegen erforderlicher Felder, die nicht ausgefüllt sind, erneut einreichen muss. Beachten Sie, dass ich einen Namensparameter mit der Nummer (wie inputText0) haben kann. – bumbumpaw

+0

Ich benutzte 'v.replace (/ \ d/g, '')' und so lange wie möglich werde ich versuchen, den Namen des Anfrageparameters nicht mit Nummern zu verwenden. :)) – bumbumpaw

+0

Das ist ein guter Plan. Besser, wenn möglich, den gleichen Namen zu verwenden und Werte als ein Array zu übergeben. Vergiss nicht, die Antwort zu verbessern/zu akzeptieren, wenn es geholfen hat :) –

0

Haben Sie versucht, den :first Selektor zu verwenden? Hier ist die Dokumentation von jQuery Website: https://api.jquery.com/first-selector.

+0

Hi, aber ich habe auch nicht nur für das erste Eingabefeld eingestellt. – bumbumpaw