2016-07-04 6 views
1
kommt

Ich mache eine einfache, grundlegende Validierung von Wörtern, aber irgendwie funktioniert es nicht. Dies ist, was ich habe:Überprüfen Sie, ob der Eingabewert einer unbekannten Anzahl von Wörtern entspricht, die aus dem Datenattribut

HTML:

<div class="customfixer"> 
    <li data-folder="something">something</li> 
    <li data-folder="random name">random name</li> 
    <li data-folder="my news">my news</li> 
    <!-- etc.. 100+ more of unique folder names --> 
</div> 

<input type="submit" class="submitasvalid" name="submit" value="Create folder" /> 

jQuery:

$('input.newfoldername').on('input', function() { 

    var lopinys = $('input.newfoldername').val(); 

    $('.customfixer').each(function() { 

    var validacija = $(this).find('li').data('folder'); 

    if(lopinys == validacija) { 
     // alert if folder name exists in the list 
    } 
    else{ 
     // alert if folder name does not exists in the list 
    } 

    }); 

}); 

Ich weiß, dass etwas schlecht ist, weil manchmal funktioniert es, aber manchmal ist es nicht.

Frage:

Wie kann man überprüfen, ob Eingabewert auf unbekannte Anzahl von Wörtern Liste gleich, die aus Datenattribut kommt? Und wenn gleich - etwas tun.

Danke für alle Antworten und Entschuldigung für schlechtes Englisch.

Antwort

2

für die Existenz eines data-* Attribut Um zu überprüfen, mit einem auf einer Reihe von Elementen gegeben Sie nutzen könnten filter() und überprüfen Sie die length der Ergebnismenge. Versuchen Sie folgendes:

$('input.newfoldername').on('input', function() { 
    var lopinys = $('input.newfoldername').val(); 

    $('.customfixer').each(function() { 
     var exists = $(this).find('li').filter(function() { 
      return $(this).data('folder') == lopinys; 
     }).length != 0; 

     if (exists) { 
      console.log(lopinys + ' exists'); 
     } else { 
      console.log(lopinys + ' does not exist'); 
     } 
    }); 
}); 

Working example

+0

Hmm. Seltsam, Ihr Beispiel funktioniert wie erwartet, aber in meinem Code wird es so oft wie Ordner Namen existiert.Zum Beispiel 40. Grundsätzlich überprüft es, ob die erste Prüfung gültig ist oder nicht, nicht alles. Aber Ihr Beispiel funktioniert wie erwartet :) – Tauras

+0

Ja, es greift nur das letzte Datenattribut in der Liste:/ – Tauras

+0

Das klingt seltsam. Könnten Sie Ihr jsFiddle aktualisieren, so dass es das gleiche Verhalten hat? –

0

Ich denke, Sie möchten den Eingabewert überprüfen, wenn Sie auf die Schaltfläche zum Senden klicken. Wenn das der Fall ist, versuchen Sie folgendes:

HTML:

<div class="customfixer"> 
    <li data-folder="something">something</li> 
    <li data-folder="random name">random name</li> 
    <li data-folder="my news">my news</li> 
    // etc.. 100+ more of unique folder names 
</div> 
<input type="text" name="input-name" class="newfoldername" /> 
<input type="submit" class="submitasvalid" name="submit" value="Create folder" /> 

jQuery:

$('input.submitasvalid').on('click', function() { 

    var lopinys = $('input.newfoldername').val(); // you must have 

    $('.customfixer li').each(function() { 

var validacija = $(this).find('li').attr('data-folder'); 

if(lopinys === validacija) { 
    alert('Value matches with input'); 
    // alert if folder name exists in the list 
} 
else{ 
    alert('Value does not match with input'); 
    // alert if folder name does not exists in the list 
} 

}); 

}); 
+0

Nein, ich möchte prüfen, ob Name auf "keypress" existiert. In meiner Situation '' .on ('input' function() {' – Tauras

+0

versuchen keyup oder keydown anstelle der Eingabe $ ('input.newfoldername'). Auf ('keyup', function() { // code }); –

Verwandte Themen