检查用户名时,jQuery Validate Plugin会引发错误

时间:2014-08-17 11:46:21

标签: 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;

以下错误发生:

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

  

未捕获的TypeError:无法读取未定义的属性“call”

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

因此,在您的代码中,只需删除&#39; register_username:true,&#39;因为它不是一个可用的选项,你的验证脚本将进行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();
    }
});