Newsgroup: it.comp.lang.javascript
Titolo: Firefox & this.

Ho il seguente codice (che funge in IE ) :
function chiamata(){
   <%CODICE JAVA%>
    // ERRORE in Firefox se non tolgo this.
   if (this.myarray.sel<%=x%>.checked) {
      ....
   }
}
function funzione(f) {
    if (!chiamata()) {  return false; }
    // Questo this. in firefox funziona
    if (this.myarray.sel<%=x%>.checked){
    ......
    }
}
per farlo girare con firefox devo rimuovere  il primo this, 
mentre il secondo posso tralasciarlo. 
Perche' ? 
-- 
Ciao FleX
________________________________________________
Chi sa ascoltare non solo e' simpatico a tutti ,
ma prima o poi finisce con l'imparare qualcosa

 per farlo girare con firefox devo rimuovere  il primo this, 
a naso perché é anonima? this è l'oggetto che la ha scatenata, te cosa ti
aspettavi? this=function funzione ?
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 
chiamata() e funzione() sono metodi di un oggetto?
se sì, funzione() deve chiamare this.chiamata() invece che chiamata() (o 
utilizzare il nome con cui è inserita nel protipo) altrimenti this punta a window
LP

 utilizzare il nome con cui è inserita nel protipo) altrimenti this punta a window
purtroppo la cosa non cambia.


 aspettavi? this=function funzione ?
effettivamente regge, ma allora perche' il IE la pensa in maniera diversa ?
Faccio tutte queste domande perche' devo migrare una web application che
attualmente gira solo su IE su altri browser.


 effettivamente regge, ma allora perche' il IE la pensa in maniera diversa ?
beh, IE "fa quel cazzo che gli pare, come nella casa della libertà" (cit.)
:-)
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 :-)
Come darti torto, di sicuro non voglio perder tempo a imparare gli
"standard" M$.
Non sono stato io a scrivere il codice, ma dovro' essere io a renderlo
compatibile.
Grazie per il tuo aiuto e per quello di Luca Pascali.


 
Sparo, ma se funzione riceve this (cioè l'oggetto DOM del form),
function chiamata(){
    <%CODICE JAVA%>
     // ERRORE in Firefox se non tolgo this.
    if (this.myarray.sel<%=x%>.checked) {
       ....
    }
}
function funzione(f) {
     if (!chiamata()) {  return false; }
     // Questo this. in firefox funziona
     if (this.myarray.sel<%=x%>.checked){
     ......
     }
}
queste sono cannate.
Primo perchè this in entrambi i casi punta a window, secondo perché ti passi un 
oggetto (f per funzione) che punta al form e non lo utilizzi (almeno nel codice 
postato).
Potrebbe essere
function chiamata(objForm) {
   <%CODICE JAVA%>
   if (objForm.sel<%=x%>.checked) {
      ///QUALCOSA
   }
   //non dimenticarti il return anche in questo caso: fondamentale
}
e
function funzione(objForm) {
   if (!chiamata(objForm)) { return false; }
   //ecc.
   //non dimenticarti il return anche in questo caso: fondamentale
}
oppure, se per ogni elemento di selezione fai le stesse operazioni
function chiamata(objSel) {
   <%CODICE JAVA%>
   if (objSel.checked) {
      ///QUALCOSA
   }
   //non dimenticarti il return anche in questo caso: fondamentale
}
function funzione(objForm) {
   //Ripetere per tutte le checkbox
   if (!chiamata(objForm.sel<%=x%>)) return false;
   //non dimenticarti il return anche in questo caso: fondamentale
}
A naso, senza conoscere altro, così dovrebbe funzionare sia per IE che per FF
Suggerimento: le variabili f j i k l sono semplici da scrivere, ma non 
documentano il codice. Scegli dei nomi più esplicativi, un po' più lunghi (6 
caratteri o più, senza arrivare a 20 o più, naturalmente).
In questo modo, sia quando scrivi codice, sia quando lo rileggi, sai a cosa 
serve ogni variabile/funzione e ti accorgi se stai facendo qualche cavolata.
Luca