我有一个包含一些文本框的表单,当文本框不包含有效值时,我收到错误消息,但文本框颜色不会更改为红色。
这就是我所拥有的
模型
public class AddCompany
{
public int Id { get; set; }
[Required(ErrorMessage = "*Name is required")]
public string Name { get; set; }
[Required(ErrorMessage = "*Address is required")]
[RegularExpression(@"^\(?([0-9]{4})\)?([A-Z]{2})",ErrorMessage = "*Not a valid Zip Code, Must be in format 1234AB")]
public string Address { get; set; }
[Required(ErrorMessage = "*Phone Number is required")]
[DataType(DataType.PhoneNumber)]
[RegularExpression(@"^\(?([0-9]{10})", ErrorMessage = "*Not a valid number, must be 10 numbers")]
public string Phone { get; set; }
[DataType(DataType.DateTime)]
public DateTime DateTimeAdded { …Run Code Online (Sandbox Code Playgroud) css asp.net-mvc jquery-validate unobtrusive-validation asp.net-mvc-4
我使用 jQuery 验证方法,并设置了一些默认设置,如下所示
$.validator.setDefaults({
errorContainer : "#msgErrors ul",
errorLabelContainer: "#msgErrors",
wrapper: "li",
submitHandler: function(form) {
lockScreen();
if (typeof url !== 'undefined' && url != null) {
loadContentViaAjax("tr#idElement", url, $(form).formSerialize(), "html");
} else {
form.submit();
}
},
invalidHandler: function() {
var divsMessages = $(".fadeOutAndEmpty");
if (divsMessages.is(":animated")) {
divsMessages.stop().removeAttr("style").show();
}
}
});
Run Code Online (Sandbox Code Playgroud)
对于这些默认设置工作,我必须通过在我拥有的每个表单上调用验证方法来初始化表单。为了实现这一点,我在页面完全加载后调用了
$("form").validate()
Run Code Online (Sandbox Code Playgroud)
在每个页面加载的外部 JS 文件中。这样我的应用程序中的所有表单都会触发验证方法,但我没有定义任何规则,再次调用验证方法传递实际规则不会完成这项工作。
有没有办法定义必须执行的规则,并且即使已经调用了验证方法,这些规则也会实际执行?
我的 ASP.NET MVC 项目中有一个自定义的不显眼的验证器。我在特定属性上允许该属性的多个实例。一切似乎都正确渲染。属性的每个实例都包含附加到它的另一个小写字母。因此,当它呈现时,它可能类似于data-val-myvalidatora或data-val-myvalidatorb。
在客户端,我选择了所有希望添加不显眼的验证器的输入,获取属性,检查额外的小写字母,而不是为每个实例添加新方法和适配器。
如果我运行 F12,我可以看到如果我检查$.validator.methods,我的方法被添加。但是,如果我输入应该失败的数据并点击表单的提交按钮,我的验证器不会验证。我的验证方法是在一个独立的函数中。如果我添加断点,则不会命中。
我能做些什么来确保方法连接正确?
我注意到的另一个问题是,我在属性级别有一个字典来确定将属性添加到 HTML 输入元素的次数。但是,在每次后续回发时,字典都不会重置。我的猜测是我应该覆盖其他一些方法,但我无法确定它是哪个。
我有以下正则表达式检查多种类型的电子邮件地址输入
[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^\s>)]+)[>)]?
Run Code Online (Sandbox Code Playgroud)
我得到了这个如何在 ruby 中对 3 个主要电子邮件客户端中的名称和电子邮件进行正则表达式?
我面临的问题是,在 javascript 中使用它时,我收到一个错误“未捕获的语法错误:无效的正则表达式/[\W"]*(?"<name>".*?)[\"]*?\s*[<(]?(?"<email>"\S+@[^\s>)]+)[>)]?/::无效的组”
我花了一整天的时间试图解决这个问题,但我发现这个问题与lookbehind javascript不支持有关
我不擅长正则表达式,需要一些建议。有人可以指出我正确的方向。
PS:我正在尝试将此功能与 jquery 验证插件集成

我应该能够在不更改密码的情况下保存用户名。并且仅当当前密码不为空时才验证 #frmMyprofile。如何做到这一点?
Javascript 验证代码:
$('#frmMyProfile').validate({
rules: {
"user[current_password]": "required",
"user[password]": {
required: true,
minlength: 6
},
"user[password_confirmation]": {
required: true,
minlength: 6,
equalTo: "#user_password"
}
},
messages: {
"user[current_password]": "Please enter your current password",
"user[password]": {
required: "Please enter new password",
minlength: "Please enter at least 6 characters"
},
"user[password_confirmation]": {
required: "Please enter confirm password",
equalTo: "Please enter the same value as the new password."
}
}
});
Run Code Online (Sandbox Code Playgroud)
HTML: 我应该只能保存用户名或密码或两者都保存。如果当前密码不为空,它应该只验证。
<form accept-charset="UTF-8" action="/users" class="form-stacked" id="frmMyProfile" method="post" novalidate="novalidate"><div style="margin:0;padding:0;display:inline"><input name="utf8" …Run Code Online (Sandbox Code Playgroud) 我正在使用 Jquery 验证插件来验证表单。当验证表单的一个元素对齐方式不正确时。
如果您看到图像,则在验证表单时,城市字段图标 +按钮对齐方式不正确。因为标签错误验证显示在 input 元素和icon + 之间。我需要在元素下方显示错误消息。

对于城市字段,我的html代码是这样的
<tr>
<td align="right"><span class="mandetry">*</span> City:</td>
<td>
<div class="input-group" id="app_details">
<input type="text" class="form-control client_city" name="client_city" id="city_name" value="<?php echo set_value('client_city')?>">
<span class="input-group-btn">
<a class="btn btn-default" id='addnewcity' href="<?php echo base_url('addnewcity')?>"><i class="fa fa-plus-square"></i></a>
</span>
<div id="messageBox"></div> <!-- Here i would like to display message-->
</div> </tr>
Run Code Online (Sandbox Code Playgroud)
js代码是这样的
$(document).ready(function(){
$('#add_client').validate({
errorClass: 'validation_errors',
debug: false,
rules: {
client_name:{required:true},
client_address:{required:true},
client_city:{required:true},
errorPlacement: function(error, element) {
if (element.attr("name") == "client_city" )
{
error.appendTo("#messageBox");
} …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 jquery 验证规则插件,但遇到了以下问题。虽然我的一些输入字段具有静态 ID。有一些字段是动态生成的,因此 ID 不是静态的。不幸的是,我无法控制生成的 ID。我可以使用 .each 循环来获取 ID,但是如何将 ID 变量传递给规则进行验证。有没有办法在字段名称中使用变量?如果这些字段只需要我会使用不同的方法,但是我需要对输入进行正则表达式检查。
$j('form').validate({
rules:{
txtFirstName: 'required',
txtLastName: 'required',
txtEmail: 'required',
randomIdFieldVariable: 'Regex check"
}
);
Run Code Online (Sandbox Code Playgroud) 我有一个使用 jQuery 验证的 ASP.NET MVC 5 网站(jquery.validate.js在 MVC 项目模板中)。我正在尝试使用typeahead.js在表单中的输入字段之一上实现预输入功能。(该表单恰好在引导模式内)。
因为提交表单会发出 AJAX 请求,所以表单提交事件被困如下:
$form.on("submit", function (e) {
if (!$form.valid()) {
return false;
}
... do stuff ...
Run Code Online (Sandbox Code Playgroud)
请注意,此处发生的第一件事是检查表单是否存在任何验证错误,如 jQuery 验证库检测到的那样。
如果我不使用typeahead,那么一切都很好。我可以在表单中输入值并提交,一切都很好。
但是,只要我执行以下操作将预输入功能添加到我的输入中:
$("#myInput").typeahead({
minLength: 1,
highlight: true
},
{
source: mySource
});
Run Code Online (Sandbox Code Playgroud)
...然后我不能再提交表格了。我的形式被认为是不合法的:$form.valid()回报false。
我认为typeahead.js图书馆正在向表单添加一些额外的元素(包括隐藏的输入),这让jquery.validate.js图书馆感到困惑。
使用 Chrome F12,似乎那里有一个输入看起来像原始输入的副本,遗憾的是该副本似乎已被复制,因此它也具有所有 jQuery 验证属性的副本。
我该如何解决这个问题?
我正在尝试在添加 classRule 时重组通过 jquery.validate() 远程发送的数据。
jQuery.validator.addClassRules("remote-validation", {
required: true,
remote: {
url : '/!/check/?ajax=true',
type:'post',
data: { table : $('body').attr('data-app'), id: $('input[name=id]').val(), field: $(this).val() }
}
});
Run Code Online (Sandbox Code Playgroud)
只是试图提取正在使用的字段名称,以便更轻松地处理服务器端,但似乎无法找出如何提取正在验证的当前字段。
我的目标是生成以下内容
{ table : 'companies', id: '123', field: 'companyName }
Run Code Online (Sandbox Code Playgroud)
任何建议非常感谢
jquery-validate ×10
jquery ×7
javascript ×4
asp.net-mvc ×2
css ×2
html ×2
regex ×2
each ×1
typeahead.js ×1
url ×1
validation ×1