1

出于某种原因,此代码适用于所有 chrome、safari 和 ei,但不适用于 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 的新手,所以任何帮助将不胜感激。

4

4 回答 4

2

这实际上不应该在任何浏览器中工作。您的 Javascript 代码中缺少右括号:

<script type="text/javascript">
function toscheck() {
  if (tos.scrollTop + 540 > tos.scrollHeight) {
    alert(tos.scrollTop + " " + tos.scrollHeight);
  }
}
</script>
于 2010-12-17T22:18:31.447 回答
0

活生生的例子

除了你}想关闭你的功能之外,它似乎对我来说在 FF 中工作。

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

此外,在您的功能中,您可以直接转到tos.property.

您要么需要传递thismousemove="toscheck(this)"并进行函数设置,如下所示:

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

或者从这样的函数中获取您的文本区域:

<script type="text/javascript">
    function toscheck(){
        var tos = document.getElementById('tos');
        if(tos.scrollTop+540 > tos.scrollHeight){
            alert(tos.scrollTop + " " + tos.scrollHeight);
        }
    }
</script>
于 2010-12-17T22:24:06.557 回答
0

最好的解决方案,使用 jQuery,它是自动跨浏览器的方法,或者看到这个页面关于使代码跨浏览器兼容,因为 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;
    }

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;
    }
于 2010-12-17T22:37:06.660 回答
0

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

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

在旁注中,我不会检查这一点,onmousemove因为人们也可能使用键盘键进行导航。我建议使用onblurand 也许onmouseup和/或onkeyup. onmouseup但是,如果在滚动条上释放鼠标按钮,则可能不会触发。

于 2010-12-17T22:37:07.753 回答