我正在使用以下代码段:
$(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”的错误。但是如果我在函数的开头打印一些警告消息就会打印它。那么为什么错误会来呢?你能帮我这方面吗?
答案 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');
......
)};
)};