Newsgroup: it.comp.lang.javascript
Titolo: Errore solo rimuovendo elementi in array con IE

Ciao a tutti
ho un semplice (almeno lo credevo) problema
aggiungere o togliere a un array un elemento
IE 8 mi da errore qui:
Array.prototype.rimuoviElemento= function(el) {
	this.splice(this.indexOf(el), 1);
};
Uso jquery ma credo non cambi la facenda.
nell'head ho
<script language="javascript">
Array.prototype.rimuoviElemento= function(el) {
	this.splice(this.indexOf(el), 1);
};
var listaSelezionati=[110,120,158,136,169];
function selezionaGiorno(dt,op){
var dat=dt;
var esito=componiListaSelezionati(dat,op);
if(esito==1){
	$("#g"+dt).css("border","2px dashed #FF0000");
}
else if(esito==-1){
	$("#g"+dt).css("border","");
}
}
</script>
poi nel body
<table width="290" border="0" align="center" cellpadding="0" 
cellspacing="0" class="calendario">
<thead>
</thead>
<tbody>
<tr>
<td class="tdSemplice"  style="background:#f1f1f1;">&nbsp;</td>
<td class="tdSemplice"  style="background:#f1f1f1;">&nbsp;</td>
<td class="tdSemplice"  style="background:#f1f1f1;">&nbsp;</td>
<td class="giornoCal    " id="g20120301"><a 
href="javascript:selezionaGiorno(20120301,1)">01</a></td>
<td class="giornoCal    " id="g20120302"><a 
href="javascript:selezionaGiorno(20120302,1)">02</a></td>
<td class="giornoCal    " id="g20120303"><a 
href="javascript:selezionaGiorno(20120303,1)">03</a></td>
<td class="giornoCal  giornoFestivo   giornoCalSelezionato  " 
id="g20120304"><a href="javascript:selezionaGiorno(20120304,1)">04</a></td>
</tr>
</tbody>
</table>
in pratica il senso e' quello di aggiungere o rimuovere un elemento 
dall'array con un clic e per far vedere se e' stato aggiungo ne modifico 
il bordo tramite jQuery.
Il problema e' solo nel togliere con IE, con FF tutto OK...
dove sbaglio ?

 dove sbaglio ?
Nell'uso del metodo "indexOf", che in IE si ha dalla versione 9 in 
"standard document mode".
Vedi:
http://msdn.microsoft.com/en-us/library/ff679977%28v=VS.94%29.aspx
Quando venne aggiunto in JavaScript Mozilla suggerì un'implementazione 
per compatibilità:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf


Grazie per la risposta.
Quindi non esiste niente per rimuovere un elemento da un array che sia 
compatibile con almeno IE 7 in poi ?
cappero... !

 cappero... !
Prego per la risposta, ma... leggila!
A parte gli scherzi, forse non sono stato chiaro io, ma nel link al sito 
mozilla.org
 che ti ho segnalato c'è tutto quel che ti serve già bello e 
pronto.
Il tuo problema non è il rimuovere un elemento, ma trovarlo.
Quando Mozilla implementò il metodo "indexOf" per gli array suggerì 
anche un'implementazione alternativa in semplice JavaScript da usare con 
i browser che non erano ancora al passo.

 browser che non erano ancora al passo.
in questo momento la pagina segnala errore e non posso verificare, ma 
quando la ho guardata velocemente ieri c'era "qualcosa di strano" ... 
sicuro che il metodo alternativo proposto funzioni con IE? (ripeto: la ho 
vista ieri velocemente e in questo momento segnala errore e non posso 
rivederla)

> in questo momento la pagina segnala errore e non posso verificare
ok, ora funziona.
"use scrict"
throw new TypeError;
Queste due secondo me non funzionano con IE.

 Queste due secondo me non funzionano con IE.
La riga con "use strict" non è comunque un errore di sintassi, anche se 
un browser non sa come interpretarla, e la sua assenza non influisce sul 
funzionamento dello script.
Sono invece ragionevolmente sicuro che IE supporti il TypeError anche in 
versioni vecchie, anzi lo darei proprio per certo.
Ad ogni modo rilanciando un banale "Error" al suo posto si evita ogni 
tipo di incompatibilità.

 versioni vecchie, anzi lo darei proprio per certo.
Fino a IE7 sono abbastanza certo che JScript supporti unicamente Error.
Sono in dubbio per i successivi, mi par di rammentare che gli altri
errori vennero implementati da IE8, ma non vorrei sbagliarmi.
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 errori vennero implementati da IE8, ma non vorrei sbagliarmi.
Ho avuto tempo solo per un *velocissimo* test e per una altrettanto 
veloce ricerca su web.
Nella sezione di msdn riguardante lo scripting su IE9 non si ha traccia 
di TypeError, SyntaxError, ecc. che sappiamo che ci sono... e infatti ci 
sono, ma non sono menzionati come costruttori: vengono fuori quando si 
esplora la proprietà name dell'oggetto Error. Vedi:
http://msdn.microsoft.com/en-us/library/96s4ewf9%28v=VS.94%29.aspx
Copio / incollo dai requirements:
Supported in the following document modes: Quirks, Internet Explorer 6 
standards, Internet Explorer 7 standards, Internet Explorer 8 standards, 
Internet Explorer 9 standards.
Ho poi visto tra i risultati di google questa tabella (di tempi pre 
firefox, per intenderci) dove si sostiene che è presente da IE5 / 
JScript 5.5:
http://www.aptana.com/reference/html/api/TypeError.html
JScript 5.5 venne fuori con IE5.0? Non son sicuro. Ora non ricordo proprio.
Ho quindi lanciato win7 con ie9, aperto gli strumenti di sviluppo, e 
provato a rilanciare un TypeError nelle varie modalità (la più "bassa" è 
IE7) e tutto funziona.
Per controprova ho usato anche un "JSON.stringify", che so che è stato 
introdotto dopo, e in effetti in modalità IE7 mi ha dato errore.
Già che avevo win aperto ho ripescato un vecchio chm con la 
documentazione di windows scripting: anche qui i vari errori non vengono 
menzionati come costruttori, ma visitando la proprietà name come nella 
msdn attuale. Requirements: JScript 5.5.
Ora chiudo win e torno a lavorare, che è meglio.

 
http://msdn.microsoft.com/en-us/library/96s4ewf9%28v=VS.94%29.aspx
Sono abbastanza certo che IE6/7 su XP non ha modo di creare eccezioni
tramite operatore new di errori come SyntaxError, ReferenceError,
TypeError, etc. Ma non avendo più a disposizione i computer aziendali
non posso verificare.
