2010-12-17 86 views
1

由于某些原因,此代码可用于所有chrome,safari和ei,但不适用于Firefox。<input type ='textarea'onmousemove ='toscheck()'/>不适用于Firefox

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

---------- 

    <textarea name="tos" id="tos" readonly="readonly" onmousemove="toscheck()">text</textarea> 

没有在FF上触发,但在所有其他浏览器上都正常工作。

但是,<textarea.. onmousemove=alert('test')>text</textarea>工作正常。

我是JavaScript新手,所以任何帮助将不胜感激。

+2

你的函数缺少一个右括号} – 2010-12-17 22:19:05

+0

@Vince它实际上只是不好的格式。我为他修好了。 – Stephen 2010-12-17 22:23:54

回答

0

Live example

比你丢失的}收出您的功能似乎在FF工作对我来说其他。

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

而且,在你的函数你直接去tos.property

你要么需要通过this进入mousemove="toscheck(this)",有你的功能设置是这样的:

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

或者从这样的函数中得到你的textarea:

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

我看着你的生活的例子,看到我需要功能toscheck(tos){...} 和 onmousemove =“toscheck(this)” 感谢一堆! – sam 2010-12-17 22:41:57

+0

没有概率,很高兴它帮助! – subhaze 2010-12-17 22:45:07

2

这应该实际上不适用于任何浏览器。有一个右括号在JavaScript代码丢失:

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

哎呀,我把它复制错了。这不是问题。抱歉。 – sam 2010-12-17 22:22:33

0

最佳解决方案,使用jQuery并且它是​​自动跨浏览器的方法,或者参见this page关于使代码跨浏览器兼容,这是由于实现之间的差异造成的:

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

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

你知道我们正在讨论一个'textarea' - 不是一个完整的文档(例如在iframe中)? – Mario 2010-12-17 22:38:48

+0

对,我从页面中使用普通的JS方法讨论了跨浏览器问题的代码复制,但我首先建议使用jQuery,因为它处理所有内部代码示例仅涉及跨浏览器的差异,而不是实际需要的代码,因为学习如何以及为什么比只是放入正确的代码更好。 – FatherStorm 2010-12-17 23:01:46

0

你有多大的实际文本框?也许它的渲染尺寸与您预期的不同,或者scrollheight有点不同?也许这是一个字体大小/分辨率/ DPI设置问题。要尝试解决它,请添加一个小的重叠量,以便实际不必滚动到绝对底部(例如,在使用键盘导航和Ctrl + End时,在IE中不起作用)。

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

在一个侧面说明,我不会onmousemove选中此项,因为人们可以使用键盘上的键导航以及。我建议使用onblur,也许onmouseup和/或onkeyup。但是,如果在滚动条上释放鼠标按钮,则可能不会触发。

相关问题