Javascript 在jQuery AJAX回调中使用$(this)

Javascript 在jQuery AJAX回调中使用$(this),javascript,jquery,ajax,Javascript,Jquery,Ajax,我一直在寻找解决方案,但似乎没有一个有效 我似乎无法理解这个问题。我在中有一个按钮,单击该按钮时,我想进行AJAX调用以更新数据库,在AJAX调用成功后,我想更新的类以将按钮标记为已单击 我试过var=this。我在回调中尝试了context:this, function setScoreA(event,candidate,rubric,category,score){ var author = document.getElementById("autho

我一直在寻找解决方案,但似乎没有一个有效

我似乎无法理解这个问题。我在
中有一个按钮,单击该按钮时,我想进行AJAX调用以更新数据库,在AJAX调用成功后,我想更新
的类以将按钮标记为已单击

我试过
var=this。我在回调中尝试了
context:this,

        function setScoreA(event,candidate,rubric,category,score){
            var author = document.getElementById("author").value;
            if(author != ""){
                    $.ajax({
                            context: this,
                            type: "POST",
                            url: "stressBoardUpdate.php",
                            data: "candidate="+candidate+"&category="+category+"&score="+score+"&author="+author,
                            success: function(){
                                    $(that).parent('td').siblings().removeClass('isScore');
                                    $(that).parent('td').addClass('isScore');
                            }
                    });
            }else{
                    alert("Author must contain something...");
            }
         }
下面是调用函数的方式

<input type="button" "="" value="5" onclick="setScoreA('Stress Board','Y235','Stress Board Rubric','Handled Stress','5');">
onclick=“setScoreA
不会将
设置为单击的元素,而是设置为
窗口
。您使用它的方式。您使用它的方式,我不确定您是否能够实际获得对元素的引用。您应该绑定事件侦听器,而不是使用
onclick
(无论如何,您都可以使用jQuery执行此操作):

如果出于某种原因,您真的想坚持使用
,您可以使用:

setScoreA.call(this, 'Stress Board' ...

首先,在代码中使用
数据
属性,并设置一个公共侦听器

HTML:

<input type="button" class=".button-group" data-event="Stress Board" data-candidate="Y235" data-rubric="Stress Board Rubric" data-category="Handled Stress" data-score="5">
$(".button-group").click(function() {
    // Do something
});
另外,我假设您正在动态生成许多按钮。上面的代码可以改进,因为整个表只有一个单击侦听器,而不是为每个项目设置一个单击侦听器

$("#wrapper").on("click", "input", function() {

    var event = $(this).data("event");
    var candidate = $(this).data("candidate");
    var rubric = $(this).data("rubric");
    var category = $(this).data("category");
    var score = $(this).data("score");

    setScoreA(this, event, candidate, rubric, category, score);

});

资源:

<input type="button" class=".button-group" data-event="Stress Board" data-candidate="Y235" data-rubric="Stress Board Rubric" data-category="Handled Stress" data-score="5">
$(".button-group").click(function() {
    // Do something
});

这个
var=this
在哪里?这个函数是如何调用的?为点击发布事件处理程序。在以前的尝试中:P它以前在
var作者之前…
另外,为什么要使用本机JavaScript按ID进行选择?jQuery的优势在于选择元素有多容易。
$(“\35; ID”)
。您应该能够这样做…
var that=$(this);
然后在您的ajax调用中:
that.parent('td')…
这里的问题是,您调用
setcorea()
的方式可能没有按照您的意愿设置
this
值。请向我们展示如何调用
setcorea()