2009-08-07 10 views
2

Als erstes entschuldigen Sie sich für die Erstellung meiner dritten Javascript Frage in so vielen Tagen - Ich versuche wirklich, mich in diesem Bereich auf dieses Projekt zu schieben, und fühle mich meine Fähigkeiten entwickeln bei eine ziemlich gute Rate dank meiner Forschung und Ihrer fantastischen Hilfe hier, besonders Redsuqare !!Zeit Validierung (und Vergleich) mit Javascript/JQuery

Ich habe eine Tabelle, wo Menschen Zeiten eingeben können, und haben eine Maske an Ort und Stelle, wo es überprüfen wird, ob die Eingabe im Format 99:99 ist - das ist großartig, aber im Idealfall möchte ich es begrenzen nicht mehr als 23:59 sein!

Hier ist der Code, den ich im Moment haben, zusammengeschustert das Beste, was ich kann, aber wenig überraschend nicht ...

$.each($('#hoursavailable tr td :checkbox'), function() { 

    var $this = $(elem); // cache the object 
    var $row = $this.closest('tr'); // find the nearest table row 
    if($this.is(':checked')) { 
     // do nothing! 
    } else { 
     $row.each(':text'),function() { 
      var splittime = $(this).split(":"); 
      if(splittime[0] > 22 || splittime[1] > 58) { 
       alert('please enter a valid date'); return false; 
      } 
     } 
    } 
}); 

erwähnenswert sein konnte auch nicht funktioniert, dass es zwei Eingänge pro Zeile/tr - es wäre absolut ideal, wenn ich irgendwie die beiden vergleichen könnte, um sicherzustellen, dass die erste vor dem zweiten, aber zu schätzen wissen, dass noch mehr über mich sein könnte als die aktuelle Sachen :(

Dank

+0

aktualisierte Antwort. – redsquare

Antwort

1

Du wirst verrückt mit Ihrem eaches suchen, wenn Sie wirklich brauchen nur ein

Dies sollten Sie gehen mit ein paar Einschränkungen erhalten wie unten detailliert.

$("#hoursavailable :checked").each(function() { 
     var splittime = $(this).parents("tr").find(":text").val().split(":"); 
     if (splittime[0] > 22 || splittime[1] > 58) { 
      alert('please enter a valid date'); 
      return false; 
     }   
    }); 

Ich habe hier davon ausgegangen, dass Sie nur ein Textfeld haben (daher .find („: text“). auf der übergeordneten könnten Sie betrachten eine Klasse hinzufügen, aber bedenken Sie, dass Klassen Selektoren langsam.

Es gibt keine Validierung hier ist, so dass Sie ein wenig mehr hinzufügen möchten, aber die Prämisse funktioniert.

+0

Vielen Dank! Habe dies ein wenig modifiziert und es funktioniert jetzt ein absoluter Leckerbissen, danke! $ ("# hoursavailable: text") jede (function() { \t \t diese $ = $ (this); // Cache das Objekt var splittime = $ this.val()..Teilt(":"); if (splittime [0]> 22 || splittime [1]> 58) { \t \t \t $ this.focus(); \t \t \t $ .jGrowl ('! Bitte ein gültiges Datum eingeben müssen, nicht größer als 23.59!', { \t \t \t \t Thema: 'Rauch' \t \t \t}); \t \t \t retVal = false; falsch zurückgeben; } }); – Nick

3

Ich denke, alles, was Sie brauchen, ist die folgende Änderung seit Ihrer Machen Sie einen jeden um die Texteingaben, also müssen Sie den Wert herausholen und das teilen.

$row.find(':text').each(function() { 
      var splittime = $(this).val().split(":"); 
      if(splittime[0] > 22 || splittime[1] > 58) { 
        alert('please enter a valid date'); return false; 
      } 
}); 

jedoch sparen Sie sich neu zu erfinden das Rad, warum nicht die validate plugin suchen in dem Sie Regex Ausdrücke konfigurieren können mit Datenvalidierung zu beschäftigen.

Obwohl ich weiß, Hand Rollen ist auch eine gute Lernkurve.

+0

Vielen Dank, ich werde mir das Validierungs-Plugin sofort ansehen. Sehr gute Stelle auf das fehlende val() übrigens, oops! Ich bin mir nicht sicher, ob die beiden laufen, da es nichts getan hat, selbst wenn ich 'alert (splittime [0]) ausprobiert habe;' - Sorry, ein Schmerz zu sein – Nick

0

Synthese von verschiedenen Methoden für max & Format zusammen zu prüfen.

var timeFieldValue = $(this).val(); 
    re = /^\d{1,2}:\d{2}([ap]m)?$/; 
    if(timeFieldValue != '' && !timeFieldValue.match(re)) { 
     alert("Invalid time format: " + timeFieldValue); 
     $(this).focus(); 
     return false; 
    } 
    var splittime = timeFieldValue.split(":"); 
    if(splittime[0] > 23 || splittime[1] > 59) { 
     alert('Please enter a valid time'); 
     return false; 
    }