Newsgroup: it.comp.lang.javascript
Titolo: FireFox, Scroll dei Div e JavaScript

Ciao a tutti...
Premessa:
Come molti di voi sapranno c'č un bug in Firefox 1.0.x che impedisce lo 
scroll dei div "overflow:auto" con la rotellina del mouse.
Qui ho trovato una soluzione interessante ed anche funzionante: 
http://snipurl.com/gs1y-DIVScr
Trascrivo il codice:
 <html>
  <head>
    <title>Mozilla bug #9728 workaround v.2</title>
    <style type="text/css">
      div {
        width: 200px;
        height: 100px;
        overflow: auto;
        border: solid 1px black;
      }
    </style>
    <script type="text/javascript">
      function fixScroll(div) {
        var s = div.scrollTop;
        div.childNodes[1].focus();
        div.scrollTop = s;
      }
    </script>
  </head>
  <body>
    <div onmouseover="fixScroll(this);">
      <a></a>
      Long text Long text Long text Long text Long text Long text Long text 
Long text
      Long text Long text Long text Long text Long text Long text Long text 
Long text
      Long text Long text Long text Long text Long text Long text Long text 
Long text
      Long text Long text Long text Long text Long text Long text Long text 
Long text
      Long text Long text Long text Long text Long text Long text Long text 
Long text
      Long text Long text Long text Long text Long text Long text Long text 
Long text
    </div>
  </body>
</html>
Il fatto:
Bene, ora arrivano i guai per me... provando ad incollare il codice sopra in 
un nuovo file html tutto ok, funziona. Se invece provo ad implementarlo 
nella mie pagine... non va :(
L'errore che mi viene restituito dalla console javascript č che "focus() is 
not a function"...
Riporto una parte semplificata della struttura della pagina:
...
<div id="Corpo">
 <div id="Sx"></div>
 <div id="Centro" onMouseOver="fixScroll(this);">
    Testo con vari tag ed altri div (senza id)
  </div>
 <div id="Dx"></div>
</div>
...
Poi con i css descrivo la struttura dei div (in pratica si adattano alla 
larghezza del browser in modo dinamico).
se ad esempio dal javascript commento la riga div.childNodes[1].focus(); e 
lo "sistemo" cosě:
function fixScroll(div) {
        var s = div.scrollTop;
        //div.childNodes[1].focus();
        div.scrollTop = s+50;
      }
Ogni volta che muovo il mouse sopra al div "Centro" mi scrolla verso il 
basso da solo (e anche correttamente direi).
Il problema č proprio il focus, in quanto se al suo posto metto di cambiare 
il background (attraverso lo style), me lo cambia senza errori...
Mi sapete aiutare a risolvere questo tedioso problema? :(
Grazie mille :) 

Il problema potrebbe essere dovuto al fatto che non hai riportato il
tag A vuoto che era presente nel markup originale. Puoi provare con
qualcosa del tipo:
 <div id="Corpo">
 <div id="Sx"></div>
 <div id="Centro" onMouseOver="fixScroll(this);">
    <a></a>
    Testo con vari tag ed altri div (senza id)
  </div>
 <div id="Dx"></div>
</div>
In generale quando hai dei problemi di questo tipo puoi esaminare le
proprietà dell'oggetto "incriminato".  Ad esempio:
var node = div.childNodes[1];
alert("nodo: " + node.nodeName + ", focus: " + typeof node.focus);
Gaetano

Gaetano Bigliardi wrote:
[cuttotutto]
Avevo già scritto tutta una pappardella sul come e il perchè non funzionava, 
quando mi è preso un dubbio... ho sostituito l'1 con lo 0 e... FUNZIONA! :D
Avevi proprio ragione! Il problema era dovuto ai tag <a></a> che non avevo 
messo!
Non so come ringraziarti! Finalmente mi scrolla la pagina anche con firefox 
:)
Grazie ancora,
Ciao :)
PS prima con il childNodes[1] il focus mi veniva restituito come "undefined" 
e il nodeName come #text. Senza i tag <a></a> nodeName DIV e focus niente; 
ora invece nodeName DIV e focus function. :)