$(this).attr(“name”)不使用$ .post

时间:2011-12-02 14:11:35

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

});

这不是吗?

$(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;
            };
        });
    });

});

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

3 个答案:

答案 0 :(得分: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;
            };
        });
    });

});

代码正确!似乎不允许使用方法(即使它返回一个字符串)。所以我把它放在另一个变量中并在那里使用它。的 Tested and works. (see the requests with dev tools or firebug)

代码正确!再次!似乎$.post不喜欢变量(它将它们视为字符串),因此我在$.post方法之外定义数据对象,并将其传入。像魅力一样工作。

需要考虑的重点

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

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

答案 1 :(得分:2)

而不是

            $.post("ajax-validation.php", { $(this).attr("name") : $(this).val() },

尝试

            var hash = {};
            hash[$(this).attr("name")] = $(this).val();
            $.post("ajax-validation.php", hash,

答案 2 :(得分:-3)

$(this).attr(“name”)是一个对象而不是字符串,这是您期望在帖子中提供的内容。尝试$(this).attr(“name”)。value或$(this).attr(“name”)。val(),不记得其中一个应该适合你。