gpt4 book ai didi

jquery - 需要完成三个文本字段之一,验证不适用于强 View

转载 作者:行者123 更新时间:2023-12-01 04:49:30 24 4
gpt4 key购买 nike

我要求至少完成三个字段之一,如果没有,那么应该会产生验证错误。这变得相当烦人,因为我以前在 jQuery 中做过它,并且由于某种原因它根本无法在这个项目上工作。

实时验证适用于所有其他字段(顺便说一句,我从 View 中删除了这些字段以使其易于阅读),但是当我将 jQuery 验证直接添加到 View 中(如下所示)以设置以下要求时至少输入三个中的一个,它什么也不做。对表单没有影响,而所有其他字段都得到了正确的验证,例如电子邮件、密码/确认密码匹配等...关于导致此冲突的原因有什么想法吗?

我正在使用 ASP.NET MVC 4 和强大的 View ;捆绑/缩小已设置,我已包含对以下所有内容的引用:

  • jquery.unobtrusive
  • jquery.validate 1.11.1
  • 附加方法 1.11.0
  • jquery-ui 1.10.4 + 基本主题
  • jquery 2.1.0
  • 现代化

RegistrationViewModel

[DataType(DataType.PhoneNumber)]
[StringLength(25)]
[Display(Name = "Work number: ")]
public string WorkPhone { get; set; }

[DataType(DataType.PhoneNumber)]
[StringLength(25)]
[Display(Name = "Mobile number: ")]
public string MobilePhone { get; set; }

[DataType(DataType.PhoneNumber)]
[StringLength(25)]
[Display(Name = "Home number: ")]
public string HomePhone { get; set; }

_Layout.cshtml

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Test Reg</title>
<meta name="viewport" content="width=device-width" />
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/modernizr")

</head>
<body>
<header>
<div>
@RenderBody()
</div>
</header>
</body>
</html>

查看

@model Web.Models.RegistrationViewModel
@{
ViewBag.Title = "Registration";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<script>
$(document).ready(function () {

//Form Submission
$('#btnSubmit').click(function(obj) {
var isValid = $("#RegistrationForm").valid();

if (isValid) {
obj.preventDefault();
$('#RegistrationForm').submit();
return false;
}
});

//JQuery Validation
$("#RegistrationForm").validate({
rules: {

txtWorkPhone: {
require_from_group: [1, ".phoneGroup"]
},
txtHomePhone: {
require_from_group: [1, ".phoneGroup"]
},
txtMobilePhone: {
require_from_group: [1, ".phoneGroup"]
}
}
});

});

</script>

@using (Html.BeginForm("Registration", "Account", FormMethod.Post, new { enctype = "multipart/form-data", id="RegistrationForm" }))
{
@Html.ValidationSummary(true, "Registration failed, please verify that all fields are properly completed.");
<div>
<fieldset>
<legend>Registration</legend>

<div>
@Html.LabelFor(p=>p.WorkPhone)
@Html.TextBoxFor(p=>p.WorkPhone, new {@class="phoneGroup", name="txtWorkPhone"})
</div>
<div>
@Html.LabelFor(p=>p.HomePhone)
@Html.TextBoxFor(p=>p.HomePhone, new {@class="phoneGroup", name="txtHomePhone"})
</div>
<div>
@Html.LabelFor(p=>p.MobilePhone)
@Html.TextBoxFor(p=>p.MobilePhone, new {@class="phoneGroup", name="txtMobilePhone"})
</div>

<input type="submit" value="Register" id="btnSubmit" />
</fieldset>
</div>
}
<小时/>

更新1

在查看发布的答案后测试了以下代码,不完全确定如果我正确设置了此设置,则看起来不像它,因为它仍然无法正常工作。

 $(document).ready(function () {

$('#btnSubmit').click(function (obj) {

$("#RegistrationForm").rules("add", {
txtWorkPhone: { require_from_group: [1, ".phoneGroup"] },
txtHomePhone: { require_from_group: [1, ".phoneGroup"] },
txtMobilePhone: { require_from_group: [1, ".phoneGroup"] },
messages: {
txtWorkPhone: "Enter at least one phone number.",
txtHomePhone: "Enter at least one phone number.",
txtMobilePhone: "Enter at least one phone number."
}

}).validate();


var isValid = $("#RegistrationForm").valid();

if (isValid) {
obj.preventDefault();
$('#RegistrationForm').submit();
return false;
}
});

});

最佳答案

两个问题。首先,您的主要问题是您没有提供验证失败时显示的任何消息。因此,基本上,即使验证失败,也没有任何迹象表明这一点。

其次,调用 .validate 会导致验证立即发生。由于此处的代码在页面加载时运行,因此会立即使用这些附加规则验证表单(可能不是您想要的)。然后,稍后,当用户实际提交表单时,将再次运行验证,但是,这部分是关键,不包括这些规则。相反,它按照 Microsoft 验证脚本添加的原始规则运行。您实际上并没有更新规则集,只是告诉一个特定的验证调用来合并这些规则。

要更新所有 validate 调用的规则列表,您需要使用 .rules

参见:http://jqueryvalidation.org/rules

更新

Microsoft 本身包含一些用于 jQuery 验证的连接,这些连接包含在 jqueryval 脚本包中。这将设置默认规则并初始化验证。这意味着,您不必这样做。它还与表单的提交事件相关,因此您也不需要为此执行任何操作。

在您的场景中,您需要只是向 Microsoft 已为您设置的默认验证规则添加一些附加规则。此外,rules 方法适用于各个字段,而不是表单。这是您在准备好文档后需要执行的操作:

$(document).ready(function () {
$("#txtWorkPhone").rules("add", {
require_from_group: [1, ".phoneGroup"]
});
$("#txtHomePhone").rules("add", {
require_from_group: [1, ".phoneGroup"]
});
$("#txtMobilePhone").rules("add", {
require_from_group: [1, ".phoneGroup"]
});
});

关于jquery - 需要完成三个文本字段之一,验证不适用于强 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com