如何将$(this)传递给一个函数?

3

我的代码是:

$(document).ready(function(){

    var hCount = 0,
        eCount = 0,
        nCount = 0,
        mCount = 0;

$("#head").click(function() {
        var pPos = counter(hCount);
        $(this).animate({left:pPos+"px"}, 1000);
    });

function counter(count)
{
    count++;
    if(count === 10)
    {
        count = 0;
        pPos = 0;
    }
    else
    {
        var pPos = $(this).css('left');
        pPos = pPos.substring(0,(pPos.length-2))
        pPos -= 367;

    }

    return pPos;
}

我收到了一个错误,内容为:

Uncaught TypeError: Cannot read property 'defaultView' of undefined

我不知道是什么导致了这个错误。

另外,我该如何将 $(this) 的值作为参数传递给 counter() 函数?由于我会在其他不同的 div 中重复使用这个功能,因此不能直接提及 $("#head"),而需要在函数 counter 中重用代码。


请不要问多个问题。只问一个或另一个。 - Liam
3个回答

6
只需通过elem参数扩展计数器函数,并在单击处理中传递它即可:
function counter(count, elem){
   // ...
}

$("#head").click(function() {
    var elem = $(this);
    var pPos = counter(hCount, elem);
    elem.animate({left:pPos+"px"}, 1000);
});

谢谢,但现在显然我有一个新问题。我需要在不使用全局变量的情况下从函数计数器中传递pPoscount的值。你有什么想法吗? - Somenath Sinha
1
从计数器返回列表:返回[pPos,counter],并将pPos作为result [0]和count作为result [1]的结果,其中result = counter()。 - Andriy Ivaneyko
先生,最后一个问题,有没有办法消除全局变量hCount、eCount、nCount和mCount? - Somenath Sinha
2
这不是一个简单的问题,请参见http://javascriptissexy.com/understand-javascript-closures-with-ease/文章。 - Andriy Ivaneyko
2
请注意,@SomenathSinha,您的hCount、eCount等不是全局变量。 - Andriy Ivaneyko

3

$(this)只是一个像其他对象一样的对象。只需将其传递到您的函数中:

counter(hCount, $(this));
....

function counter(count, thisFromPreviousFunction)

3
此问题来自以下代码行:var pPos = $(this).css('left');,因为在您的函数中未定义$(this),所以它并不存在。解决方法是定义一个变量来存储所需元素的引用,然后使用该变量来调用css()
$(document).ready(function(){

    var hCount = 0,
        eCount = 0,
        nCount = 0,
        mCount = 0;

  $("#head").click(function() {
    var pPos = counter(hCount, $(this)); // Pass the selector
    $(this).animate({left:pPos+"px"}, 1000);
  });

  function counter(count, selector) {
      count++;
      if(count === 10)  {
          count = 0;
          pPos = 0;
      }
      else {
          var pPos = selector.css('left'); // Use the given selector
          pPos = pPos.substring(0,(pPos.length-2))
          pPos -= 367;
      }
      return pPos;
  }
});

https://jsfiddle.net/yw2b4tyt/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接