$(this).attr("name")不使用$ .post

Flo*_*y88 4 jquery

我在一个简单的表单上使用此代码.请告诉我为什么这段代码有效

$(document).ready(function(){

    $(":input").focus(function() {
        $(this).keyup(function(){
            if (this.value != this.lastValue) {
                $.post("ajax-validation.php", { "username" : $(this).val() },
                function(data){
                    $("#display").html(data);
                });
                this.lastValue = this.value;
            };
        });
    });

});
Run Code Online (Sandbox Code Playgroud)

这不是吗?

$(document).ready(function(){

    $(":input").focus(function() {
        $(this).keyup(function(){
            if (this.value != this.lastValue) {
                $.post("ajax-validation.php", { $(this).attr("name") : $(this).val() },
                function(data){
                    $("#display").html(data);
                });
                this.lastValue = this.value;
            };
        });
    });

});
Run Code Online (Sandbox Code Playgroud)

这是一个非常奇怪的事情!

Mad*_*iha 6

不是.$(this)没有你说的上下文.您需要缓存它并重用它.像这样:

$(document).ready(function() {

    $(":input").focus(function() {
        $(this).keyup(function() {
            var el = $(this), theName = el.attr("name"), data = {};
            data[theName] = el.val();
            if (this.value != this.lastValue) {

                $.post("ajax-validation.php", data , function(data) {
                    $("#display").html(data);
                });
                //console.log(el.attr("name"), el.val());
                this.lastValue = this.value;
            };
        });
    });

});
Run Code Online (Sandbox Code Playgroud)

代码更正了!似乎不允许使用方法(即使它返回一个字符串).所以我把它放在另一个变量中并在那里使用它.经过测试和工作.(使用开发工具或firebug查看请求)

代码更正了!再次!它看起来好像$.post不喜欢变量(它将它们视为字符串),所以我在$.post方法之外定义数据对象,并将其传入.像魅力一样工作.

要考虑的重点

  • 代码是正确的但不健壮,这意味着,它将完全按照您在答案中的要求工作,但它可能会,并且在发生攻击时会以无尽的请求阻塞您的服务器.你应该:

    • 制作一个计时器(setTimeout用于限制请求(仅在3-4秒后不进行编辑).
    • 确保在服务器端安全,不允许来自同一连接的许多请求.将连接信息与全局计数器(保存在数据库或文本文件中)结合使用,以确定用户是否滥用您的系统并阻止它.
  • 您应该(在我看来)有一个验证按钮(或链接,或其他)来检查输入是否有效,而不是在按键上自动验证.