【问题标题】:jQuery Validate Plugin throws error when checking usernamejQuery Validate Plugin 在检查用户名时抛出错误
【发布时间】:2014-08-17 11:46:21
【问题描述】:

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;

出现以下错误:

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

未捕获的类型错误:无法读取未定义的属性“调用”

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

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

【问题讨论】:

  • register_usernameundefined,因为您已在 register_username 字段下将其列为 register_username: true 的方法/规则。 register_username 不是方法/规则,所以它是 undefined

标签: javascript php jquery validation jquery-validate


【解决方案1】:

我猜你正在使用 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();
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多