<input type =“textarea”onmousemove =“toscheck()”/>仅适用于Firefox

时间:2010-12-17 22:13:49

标签: firefox textarea onmousemove javascript

出于某种原因,此代码适用于所有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 个答案:

答案 0 :(得分:2)

这实际上不适用于任何浏览器。您的Javascript代码中缺少一个结束括号:

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

答案 1 :(得分:0)

Live example

除了您遗失的}关闭您的功能外,它似乎适用于我。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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