使用jQuery调用函数时维护'this'

时间:2016-03-13 19:38:35

标签: javascript jquery

我想离开这个:

$("#btnminus").mousedown(function () {
    $(this).animate({width: "95%", height: "95%"}, 50);
}

到此:

function btnPressed() {
    $(this).animate({width: "95%", height: "95%"}, 50);
}
$("#btnminus").mousedown(function () {
    btnPressed();
}

显然,这并不容易。 JSLint给了我一个“严格违规”的问题,我不知道这意味着什么。

3 个答案:

答案 0 :(得分:4)

它更容易,只需引用该函数,this-value将是元素

$("#btnminus").mousedown(btnPressed);

当你在没有上下文的另一个匿名函数中调用该函数时,this-value将是window (在草率模式下,严格来说是undefined)< / em>,而不是元素,因为当没有指定其他内容时,它是默认的执行上下文。

此处了解some examples如何在事件句柄中调用函数时设置this-value

由于JSLint内置了大量的愚蠢内容,并且发现了各种不成功的问题,你可以

  1. 停止使用
  2. 忽略错误,因为JSLint不知道什么是
  3. 的函数中的this导致错误
  4. this: true指令添加到您的文件中,以使JSLint忽略此类错误
  5. -

    /*jslint this: true*/
    
    "use strict"
    
    function btnPressed() {
        $(this).animate({width: "95%", height: "95%"}, 50);
    }
    
    $("#btnminus").mousedown(btnPressed);
    

    将验证

答案 1 :(得分:1)

  

JSLint给了我一个严格的违规行为&#39;问题,我不知道是什么意思。

这意味着您正在使用strict模式,该错误会告诉您

function btnPressed() {
    $(this).animate({width: "95%", height: "95%"}, 50);
}

您在独立函数的上下文中使用this,该函数不是#btnminus元素。

在此代码中

$("#btnminus").mousedown(function () {
    btnPressed();
}
匿名函数中的

this是正确的,因为jQuery会为您管理,但是当您调用btnPressed()this它不是正确的。

你可以简单地做$("#btnminus").mousedown(btnPressed);,一切都会好的。

答案 2 :(得分:0)

使用event.currentTarget而不是:

&#13;
&#13;
function btnPressed(event) {
  var $el = $(event.target);
  $(this).animate({width: "95%", height: "95%"}, 50);
}

$("#btnminus").mousedown(btnPressed);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnminus">Minus</button>
&#13;
&#13;
&#13;