为什么错误来了$这个没有定义?

时间:2013-12-07 03:05:19

标签: javascript jquery this

我正在使用以下代码段:

$(function(){
    $(document).on('click','.delete_question',function() { 
        var question_id = $this.closest('tr').attr('id');
        var $ele = $this.closest('tr').attr('id');
        $.ajax({
            type:'POST',
            url:'match_question.php',
            data:{'request_type':'ajax', 'op':'delete','question_id':question_id},
            success: function(data) {
                 if(data=="YES") {
                    $ele.fadeOut().remove();
                 }else{
                        alert("can't delete the row");
                 }
             }

            });
        });
});

对于上面的代码,我在控制台中收到“ReferenceError:$ this not not defined”的错误。但是如果我在函数的开头打印一些警告消息就会打印它。那么为什么错误会来呢?你能帮我这方面吗?

3 个答案:

答案 0 :(得分:4)

错误消息非常清楚,您的代码使用的是变量$this,但未定义此类操作是错误的。可能存在一些关于$this$this$(this) ...

的混淆

this

this是Javascript中的保留字,具有特殊含义和特殊属性。它用于在执行函数时引用“当前上下文”,当执行的代码来自方法调用时,它的值是对象。

例如,如果您有一个对象obj两个片段

obj.foo();

m = obj.foo; m();

不等效,因为在第一种情况foo执行this的代码时obj将是this,而在第二种情况下$this将是全局对象。< / p>

$this

$而不是Javascript只是一个像其他任何变量一样的变量,Javascript的char $并没有什么特别之处,它可以自由地用于标识符。

$

就像之前说的那样,字符$并不特殊,a是一个有效的标识符,与Q$完全相同。 JQuery碰巧选择一个单独的$(this)作为(函数)函数名称,因为它很短并且不经常使用(所以它不太可能与其他变量冲突)。

$(this)

你从代码中删除的代码可能正在使用$this(只是猜测)......它与$(this)完全不同,因为$是调用JQuery的返回值函数this传递当前值{{1}}。

答案 1 :(得分:2)

$(function () {
    $(document).on('click', '.delete_question', function () {
        //the variable $this needs to be defined
        var $this = $(this);
        //also $ele need to refer to the tr element not the id
        var $ele = $this.closest('tr');
        var question_id = $ele.attr('id');
        $.ajax({
            type: 'POST',
            url: 'match_question.php',
            data: {
                'request_type': 'ajax',
                    'op': 'delete',
                    'question_id': question_id
            },
            success: function (data) {
                if (data == "YES") {
                    $ele.fadeOut().remove();
                } else {
                    alert("can't delete the row");
                }
            }
        });
    });
});

答案 2 :(得分:2)

this周围添加括号。更少的代码。 :}

另请注意: 这两个变量都会产生完全相同的字符串。我会删除一个,甚至更少的代码。 ;)

$(function(){
    $(document).on('click','.delete_question',function() { 
        var question_id = $(this).closest('tr').attr('id');
        var $ele = $(this).closest('tr').attr('id');

        ......
    )};
)};