2012-04-13 4 views
0

Beginnend mit so etwas wie diesesVerwenden Sie jquery, um zu überprüfen, ob * alle * Felder einen Wert haben?

$('#report-form').submit(function(){ 
    if (! $('#datetime, :checkbox, :radio, textarea').val()){ 
      alert('not posted'); 
      return false; 
     } else { 
      alert('posted'); 
     } 

}); 

Abgesehen davon, dass anstelle der Veröffentlichung nicht, wenn eines der Felder leer sind, wollen ich es, es sei denn alle der aufgeführten Felder/Feldtypen sind leer posten. Gibt es eine Möglichkeit, dies mit einer Auswahlzeichenfolge zu tun und nicht jedes Element manuell zu überprüfen?

Ich dachte, eine .each() -Funktion auszuführen, die eine Variable erhöht, wenn sie leer ist und sie nur senden, wenn die # weniger als die # Felder ist, aber im Idealfall suche ich etwas generischer (das wird arbeiten mit Checkboxen und Radio Buttons sowie Texteingaben und Textbereichen).

+0

warum verwenden Sie nicht so etwas wie jquery validate? – Dhiraj

+0

was ist mit $ ('# datetime,: checkbox,: radio, textarea') jeder() ??? – chepe263

+0

Hatte einen kurzen Blick durch die Validierungsdokumentation und bemerkte keine eingebaute Möglichkeit zu überprüfen, ob mindestens ein Feld ausgefüllt werden muss. – Damon

Antwort

0

Sie können alle gewünschten Eingaben und Textbereiche durchlaufen und eine Variable auf true setzen (die ursprünglich auf false gesetzt wurde) und die Schleife unterbrechen, wenn sie auf eine Eingabe trifft, die nicht leer ist. Dann überprüfen Sie einfach, ob die Variable wahr ist oder nicht, nachdem die Schleife beendet ist.

1

Sie können $.grep verwenden, um ein Array von Elementen zurückzugeben, die eine Bedingung erfüllen.

Hier, wenn jedes Element einen Wert hat, wird es von dem Rückruf true zurückzukehren, und die length werden true mindestens 1, Zwingen sein.

var any = !!$.grep($('#datetime, :checkbox, :radio, textarea'), function(el) { 
    return !!el.value; 
}).length; 

if (any) { 
    // there was at least one 
} 

Eine andere Möglichkeit ist mit dem Attribut-nicht-gleich-Selektor, obwohl ich es nicht empfehlen würde.

if (!!$('input[value!=""]').length) 

Sie behauptet, das Attribut zu überprüfen, scheint aber tatsächlich die .valueEigenschaft zu überprüfen. Das scheint mir ein Fehler zu sein. Da die Dokumente behaupten, dass das Attribut überprüft wird, würde ich es wahrscheinlich vermeiden.

0

Sie können die Methode valid() verwenden, um den Validator direkt aufzurufen.

$("#myform").validate(); 
$("a.check").click(function() { 
    alert("Valid: " + $("#myform").valid()); 
    return false; 
}); 
Verwandte Themen