这不起作用

时间:2017-06-05 14:22:51

标签: javascript jquery

我无法找到解决方案,但是mousedown之后的第二个将无效。我已经看到了绑定它的不同之处,但我没有运气。 (它适用于代码中的其他任何位置)。

$(".rightArrow").click(function () {       
    var stop_slide = parseInt($(this).prev().css("marginLeft"));      
    scroll_size = $(this).prev().children().size() * 177 * -1;      
    if(stop_slide > scroll_size){
        var int00; // declared here to make it visible to clearInterval. 
        $(this).mousedown(function(){
            int00 = setInterval(function() { 
                $(this).prev().css( { marginLeft : "-=1px" } ); 
            }, 1);
        }).mouseup(function() {
            clearInterval(int00);
        });

    }

});

1 个答案:

答案 0 :(得分:1)

this中的setIntervalthis中的mousedown不同。只需使用self变量,就这样:

$(".rightArrow").click(function() {
  var stop_slide = parseInt($(this).prev().css("marginLeft"));
  scroll_size = $(this).prev().children().size() * 177 * -1;
  if (stop_slide > scroll_size) {
    var int00; // declared here to make it visible to clearInterval.
    $(this).mousedown(function() {
      var self = this;
      int00 = setInterval(function() {
        $(self).prev().css({
          marginLeft: "-=1px"
        });
      }, 1);
    }).mouseup(function() {
      clearInterval(int00);
    });
  }
});

通过function语句声明的每个函数都有自己的上下文(this),因此,您需要将前一个上下文存储到一个变量中,以便在另一个函数中访问它。

另一种方法是使用bind:

 int00 = setInterval(function () {
    $(this).prev().css(...);
 }.bind(this));

这会将当前上下文(当前this)绑定到setInterval回调。

如果您使用,则可以使用箭头功能:

// the `this` from here
int00 = setInterval(() => {
   // will be the `this` from here
});

箭头函数没有上下文 - 它们继承当前上下文。