javascript - jQuery 验证插件在检查用户名时抛出错误

标签 javascript php jquery validation jquery-validate

JSFIDDLE:http://jsfiddle.net/c56z1674/ (错误解释见文末)

我的 HTML(为了简化目的,我只包含用户名字段):

<form id="form_register_create" method="get" action="">
    <input type="text" id="register_username" name="register_username" placeholder="username" autocomplete="off" autofocus required>
    <input type="submit" id="form_register_create_submit" style="display:none">    
</form>

我的JS:

$('#form_register_create').validate({
    // specify rules
    rules : {
        register_username : {
            required : true,
            register_username : true,
            minlength : 3,
            maxlength : 18,
            remote : {
                url : "../system/check-uniqueness-username.php",
                type : "post"
            }
        }
    },
    // specify error messages
    messages : {
        register_username : {
            required : "Please enter a username.",
            register_username : "Please enter a username (between 3 and 18 chars).",
            remote : "Username already in use!"
        }
    },
    // when everything is valid, fire register function
    submitHandler : function(form) {
        register_create();
    }
});

我的 PHP (check-uniqueness-username.php):

<?php

require_once 'db.php';

$username = trim(strtolower($_REQUEST['register_username']));


$results = $db -> query("SELECT * FROM users WHERE username = $username");  

if(mysqli_num_rows($results) == 1) {
 $valid = 'false';
}
else{
 $valid = 'true';
} 


echo $valid;
exit;

出现以下错误:

当我在字段中输入用户名并通过单击另一个字段离开该字段时,我在控制台中收到以下错误消息:

Uncaught TypeError: Cannot read property 'call' of undefined

我发现: 如果我在验证脚本的规则部分中省略“register_username : true”部分,则不会发生此错误。但忽略这一部分对我来说不是一个选择,因为在这种情况下我将无法检查用户名的唯一性。

有谁知道如何避免这个错误?您可以自己尝试一下,在用户名字段中输入一些内容,然后单击电子邮件字段:http://jsfiddle.net/c56z1674/

最佳答案

我猜您正在使用 jQuery 验证文档 example为此:

$( "#myform" ).validate({
  rules: {
    email: {                         // <----- email(1)
      required: true,
      email: true,                   // <----- email(2)
      remote: "check-email.php"
    }
  }
});

字段名称相同,但 email(2) 是内置验证,用于检查字段是否包含有效的电子邮件。 (Documentation)

因此,在您的代码中,只需删除“register_username : true”,因为它不是可用选项,您的验证脚本将进行 php 调用。

JSFiddle

HTML:

<form id="form_register_create" method="get" action="">
    <input type="text" id="register_username" name="register_username" placeholder="username" autocomplete="off" autofocus required>
    <input type="submit" id="form_register_create_submit" style="display:none">    
</form>

JS:

$('#form_register_create').validate({
    // specify rules
    rules : {
        register_username : {
            required : true,
            minlength : 3,
            maxlength : 18,
            remote : {
                url : "../system/check-uniqueness-username.php",
                type : "post"
            }
        }
    },
    // specify error messages
    messages : {
        register_username : {
            required : "Please enter a username.",
            register_username : "Please enter a username (between 3 and 18 chars).",
            remote : "Username already in use!"
        }
    },
    // when everything is valid, fire register function
    submitHandler : function(form) {
        register_create();
    }
});

关于javascript - jQuery 验证插件在检查用户名时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25348891/

相关文章:

php - 数据库中的行不会更新

jquery - 输入字段和 gldatepicker 显示间隙

javascript - TypeScript 中的强类型 Immutable.js 记录

javascript - RxJS Node 在订阅下一个序列之前等待 observable 完成

javascript - 如何在 TypeScript 中正确引用模块?

php - 调用fedex服务时出现Nodejs Soap模块问题

javascript - 如何使用下载属性下载多个音频文件?

php - 完整的noob,SOAP PHP,带有身份验证的请求,存储在mySQL中

jquery 在悬停时切换

javascript - jQuery 字符串比较在 IE7 中的行为有所不同