2010-09-07 4 views
9

Ich habe ein jQuery-Skript, das eine Zeile an eine Tabelle anfügt. Kurz gesagt, der Benutzer kann einen Wert aus einem Dropdown-Menü auswählen, dann 'x' Monat eingeben und 'add' drücken, wodurch die Zeile an die Tabelle angehängt wird. Zum Beispiel wird die folgende Zeile vom Benutzer angehängt:jQuery: Überprüfen Sie, ob eine Tabellenzeile mit bestimmten Werten bereits existiert

<tr> 
    <td>Some Value</td> 
    <td>2</td> 
</tr> 

Nun, wenn der Benutzer wieder die gleiche Operation durchführt, muss ich den Vorgang stoppen und warnen ihn, dass er einen doppelten Mehrwert zu schaffen versucht. Wie kann ich mithilfe von jQuery prüfen, ob die obige Zeile bereits existiert oder nicht, wobei das erste und zweite Element <td> denselben Wert haben wie die Daten, die er hinzufügen möchte? Der Grund, warum ich die ersten und zweiten <td> Elemente nur sage, ist, weil es andere <td> Elemente in der Reihe gibt, aber sie enthalten versteckte Felder, die die neu hinzugefügten Daten an ein serverseitiges Skript übergeben, also möchte ich die Validierung so kurz und halten so einfach wie möglich.

Wenn es keine Hilfe ist, ist die Tabelle ID #tblspecializations

Vielen Dank für Ihre Eingabe.

Antwort

18

Sie könnten in der Lage sein zu verwenden :contains():

$('#tblspecializations tr > td:contains(Some Value) + td:contains(2)').length 

- Example

bewusst sein, aber, dass : contains() wird das Element zurück, wenn der String in der überall abgestimmt ist Text des Elements.

+1

Arbeitete wie eine BOMBE, vielen Dank in der Tat. Ich bin nicht allzu besorgt über die Werte, die ähnlich sind, da sie ohnehin vordefinierte Werte sind. Ich einfach die folgende Funktion hinzugefügt und alles hat super geklappt: \t \t if ($ ('# tblspecialization td: enthält (' + $ slabel + ')') Länge.) { \t \t \t alert ('Eine Spezialisierung der gleichen Typ und Monate wurde bereits eingegeben. '); \t \t \t Rückgabe false; \t \t} Big bis zu Ihnen für Ihre Hilfe – SimonDowdles

+0

1+ Sie für Ihre Hilfe und Zeit und einfach und effektive Antwort – SimonDowdles

+0

@webfac: froh, dass ich :-) –

2

Ich würde vorschlagen, dass Sie Ihre Daten in einer Datenstruktur halten (ein (assoziatives) Array zum Beispiel). Daher werden Sie die Daten in der Struktur und nicht im DOM überprüfen.

+0

Ich mag diesen Ansatz wirklich und bin mir sicher, es ist eine bessere Praxis, aber für dieses Szenario ist der gesamte Code in einer bestimmten Art und Weise strukturiert, wenn auch nicht die beste Art. Ich brauchte eine Lösung, die ich einfach 'anschließen konnte in 'zur aktuellen Logik. Vielen Dank für Ihre Führung!Sehr geschätzt – SimonDowdles

+0

1+ zu Ihnen für Ihre Hilfe und Zeit – SimonDowdles

1

Um es kurz zu machen, sollte der folgende Code in der click() Handler Ihnen in Ihrer Situation helfen; Sie können see the whole code in action:

$(function(){ 
    $("#btn").click(function(){ 
     var table = $("#tblspecializations"); 
     var firstTd = $("td:first", table); 
     var secondTd = firstTd.next(); 

     if(firstTd.text() == $("#dropdown").val() && secondTd.text() == $("#num").val()) 
      alert("Error: You're trying to add the same entry"); 
    }); 
}); 

Kurze Erklärung: Durch td:first im Selektor, sind Sie die erste Spalte in der Tabelle bekommen, und durch die next()-Funktion, Sie seine Geschwister bekommen, nämlich die zweite Spalte.

+0

dies funktioniert auch für mich, aber ich fand Andy E's Antwort, die kürzeste Lösung zu sein. Vielen Dank für Ihre Zeit! Es bleibt nicht unbemerkt. – SimonDowdles

+0

1+ für Sie für Ihre Hilfe und Zeit – SimonDowdles

+0

@webfac Kein Problem; Gern geschehen, und danke für die Aufwertung. –

Verwandte Themen