2016-12-16 1 views
1

Ich schrieb einen Code, um ein Formular auf Client-Seite zu validieren. Da ich alle Fehlermeldungen gebunden habe, ist der letzte Fall, der in Betracht gezogen wird, wenn der Benutzer nicht einmal eine erforderliche Eingabe getroffen hat, leer gelassen.Überprüfen Sie, ob eine Eingabe mit Klasse in einem Formular leer ist

Wenn alle Eingaben in Form waren erforderlich ich so etwas wie

verwendet haben könnte
$('#subButton').on('click', function(e) { 
    if (!$('#formName').val()) { 
     e.preventDefault(); 
     alert("Fill all the required fields"); 
}); 

Aber da es in meinen Formulareingaben erforderlich sind (mit class="req") und nicht Eingaben erforderlich, würde ich gerne wissen, ob Es gibt eine Methode, um die Prüfung nur über die .req Eingänge durchzuführen. Etwas wie:

$('#subButton').on('click', function(e) { 
    if (!$('#formName.req').val()) { 
     e.preventDefault(); 
     alert("Fill all the required fields"); 
    } 
}); 

Mit anderen Worten würde Ich mag die gleiche Prüfung durchzuführen, die der up-to-date-Browser tun, wenn die HTML required Option angegeben wird, nur um sicher zu sein, dass, wenn der Browser a Bit alt und liest nicht die required Option, verhindert jQuery das Formular gesendet werden.

+2

Es gibt sehr gute jQuery Formularvalidierung Plugins. Ich würde vorschlagen, einen von diesen zu verwenden. Hält Sie davon ab, selbst viel Code zu schreiben. https://jqueryvalidation.org/ – Seb

+1

Es ist keine gute Idee, mit dem 'click' Ereignis eines' submit' Knopfes auf einem 'Formular' zu arbeiten, im Gegensatz zum' submit' Ereignis des 'form' das ausgelöst wird durch den 'Klick' eines' submit'-Buttons. –

+0

@Seb Sicher, ich überprüfe das und das andere berühmte, aber ich brauchte mehr Zeit, um herauszufinden, wie man sie in meine Seite integriert (sie haben ein schreckliches _wiki_ meiner Meinung nach), als die ganze Validierung selbst zu schreiben. Ich werde sie wahrscheinlich noch einmal versuchen, für komplexere Validierungen. Danke für den Tipp! – Brigo

Antwort

1

Verwenden Sie einfach .filter und überprüfen Sie die Länge. Auch eine einfache ! Prüfung ist wahrscheinlich nicht gut, was ist, wenn jemand 0 eingibt?

var hasEmptyFields = $('#formName.req').filter(function() { 
    return this.value.replace(/^\s+/g, '').length; //returns true if empty 
    //Stole the above regex from: http://stackoverflow.com/questions/3937513/javascript-validation-for-empty-input-field 
}).length > 0 

if (hasEmptyFields) { 

} 
+0

Du hast vollkommen recht, wenn du die '0' eingibst. Ich habe es getestet, aber es funktioniert nicht (sicher mache ich einen Fehler); Ich habe nicht verstanden, was '.length> 0 'tun soll, kannst du mir bitte erklären, da ich ein ziemlich Neuling in Javascript/jQuery bin? Vielen Dank! – Brigo

1

Verwenden reduce

const submitAllowed = $('.req').toArray().reduce((result, item) => { 
    return result && (!!item.value || item.value === 0); 
}, true) 

if (!submitAllowed) { ... } 

Here ist eine einfache Demo:

<form action="dummy.asp" onSubmit="return handleSubmit()"> 
    <p> You can only submit if you enter a name </p> 
    <br /> 
    Enter name: <input class="req" type="text" name="fname"> 
    <input type="submit" value="Submit"> 
</form> 

<script> 
    function handleSubmit() { 
    const submitAllowed = $('.req').toArray().reduce((result, item) => { 
     return result && (!!item.value || item.value === 0); 
     }, true) 

    return submitAllowed; 
    } 
</script> 
+0

Ihr Weg scheint interessant zu sein, aber ich kann es nicht wirklich funktionieren lassen. '$ ('. req'). toArray()' würde ** all ** das '' innerhalb eines Arrays setzen? Und mir ist auch nicht klar geworden, wie die "Leer-Check-Funktion" bei jedem .req mit "reduce" durchgeführt wird. Sorry, aber ich bin ein ziemlich Neuling in Javascript/jQuery – Brigo

+0

Ich habe meine Antwort bearbeitet. du könntest ein bisschen mit jsfiddle herumspielen und die Dinge werden klarer, hoffe ich. Lesen Sie auch die reduzierte Dokumentation, die ich verlinkt habe. Sie werden es bekommen. Ich verspreche, – lustoykov

0

Aber da es in meinen Formulareingaben erforderlich sind (mit class="req") und nicht Eingaben erforderlich, Ich würde gerne wissen, ob es eine Methode gibt, nur die Überprüfung durchzuführen an den Eingängen .req

Es gibt einen Booleschen HTML5 Form Attribut required.

required Werke:

  • <input type="text" />
  • <input type="search" />
  • <input type="url" />
  • <input type="tel" />
  • <input type="email" />
  • <input type="password" />
  • <input type="date" />
  • <input type="number" />
  • <input type="checkbox" />
  • <input type="radio" />
  • <input type="file" />

Beispiel:

input { 
 
display: block; 
 
margin: 6px; 
 
}
<form action="http://www.stackoverflow.com/"> 
 
<input type="text" placeholder="This is required" required /> 
 
<input type="text" placeholder="This isn't required" /> 
 
<input type="text" placeholder="This is required" required /> 
 
<input type="text" placeholder="This isn't required" /> 
 
<input type="submit" value="Press Me Without Filling in any of the Fields"> 
 
</form>

Sonderbar scheint der StackOverflow Snippet oben nicht zu funktionieren.

Hier ist ein JSFiddle zu zeigen, was sie tun sollten:

https://jsfiddle.net/a5tvaab8/

+1

_ "Mit anderen Worten, ich würde gerne die identische Prüfung durchführen, die die aktuellen Browser tun, wenn die Option HTML erforderlich ist um sicher zu sein, dass, wenn der Browser ein bisschen alt ist und die erforderliche Option nicht "liest", verhindert jQuery das Senden des Formulars "_ – Brigo

+1

Danke @Brigo - das wird mich lehren, das Lesen vor dem Ende zu stoppen .. . – Rounin

Verwandte Themen