2013-12-19 8 views
8

Ich habe eine Situation, wenn ich versuche, zu überprüfen, ob ein Formular gültig ist, aber form.valid() gibt immer wahr zurück. Aber wenn ich versuche, das individuelle Steuerelement zu validieren, gibt es false zurück.jQuery Validierung - form.valid() liefert immer true

Das ist meine Form:

<div class="profilestagsedit"> 
    @using (Html.BeginForm("", "", FormMethod.Post, new { id = "tagsform" })) 
    { 
     @Html.ValidationMessageFor(x => x.EditTagsText) 
     @Html.TextBoxFor(p => p.EditTagsText, new 
      { 
       @id = "txtprofileedittags" 
      }) 
    } 
</div> 

Das ist mein Viewmodel ist:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter at least one Tag ")] 
public string EditTagsText { get; set; } 

Dies ist der jQuery-Code:

$('#tagsform').removeData("validator"); 
    $('#tagsform').removeData("unobtrusiveValidation"); 
    $.validator.unobtrusive.parse('#tagsform'); 
    $('#tagsform').validate(); 

und auf den Button klicken sparen:

var isValid = $('#tagsform').validate().element($('#txtprofileedittags')); <-- false 
$('#tagsform').valid() true <-- 

Ich möchte die Form.valid() auch falsch zurückgeben, was mache ich falsch?

+1

sein kann, sollten Sie ‚erforderlich‘ zur Eingabe hinzufügen –

Antwort

3

Sie sollten mit dem Eingang

<input type="text" name="name" required> 

Siehe Arbeits Demo here

Für unauffällige HTML 5-kompatible Attribute der Validierer beschreiben erforderlich add data-val="true" die Eingabefelder angebracht werden.

Weitere Informationen here

+0

Dies ist eigentlich falsch, das erforderliche Attribut ist Teil der Jquery-Validierung nicht unaufdringlich Validierung, und das Server-Framework sollte dies für Sie behandeln, sollte es erforderlich sein. Wenn ich das angegebene Beispiel ausführe, funktioniert es nicht. Sie haben nur Glück, wenn 1 von dem anderen abhängt, löst es in diesem Fall dieses Problem der Personen. – War

+0

Ich sagte nicht erforderlich Attribut ist Teil der unaufdringlichen Validierung. Ich habe gerade gesagt "Für unauffällige HTML-5-kompatible Attribute beschreiben die Validatoren, die den Eingabefeldern data-val = 'true' angehängt werden.Und die Demo funktioniert nicht, weil der Speicherort der jquery-Validierungs-Quelldatei nicht mehr vorhanden ist. Konnte die Konsole verwendet haben, um es zu überprüfen. Ich werde prüfen, ob es eine validierte CDN gibt. Irgendwie schätze ich Ihre Antwort. –

+0

Habe die Validierungs-CDN geändert. Bitte überprüfen Sie die Demo jetzt. –

8

Die Frage bereits eine Antwort akzeptiert, aber ich glaube, dass ich mehr spezifische Antwort gefunden habe. Ich habe gefunden, dass, wenn das erste validierte Element in dem Formular ein "name" -Tag hat, alles so funktioniert, wie Sie erwarten würden (das heißt, .valid() wird false zurückgeben, wenn das Formular ungültig ist). Die akzeptierte Antwort enthielt praktisch ein "Name" -Tag und somit funktionierte es.

In normalen Formularen benötigen Sie unbedingt Namensschilder, da diese verwendet werden, wenn die Daten an den Server gesendet werden. Aber in moderneren Umgebungen, wie denen, die Knockout verwenden, gibt es keinen Grund, ein "Name" -Tag zu haben, weil die Datenbindung funktioniert, um Ihr Datenmodell auf dem neuesten Stand zu halten.

+0

Funktioniert perfekt mit dem 'name' Attribut, danke! – jdnichollsc

-1

Ich war Referenzierung beide Dateien:

  • jquery.validate.js
  • jquery.validate.unobstrusive.js < - diese Referenz entfernen!

Entfernen Bezug auf jquery.validate.unobstrusive.js, ist es für mich fixiert

hoffe, das hilft jemand

+1

Bitte lesen Sie die Frage sorgfältig durch. Das Problem, das hier auftritt, wäre nicht durch zusätzliche Skriptverweise verursacht worden. Und wie ich in Ihrer Kopie davon bemerkt habe, stehen diese Skripte nicht in Konflikt. Man benötigt das andere tatsächlich. –

Verwandte Themen