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ます。

に渡し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>
于 2010-12-17T22:24:06.557 に答える
0

最善の解決策は、jQueryを使用すると、自動的にクロスブラウザーメソッドになるか、次の実装の違いにより、そのコードをクロスブラウザー互換にする方法についてこのページを参照してください。

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ちなみに、キーボードのキーを使ってナビゲートする人もいるので、これはチェックインしません。onblurと多分onmouseupおよび/またはを使用することをお勧めしonkeyupます。onmouseupただし、スクロールバー上でマウスボタンを離した場合は起動しない場合があります。

于 2010-12-17T22:37:07.753 に答える