2011-01-12 6 views
1

Ich habe gerade angefangen, jQuery zu lernen und liebe es schon, aber meine Fähigkeiten reichen noch nicht aus, um dieses wahrscheinlich einfache Problem für meine Arbeit zu lösen: Ich habe 3 verschiedene Formen mit einem Eingabefeld sofort durch Submit-Button gefolgt:jQuery: Formularübergabe verhindern, wenn das Feld vor dem Senden leer ist

alt text

ich mag Formularübermittlung verhindern, wenn das Texteingabefeld oder das Textfeld vor der Submit-Button leer.

$(function() { 
     $(':submit').click(function(e) { 
       $(':text').each(function() { 
         if ($(this).val().length == 0) { 
           $(this).css('border', '2px solid red'); 
         } 
       }); 
       e.preventDefault(); 
     }); 
}); 

Aber es hat folgende Probleme: Ich habe einen Ausschnitt aus der jQuery Ninja book gestohlen

  1. Es das Textfeld in der letzten Form ignoriert, weil $(':text').each() nicht darauf
  2. gilt
  3. Es spielt keine 't erlaube das Einreichen eines Formulars - Ich denke, ich muss preventDefault() unter einem "if" verschieben
  4. Ich sollte wahrscheinlich besser prev() statt each()
  5. verwenden
  6. Wenn der Benutzer ihre Meinung ändert und klickt auf eine andere Form, sollte die bisherige Form

mich Könnte bitte gelöscht jemand helfen? Alex

UPDATE:

Ich habe versucht:

$(function() { 
     $(':submit').click(function(e) { 
       $(this).prev(function() { 
         if ($(this).val().length < 2) { 
           // would be good to clear border for 
           // each text and textarea here... 
           $(this).css('border', '2px solid red'); 
           e.preventDefault(); 
         } 
       }); 
     }); 
}); 

aber leider 2 Warnungen erhalten:

Warning: Unexpected token in attribute selector: '!'. 
Warning: Unknown pseudo-class or pseudo-element 'submit'. 

und die rote Grenze erscheint nicht und das Formular gesendet, wenn auf eine Schaltfläche geklickt wird.

Auch habe ich versucht:

$(function() { 
     $('form').submit(function(e) { 
       $(':text, textarea').each(function() { 
         if ($(this).val().length < 2) { 
           $(this).css('border', '2px solid red'); 
           e.preventDefault(); 
         } 
       }); 
     }); 
}); 

aber die Form ist nie vorgelegt und alle drei Textfelder rot statt nur einem.

+0

anstelle von '$ (': submit'). Click()' versuchen Sie das gleiche in '$ ('form'). Submit();' – naiquevin

+0

Vielleicht hilft diese ähnliche Frage: http: // stackoverflow .com/questions/2119187/jquery-form-submission-parameter-check – fncomp

Antwort

4
<script type="text/javascript" src="/jquery-1.4.4.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
     $(':submit').click(function(e) { 
       $(':text, textarea').each(function() { 
         if ($(this).val().length == 0) { 
           $(this).css('border', '2px solid red'); 
           e.preventDefault(); 
         } 
       }); 
     }); 
}); 
</script> 

Sie werden wahrscheinlich mit .each() :)

+0

Danke, aber aus irgendeinem Grund haben alle 3 Textfelder jetzt einen roten Rand und ich brauche nur ein Textfeld, um rot zu sein - das vor dem angeklickten Submit Button. Und haben Sie einen Doppelpunkt in ': Text, Textarea' oder ist es richtig? –

+0

Ich würde sagen, dass dies spezifisch für das Formular, das Sie betrachten, eher als jede Vorlage (wie der: submit Selektor tut), aber das ist vielleicht ich Old School und übervorsichtig - anstelle von $ (: submit) ersetzen durch $ (" # {idoform} "). click wo {idoform} ist die Formular-ID –

+0

Ich hatte gehofft, dass es einen eleganten Weg gibt, ohne 3 verschiedene # id_of_form's und 3 jQuery Funktionen einzuführen - da meine 3 Formulare alle so ähnlich sind: sie haben ein Eingabefeld (Text oder Textbereich) gefolgt von einem Absenden-Button. –

1
  1. Da (':text') is equivalent to $('[type=text]') so dass es nicht enthalten Textarea in Ordnung sein. Wechseln Sie zu $(':text, textarea').
  2. Correct
  3. Nein, prev nicht Schleife über die Sammlung, tut each. (prev wählt das vorherige Geschwister des aktuellen Elements)

  4. Schauen Sie sich http://bassistance.de/jquery-plugins/jquery-plugin-validation/ an, es ist ein großartiges Validierungs-Plugin.

+0

Danke, aber für 3. - Ich möchte nur ein Text- oder Textfeldfeld rot und nicht alle machen. Also denke ich, dass ich irgendwie prev() verwenden muss, um auf das Feld vor dem angeklickten Submit-Button zuzugreifen. –

+0

Ja, anstatt durch sie alle zu gehen, benutzen Sie einfach prev –

3

-Code für Klick, und geben Sie die Taste

$(":input").bind("click keypress", function (evt) { 

    var keyCode = evt.which || evt.keyCode; 
    var sender = evt.target; 
    if (keyCode == 13 || sender.type == "submit") { 
     evt.preventDefault(); 

     //add your validations here 
    } 

vorlegen und das Formular abschicken.

Verwandte Themen