2016-08-05 52 views
3

Mein Code ist:

$(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; 
} 

ich einen Fehler unter Angabe

Uncaught TypeError: Cannot read property 'defaultView' of undefined

Ich habe keine Ahnung, was diesen Fehler verursacht. Wie kann ich die Funktion counter() den Wert $(this) in $("#head").click übergeben? Ich kann nicht direkt $("#head") erwähnen, weil ich diese Funktionalität mit mehr Divs wiederholen werde, außer #head, während ich den Code im Funktionszähler wiederverwende.

+0

Bitte fragen Sie nicht mehrere Fragen. Frag den einen oder anderen – Liam

Antwort

6

Nur Zählerfunktion mit elem Argument erweitern und innerhalb Klick Handhabung passieren:

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

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

Danke, aber jetzt habe ich anscheinend ein neues Problem. Ich muss den Wert von "pPos" und "count" vom Funktionszähler ohne die Verwendung von globalen Variablen übergeben. Irgendwelche Ideen darüber, was getan werden könnte? –

+1

Rücksende-Liste von Zähler: zurück [pPos, Zähler], und erhalten pPos als Ergebnis [0] und zählen als Ergebnis [1], wo result = counter() –

+0

Eine letzte Frage, Herr .. Gibt es eine Möglichkeit, die ich beseitigen könnte die globalen Variablen hCount, eCount, nCount und mCount? –

3

$(this) ist nur ein Objekt wie jedes andere. Ihn einfach in Ihre Funktion:

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

function counter(count, thisFromPreviousFunction) 
3

Uncaught TypeError: Cannot read property 'defaultView' of undefined

Die von der Leitung kommt var pPos = $(this).css('left');

als $(this) nicht in Ihrer Funktion (die Funktion verwandt ist nicht auf einen Selektor definiert ist, so $ (this) existiert nicht, wie Sie denken).

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