【发布时间】:2010-01-12 10:13:24
【问题描述】:
我目前在我的新项目中使用带有 cakephp 的 jQuery 验证插件。
在我需要通过 ajax 对电子邮件字段进行唯一检查以检查数据库之前,它一直运行良好。
我不知道如何让插件对来自 db 的电子邮件进行唯一验证。
感谢
【问题讨论】:
标签: php cakephp jquery jquery-validate
我目前在我的新项目中使用带有 cakephp 的 jQuery 验证插件。
在我需要通过 ajax 对电子邮件字段进行唯一检查以检查数据库之前,它一直运行良好。
我不知道如何让插件对来自 db 的电子邮件进行唯一验证。
感谢
【问题讨论】:
标签: php cakephp jquery jquery-validate
我认为您指的是使用 AJAX 调用(通过插件)来检查服务器的唯一电子邮件,是吗?
我建议使用验证插件的addMethod 创建一个自定义验证,您可以在其中进行AJAX 调用(这将是jQuery 核心的一部分)。
有一篇关于此主题的 SO 帖子可供您探索:
JQuery Validate Plugin - How to create a simple, custom rule?
请注意,您必须自己实现服务器端脚本。
这是另一篇应该有用的文章(使用 jQuery 和 PHP):
Check email already exist – Ajax – Jquery
【讨论】:
语法简单
$.validator.addMethod("eventName",
function(value, element) {
// condition returns true or false
}, "Error message to display");
});
事件名称以形式调用
<input type="text" name="name" class="eventName" />
如有疑问请参考此链接
jQuery Validate Plugin - How to create a simple custom rule?
【讨论】:
如果您想检查电子邮件是否唯一,您可以使用远程规则。 来自:http://jqueryvalidation.org/remote-method
示例:将电子邮件字段设为必填项、电子邮件并执行远程请求以检查给定地址是否已被占用。
$( "#myform" ).validate({
rules: {
email: {
required: true,
email: true,
remote: "check-email.php"
}
}
});
示例:将电子邮件字段设为必填,电子邮件并执行远程请求以检查给定地址是否已被占用。此外,http 方法设置为“post”,用户名与电子邮件地址一起发送。
$( "#myform" ).validate({
rules: {
email: {
required: true,
email: true,
remote: {
url: "check-email.php",
type: "post",
data: {
username: function() {
return $( "#username" ).val();
}
}
}
}
}
});
【讨论】:
试试类似的东西
$.validator.addMethod("unique",
function(value, element, params) {
var isUnique = false;
if(value == '')
return isUnique;
id_send= '';
if(params[1] !='')
id_send ='id='+params[1]+'&';
$.ajax({
url: "path"+params[2],
type : 'GET',
async: false,
data: id_send+'field=' + params[0] + "&value=" + value,
dataType: 'json',
cache: true,
success: function(data){
isUnique = data;
}
});
return isUnique;
},
jQuery.validator.format("Value already in use")
);
在上面的代码中:
结果如下:
rules:
{
email: {
required: true,
unique:['email', $('#user_id').val(),'uniqueemail.php'],
email: true
},
PHP uniqueemail.php,在email字段中搜索value,如果返回空或者用户id等于$('#user_id') .val() 所以返回 true,否则返回 false。
请注意,async 属性设置为 false,这是一个回退,但可以完成这项工作。
【讨论】: