JQuery 验证器关闭所有表单字段上的工具提示
JQuery Validator turn OFF tooltips on all form fields
这个很奇怪。因此,我在同时使用 Backbone.js 和 jQuery 移动设备的网站上实施了 jQuery 验证。在一种形式上,验证的工作方式与默认情况非常相似,您会在输入字段下方看到红色文本(我必须更改位置,因此文本不在字段内)。
由于某种原因,在另一页上错误消息的显示方式不同。它们看起来像工具提示。
我在这里看到很多关于如何使用工具提示进行验证的 post,但这不是我想要的。我只想要标准的普通红色文本。
如果有人可以看一下,我将不胜感激。这是一个演示站点,您可以在其中看到问题
在该页面上,如果您导航到注册页面并单击提交而不填写任何内容,您将看到我想要的外观。然后返回登录页面并使用这些凭据登录(不要担心这是一个演示站点)
用户名:public
密码:99382lVAB8
在此页面上,单击“保险信息”,然后单击“提交”。它将在第一个输入字段上显示工具提示。
好的..抱歉,我认为最好有一个活生生的例子,但你是对的,(我下次会做对的)。这是相关代码:
首先,有一个函数可以设置我的 backbone 路由器,在那个函数的末尾我放了这个:
jQuery.validator.setDefaults({
errorPlacement: function(error, element) {
error.appendTo(element.parent().parent().after());
}
});
然后标准 backbone 路由接管,直到您单击注册页面 link。这是 registerApp 页面的精简版,应该只显示相关内容:
var registerApp = function() {
var app = {};
app.Register = Backbone.Model.extend({
url: api_url + '/m2/api/register',
});
app.RegisterMainView = Backbone.View.extend({
template: _.template($('#register-main-template').html()),
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
app.AppView = Backbone.View.extend({
el: '#registerapp',
initialize: function () {
var register = new app.Register(regSteps);
var view = new app.RegisterMainView({model:register});
$('#main-content').append(view.render().el);
$('#main-content').trigger('create');
//$('#insurance-form').validate();
jQuery.validator.setDefaults({
errorPlacement: function(error, element) {
error.appendTo(element.parent());
}
});
$('#insurance-form').validate({
rules: {
policy_provider: { required: true },
policy_number: { required: true },
start_date: { required: true },
end_date: { required: true }
}
});
},
events: {
'submit': 'onFormSubmit',
},
onFormSubmit: function(e) {
e.preventDefault();
console.log('submit form');
}
});
app.appView = new app.AppView();
}
最后,这些是使用的模板:
<script type="text/template" id="register">
<div id="registerapp">
<div data-role="header">
<h2 id="logo"> </h2>
</div>
<div class="ui-content" id="main-content">
</div>
<div data-role="footer" class="footerapp">
</div>
</div>
</script>
<script type="text/template" id="register-main-template">
<form action='/m2/api/register/' method='post' id='register-main' class="ui-mobile">
<div class="ui-body ui-body-a ui-corner-all col">
<div>
<div data-role="collapsibleset" id="registration-steps">
<div data-role="collapsible" id="insurance">
<h3><span>Insurance Information</span><img src="images/<%- ins_icon %>"/></h3>
<form action="#" id="payment-forms" id="insurance-form">
<span>We just need some basic information about your insurance</span>
<div><input name="policy_provider" id="policy_provider" type="text" placeholder="Policy Provider" required/></div>
<div><input name="policy_number" id="policy_number" type="text" placeholder="Policy Number" required/></div>
<div><input name="start_date" type="text" placeholder="Start Date" required/></div>
<div><input name="end_date" type="text" placeholder="End Date" required/></div>
<button name="submit_insurance" id="submit_insurance" type="submit" class="ui-btn">Submit Insurance Info</button>
</form>
</div>
</div>
</div>
</div>
</form>
</script>
在为 post 清理这个的过程中,我意识到我在做一些非常愚蠢的事情。就像在一个表格中有一个表格,这肯定是个坏主意。
工具提示不是来自 jQuery 验证...它是浏览器的内置 HTML5 验证。换句话说,您没有正确初始化 jQuery Validate 插件,因此由于您的标记包含 HTML5 验证属性 required
,它将回退到此。 (注意:由于您在 .validate()
方法中声明了所有验证规则,因此不需要使用任何 HTML5 验证属性。)
但是,关键问题...
您在同一个 <form>
元素上有两个不同的 id
属性...
<form action="#" id="payment-forms" id="insurance-form">
行为将无法预测,但是第二个 id
属性可能会被忽略,这与您附加到 .validate()
的初始化方法相同 id
。
$('#insurance-form').validate({ ....
这个很奇怪。因此,我在同时使用 Backbone.js 和 jQuery 移动设备的网站上实施了 jQuery 验证。在一种形式上,验证的工作方式与默认情况非常相似,您会在输入字段下方看到红色文本(我必须更改位置,因此文本不在字段内)。
由于某种原因,在另一页上错误消息的显示方式不同。它们看起来像工具提示。
我在这里看到很多关于如何使用工具提示进行验证的 post,但这不是我想要的。我只想要标准的普通红色文本。
如果有人可以看一下,我将不胜感激。这是一个演示站点,您可以在其中看到问题
在该页面上,如果您导航到注册页面并单击提交而不填写任何内容,您将看到我想要的外观。然后返回登录页面并使用这些凭据登录(不要担心这是一个演示站点)
用户名:public
密码:99382lVAB8
在此页面上,单击“保险信息”,然后单击“提交”。它将在第一个输入字段上显示工具提示。
好的..抱歉,我认为最好有一个活生生的例子,但你是对的,(我下次会做对的)。这是相关代码:
首先,有一个函数可以设置我的 backbone 路由器,在那个函数的末尾我放了这个:
jQuery.validator.setDefaults({
errorPlacement: function(error, element) {
error.appendTo(element.parent().parent().after());
}
});
然后标准 backbone 路由接管,直到您单击注册页面 link。这是 registerApp 页面的精简版,应该只显示相关内容:
var registerApp = function() {
var app = {};
app.Register = Backbone.Model.extend({
url: api_url + '/m2/api/register',
});
app.RegisterMainView = Backbone.View.extend({
template: _.template($('#register-main-template').html()),
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
app.AppView = Backbone.View.extend({
el: '#registerapp',
initialize: function () {
var register = new app.Register(regSteps);
var view = new app.RegisterMainView({model:register});
$('#main-content').append(view.render().el);
$('#main-content').trigger('create');
//$('#insurance-form').validate();
jQuery.validator.setDefaults({
errorPlacement: function(error, element) {
error.appendTo(element.parent());
}
});
$('#insurance-form').validate({
rules: {
policy_provider: { required: true },
policy_number: { required: true },
start_date: { required: true },
end_date: { required: true }
}
});
},
events: {
'submit': 'onFormSubmit',
},
onFormSubmit: function(e) {
e.preventDefault();
console.log('submit form');
}
});
app.appView = new app.AppView();
}
最后,这些是使用的模板:
<script type="text/template" id="register">
<div id="registerapp">
<div data-role="header">
<h2 id="logo"> </h2>
</div>
<div class="ui-content" id="main-content">
</div>
<div data-role="footer" class="footerapp">
</div>
</div>
</script>
<script type="text/template" id="register-main-template">
<form action='/m2/api/register/' method='post' id='register-main' class="ui-mobile">
<div class="ui-body ui-body-a ui-corner-all col">
<div>
<div data-role="collapsibleset" id="registration-steps">
<div data-role="collapsible" id="insurance">
<h3><span>Insurance Information</span><img src="images/<%- ins_icon %>"/></h3>
<form action="#" id="payment-forms" id="insurance-form">
<span>We just need some basic information about your insurance</span>
<div><input name="policy_provider" id="policy_provider" type="text" placeholder="Policy Provider" required/></div>
<div><input name="policy_number" id="policy_number" type="text" placeholder="Policy Number" required/></div>
<div><input name="start_date" type="text" placeholder="Start Date" required/></div>
<div><input name="end_date" type="text" placeholder="End Date" required/></div>
<button name="submit_insurance" id="submit_insurance" type="submit" class="ui-btn">Submit Insurance Info</button>
</form>
</div>
</div>
</div>
</div>
</form>
</script>
在为 post 清理这个的过程中,我意识到我在做一些非常愚蠢的事情。就像在一个表格中有一个表格,这肯定是个坏主意。
工具提示不是来自 jQuery 验证...它是浏览器的内置 HTML5 验证。换句话说,您没有正确初始化 jQuery Validate 插件,因此由于您的标记包含 HTML5 验证属性 required
,它将回退到此。 (注意:由于您在 .validate()
方法中声明了所有验证规则,因此不需要使用任何 HTML5 验证属性。)
但是,关键问题...
您在同一个 <form>
元素上有两个不同的 id
属性...
<form action="#" id="payment-forms" id="insurance-form">
行为将无法预测,但是第二个 id
属性可能会被忽略,这与您附加到 .validate()
的初始化方法相同 id
。
$('#insurance-form').validate({ ....