не работает только на Firefox - PullRequest
       63

не работает только на Firefox

1 голос
/ 18 декабря 2010

По какой-то причине этот код работает во всех браузерах 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 ]

2 голосов
/ 18 декабря 2010

Это на самом деле не должно работать в любом браузере. В вашем коде Javascript отсутствует закрывающая скобка:

<script type="text/javascript">
function toscheck() {
  if (tos.scrollTop + 540 > tos.scrollHeight) {
    alert(tos.scrollTop + " " + tos.scrollHeight);
  }
}
</script>
0 голосов
/ 18 декабря 2010

Насколько велико ваше фактическое текстовое поле?Может быть, он отображается в другом размере, чем вы ожидаете, и / или высота прокрутки немного отличается?Возможно, это проблема размера шрифта / разрешения / DPI.Чтобы попытаться решить эту проблему, добавьте небольшое перекрывающееся количество, чтобы вам фактически не приходилось переходить к абсолютному дну (не будет работать в IE, например, при использовании навигации по клавиатуре и Ctrl + End).1003 * Кстати, я бы не стал отмечать это в onmousemove, так как люди могли бы использовать клавиши клавиатуры для навигации.Я бы предложил использовать onblur и, возможно, onmouseup и / или onkeyup.onmouseup однако может не сработать, если кнопка мыши отпущена во время нахождения на полосе прокрутки.

0 голосов
/ 18 декабря 2010

Лучшее решение, используйте 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;
    }
0 голосов
/ 18 декабря 2010

Живой пример

Кроме вашего отсутствия }, чтобы закрыть вашу функцию, мне кажется, что он работает в 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>

Или получите текстовое поле из функции следующим образом:

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