繁体   English   中英

jQuery验证插件

[英]jQuery Validation Plugin

我真的是想避免问这个问题。 我已经看到了很多关于此插件的文章,但他们仍然对我不太了解。 现在,我有一个新的帐户注册表格,我正在尝试编写一种自定义方法来验证唯一的用户名。 我想以下应该起作用:

$.validator.addMethod(
        "uniqueUsername", 
        function(value, element) {
            $.post(
                "http://" + location.host + "/scripts/ajax/check_username.php",
                {
                    username: value
                },
                function(response) {
                    if(response == 'true') {
                        return true;
                    } else {
                        return false;
                    }
                }
            );
        },
        "This username is already taken."
    );

不幸的是,无论回调函数如何,插件似乎都在继续前进。 我发现有人建议做以下事情:

var result = false;
    $.validator.addMethod(
        "uniqueUsername", 
        function(value, element) {
            $.post(
                "http://" + location.host + "/scripts/ajax/check_username.php",
                {
                    username: value
                },
                function(response) {
                    if(response == 'true') {
                        result = true;
                    } else {
                        result = false;
                    }
                }
            );
            return result;
        },
        "This username is already taken."
    );

但是,由于它存储了值,因此似乎有一个延迟,然后在下一个事件中将设置任何值。 你们推荐什么?

由于这是一个异步检查,因此还需要更多检查(您不能从类似这样的函数返回值,在您的情况下,该值始终为false)。 内置方法是remote ,使用方式如下:

$("form").validate({
  rules: {
    username: {
      remote: {
        url: "http://" + location.host + "/scripts/ajax/check_username.php",
        type: "post"
      }
    }
  }  
});

这将发布一个username: valueofElement因为该规则适用于名为username的元素。 如果验证通过,则服务器端脚本应返回true ,否则返回false ...如果已经使用了用户名,则返回false

您可以在此处阅读更多有关remote选项的信息 ,包括如何在需要时传递其他数据参数。

js代码

username: {
        required: true,
        minlength: 5,
        remote: '/userExists'
       },

PHP代码检查是否存在并返回消息

public function userExists()
{
    $user = User::all()->lists('username');
    if (in_array(Input::get('username'), $user)) {
        return Response::json(Input::get('username').' is already taken');
    } else {
        return Response::json(Input::get('username').' Username is available');
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM