2016-03-30 16 views
1

Ich habe versucht, drei Eingaben (Typ = Text) zu finden, die dynamisch mit jQuery hinzugefügt wurden. Ich habe versucht, , .parents(), .find() und .children() zu verwenden, aber ich scheiterte.Suchen Eingabefeld mit jQuery

Ich versuchte auch mit document.getElementsByName, aber es gibt nicht den richtigen Wert zurück, wenn ich mehr als eine Gruppe von Eingaben (die dynamisch hinzugefügt werden können, wie ich bereits sagte).

Mein Code ist folgende:

function update(username, row) { 
    affiliation_val = $(document.getElementsByName('affiliation')).val(), 
    comments_val = $(document.getElementsByName('comments')).val(), 
    role_val = $(document.getElementsByName('role')).val(); 
//the search above does not work when I add multiple inputs… it returns only the first three inputs 
    console.log($(row).closest(“input”)); //one of my attempts... I also did using a combination of parents("tbody") and children("input"), for example... and many others 
} 


function format(d) { 
     var message1 = '<table cellpadding="8" cellspacing="0" border="0" style="padding-left:50px;">'+ 
     '<tr>'+ 
      '<td class="text-right"><b>User ID:</b></td>'+ 
      '<td class="text-left"> &nbsp; '+username+'</td>'+ 
     '</tr>'+ 
     '<tr>'+ 
      '<td class="text-right"><b>Password last set:</b></td>'+ 
      '<td class="text-left"> &nbsp; '+d.pwd_last_set+'</td>'+ 
     '</tr>'+ 
     '<tr>'+ 
      '<td class="text-right"><b>Uid number:</b></td>'+ 
      '<td class="text-left"> &nbsp; '+d.uid+'</td>'+ 
     '</tr>'+ 
     '<tr>'+ 
      '<td class="text-right"><b>Email:</b></td>'+ 
      '<td class="text-left"> &nbsp; '+d.email+'</td>'+ 
     '</tr>'+ 
     split_projects(d.projects_name, d.projects_role), 
     message2 = '<tr>'+ 
      '<td class="text-right"><b>Affiliation:</b></td>'+ 
      '<td class="text-left"><input type="text" name="affiliation" value="'+d.affiliation+'" '+readonly+' /></td>'+ 
     '</tr>'+ 
     '<tr>'+ 
      '<td class="text-right"><b>Comments:</b></td>'+ 
      '<td class="text-left"> <input type="text" name="comments" value="'+d.comment+'" '+readonly+' /></td>'+ 
     '</tr>'+ 
     '<tr>'+ 
      '<td class="text-right"><b>Role:</b></td>'+ 
      '<td class="text-left"><input type="text" name="role" value="'+d.role+'" '+readonly+' /></td>'+ 
     '</tr>', 
     message3 = show_inconsistency(inconsistent)+ 
     show_miss_uid(miss_uid)+ 
     '<tr>'+ 
      '<td>&nbsp; </td>' + 
     '<td>'+ 
       '<button type="button" class="btn btn-default" onclick="sendMail(\'' +username+ '\'); return false">' + 
       '<span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> Request change of permission' + 
       '</button> <br/><br/> ' + 
      '</td>' + 
     '</tr>' + 
    '</table>', 

     button = '<tr><td>&nbsp;</td><td><button class="btn btn-default" onclick="update(\''+username+'\', this)">Update</button</td></tr>'; 

    return message1+message2+button+message3; 
} 

Jede mögliche Hilfe schätzen sein hoch ...

+0

Ich bin ein wenig verwirrt durch Ihre Syntax/Struktur haha, ist das, was Sie versuchen, alle Eingabewerte einer bestimmten Zeile zu erhalten, wenn Sie auf die Schaltfläche in dieser Zeile klicken? Könnten wir die HTML-Struktur sehen (nein die eine, die Sie in js gebaut haben) – indubitablee

+1

Ich aktualisierte den Code. Ich hoffe, es wird jetzt klar sein. Ich erstelle eine Tabelle und gebe sie zurück. Dann ändert der Benutzer die Werte der Eingaben. Sobald der Benutzer auf die Schaltfläche Aktualisieren klickt, möchte ich die Werte der drei Eingänge in dieser Tabelle erhalten und mit ihnen in meinem Backend arbeiten – mk2

Antwort

1

Die folgende Beschreibung ist als Wähler arbeiten, ändern "Rolle" übereinstimmend:

$('#tableId input[name="role"]').val(); 

Bearbeitet nach weiteren Einzelheiten (siehe Kommentare unten)

+1

Dies ergibt das gleiche Problem, das ich mit document.getElementsByName hatte. Es gibt nur den Wert der ersten Tabelle zurück – mk2

+2

@rennomarcus Wenn das funktioniert, aber Sie mehrere Felder benötigen, verwenden Sie 'each()' z. '$ ('input [name =" role "]') .each (funktion() {alert ($ (this) .val())})' – DBS

+1

Ah, ok. Gibt es einen Grund, warum Sie den Eingaben keine ID geben können, vielleicht mit dem Namen und dem Index der Gruppe von Eingaben (Tabelle 1 hat Rolle1, Tabelle 2 hat Rolle2 usw.) und diese als Selektoren verwenden? – Michael

3

Verwenden Sie den jQuery("[attribute='value']") Selektor

affiliation_val = $("input[name='affiliation']").val(); 
comments_val = $("input[name='comments']").val(); 
role_val = $("input[name='role']").val(); 
+0

Das wird nicht funktionieren, da es den Wert im Gegensatz zum Namen sucht – Michael

+0

Danke, ich soll Name statt Wert setzen –

+1

Das gleiche wie @MikeSprague 's Kommentar – mk2

2

Wie auch von @DBS vorgeschlagen, verwenden Sie .each().

Dadurch wird jedes Element auf der Seite mit dem Namen "role" durchlaufen und der Wert auf der Konsole ausgegeben.

Wenn Sie nur die Elemente finden müssen (um etwas anderes mit ihnen zu tun, wie Sie in Ihrer Frage vorschlagen), dann können Sie element innerhalb der .each() Schleife verwenden, um Sachen mit jedem Element zu tun.

Hier ist eine andere Idee. Wenn Sie die Eltern der Elemente kennen (da es klingt wie Sie mehr als eine von jedem dieser Elemente auf der Seite haben), und interessieren sich für eine particulare ein, versuchen Sie dies:

$('#myParentID [name="role"]');

Dieser Wille Wählen Sie nur den Eingang innerhalb #myParentID.