2016-08-05 2 views
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

Я понятия не имею, что вызывает эту ошибку.

Также, как я могу передать функцию counter() значение $(this) в $("#head").click? Я не могу прямо упоминать $("#head"), потому что я повторю эту функцию с большим количеством div, кроме #head, при повторном использовании кода в счетчике функций.

+0

Пожалуйста, не спрашивайте несколько вопросов. Спросите одного или другого – Liam

ответ

6

Просто продлить функцию счетчика с elem аргумента и передать его в обработку щелчка:

function counter(count, elem){ 
    // ... 
} 

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

Спасибо, но теперь, видимо, у меня возникла новая проблема. Мне нужно передать значение «pPos» и «count» из счетчика функций без использования глобальных переменных. Любые идеи о том, что можно сделать? –

+1

Список возвратов из счетчика: return [pPos, counter] и получить pPos в качестве результата [0] и считать результат [1], где result = counter() –

+0

Последний вопрос, сэр .. Есть ли способ устранить глобальные переменные hCount, eCount, nCount и mCount? –

3

$(this) это просто объект, как и любой другой. Просто передайте его в функцию:

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

function counter(count, thisFromPreviousFunction) 
3

Uncaught TypeError: Cannot read property 'defaultView' of undefined

Это происходит от линии var pPos = $(this).css('left');

в $(this) не определен в функции (функция не связана с селектором, так $ (это) не существует, как вы думаете).

$(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/

 Смежные вопросы

  • Нет связанных вопросов^_^