2010-12-17 3 views
1

Aus irgendeinem Grund funktioniert dieser Code alle Chrome, Safari und Ei, aber nicht auf Firefox.<input type = 'textarea' onmousemove = 'toscheck()' /> funktioniert nicht nur unter Firefox

Nichts ist auf FF ausgelöst, funktioniert aber auf allen anderen Browsern.

Allerdings funktioniert <textarea.. onmousemove=alert('test')>text</textarea> funktioniert gut.

Ich bin neu in Javascript, so würde jede Hilfe sehr geschätzt werden.

+2

Ihre Funktion fehlt eine schließende Klammer} –

+0

@Vince es war eigentlich nur schlechte Formatierung. Ich habe es für ihn repariert. – Stephen

Antwort

0

Live example

Anders als Ihre } fehlt Ihre Funktion ist es für mich in FF zu funktionieren scheint zu schließen.

<script type="text/javascript"> 
    function toscheck(){ 
     if(tos.scrollTop+540 > tos.scrollHeight){ 
      alert(tos.scrollTop + " " + tos.scrollHeight); 
     } 
    } // <----- was missing 
</script> 

Auch Sie direkt in Ihrer Funktion zu tos.property gehen.

müssen Sie entweder this in die mousemove="toscheck(this)" passieren und haben Ihre Funktion Setup wie folgt aus:

<script type="text/javascript"> 
    function toscheck(elem){ 
     if(elem.scrollTop+540 > elem.scrollHeight){ 
      alert(elem.scrollTop + " " + elem.scrollHeight); 
     } 
    } 
</script> 

Oder Ihr Textfeld erhalten innerhalb der Funktion wie folgt aus:

<script type="text/javascript"> 
    function toscheck(){ 
     var tos = document.getElementById('tos'); 
     if(tos.scrollTop+540 > tos.scrollHeight){ 
      alert(tos.scrollTop + " " + tos.scrollHeight); 
     } 
    } 
</script> 
+0

Ich schaute auf Ihr Live-Beispiel und sah, dass ich die Funktion benötigt toscheck (tos) {...} und onmousemove = "toscheck (this)" Vielen Dank! – sam

+0

Kein Problem, froh, dass es geholfen hat! – subhaze

2

Das sollte eigentlich in keinem Browser funktionieren. Es gibt einen Schließbügel in Ihrem Javascript-Code fehlt:

<script type="text/javascript"> 
function toscheck() { 
    if (tos.scrollTop + 540 > tos.scrollHeight) { 
    alert(tos.scrollTop + " " + tos.scrollHeight); 
    } 
} 
</script> 
+0

oops, ich habe es falsch kopiert. Das war nicht das Problem. Es tut uns leid. – sam

0

Beste Lösung Verwenden Sie jQuery und es ist automatisch Cross-Browser-Methode oder siehe this page in Bezug auf diesen Code Cross-Browser kompatibel aufgrund von Unterschieden zwischen der Implementierung in re:

Scrolling offset - how much the page has scrolled. 

var x,y; 
if (self.pageYOffset) // all except Explorer 
{ 
    x = self.pageXOffset; 
    y = self.pageYOffset; 
} 
else if (document.documentElement &amp;&amp; document.documentElement.scrollTop) 
    // Explorer 6 Strict 
{ 
    x = document.documentElement.scrollLeft; 
    y = document.documentElement.scrollTop; 
} 
else if (document.body) // all other Explorers 
    { 
     x = document.body.scrollLeft; 
     y = document.body.scrollTop; 
    } 

und

var x,y; 
    var test1 = document.body.scrollHeight; 
    var test2 = document.body.offsetHeight 
    if (test1 &gt; test2) // all but Explorer Mac 
    { 
     x = document.body.scrollWidth; 
     y = document.body.scrollHeight; 
    } 
    else // Explorer Mac; 
     //would also work in Explorer 6 Strict, Mozilla and Safari 
    { 
     x = document.body.offsetWidth; 
     y = document.body.offsetHeight; 
    } 
+0

Ihnen ist bewusst, dass es sich um ein 'textarea' handelt - nicht um ein ganzes Dokument (zum Beispiel in einem 'iframe')? – Mario

+0

richtig, kopierte ich den Code von der Seite, die die Cross-Browser-Probleme mit der Verwendung der plain JS-Methoden diskutiert .. aber ich empfahl zuerst, dass jQuery verwendet werden, da es alle intern behandelt ... das Codebeispiel bezieht sich nur auf die browserübergreifende Unterschiede, nicht der eigentliche Code, der benötigt wird, um zu lernen, wie und warum, ist besser als nur richtigen Code einzufügen. – FatherStorm

0

Wie groß ist Ihr tatsächliches Textfeld? Vielleicht ist es in einer anderen Größe gerendert als erwartet und/oder die Scrollhöhe ist ein bisschen anders? Vielleicht ist es ein Problem Schriftgröße/Auflösung/DPI-Einstellung. Um zu versuchen, es zu lösen, fügen Sie einen kleinen Überlappungsbetrag hinzu, so dass Sie eigentlich nicht zum absoluten Boden scrollen müssen (funktioniert nicht im Internet Explorer, wenn Sie beispielsweise die Tastaturnavigation und Strg + Ende verwenden).

if(tos.scrollTop + 565 > tos.scrollHeight){ 

Auf einer Seite zur Kenntnis, ich würde das nicht in onmousemove überprüfen, wie Menschen Tasten auf der Tastatur verwenden, könnten genauso gut zu navigieren. Ich würde vorschlagen, onblur und vielleicht onmouseup und/oder onkeyup zu verwenden. onmouseup wird jedoch möglicherweise nicht ausgelöst, wenn die Maustaste losgelassen wird, während sie sich in der Bildlaufleiste befindet.

Verwandte Themen