簡體   English   中英

jQuery驗證:從表單中刪除錯誤消息

[英]jquery validation: remove error message from form

我有一個帶有電子郵件字段和“獲取新聞通訊”復選框的表單。

<form method="post" class="form-horizontal" action="">

<input class="form-control" type="text" id="Email" name="Email" value="test@test.com" />
<span class="text-danger field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>

<input data-val="true" id="GetNewsletter" name="GetNewsletter" type="checkbox" value="true" />

</form>

電子郵件字段最初是可選的,但如果用戶選中獲取新聞通訊復選框,則必填字段。 我在客戶端使用jquery驗證添加了它。

$("#GetNewsletter").change(function () {
    var checked = $(this).prop("checked");
    if (checked) {
        $('#Email').rules('add', {  //set required rule
            required: true,
            messages: {
                required: "Email is required."
            }
        });
    }
    else {
        $('#Email').rules('remove', 'required'); //remove rule and call valid()
        $('#Email').valid();
    }
});

如果未選中該復選框,則刪除規則並調用valid()以重置輸入的狀態。 不幸的是,這不會刪除驗證消息。

有內置的方法來清除驗證消息嗎? 我想避免操縱標記,例如,刪除/添加驗證類。

您只能動態添加/刪除使用插件的方法1添加的規則。

$('form').validate({
    rules: {
        Email: {
            required: true
        }
    }
});

演示: jsfiddle.net/zh5uofs9/

如果還有其他required ,例如內聯屬性2 ,則將無法使用.rules('remove') 1

演示2: jsfiddle.net/zh5uofs9/1/


1根據文檔:

“僅處理通過rules-option或rules("add")指定的規則。”

2由於您使用的是ASP,因此.validate()實例將由Unobtrusive Validation插件自動構建,並且具有聲明規則的內聯屬性。

底線:由於未刪除規則,因此消息不會清除。 而且,在使用內聯驗證屬性時,您不能動態禁用或刪除規則。

您的(不成功的)嘗試只會刪除視圖中的錯誤消息,並且您仍然需要在控制器方法中編寫代碼來驗證數據(客戶端驗證是一個不錯的選擇,但是可以輕松地繞過它,您必須在服務器)。

而是使用實現IClientValidatable的條件ValidationAttribute ,以便同時獲得客戶端和服務器端驗證。 此類屬性的示例是萬無一失的 [RequiredIf][RequiredIfTrue]屬性,您可以將其應用於模型

[RequiredIfTrue("GetNewsletter", ErrorMessage = "...")]
public string Email { get; set; }

然后在視圖中

@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)

@Html.CheckBoxFor(m => m.GetNewsletter)

如果選中此復選框,並且“ Email為空,則將顯示一條驗證消息(如果繞過客戶端驗證,則ModelState在POST方法中將無效。

另外,如果要編寫自己的條件驗證屬性,請參閱《 ASP.NET MVC 3中驗證的完整指南-第2部分 》以獲取良好的指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM