Il linguaggio JavaScript
 

Problema javascript su ipad/iphone, codice in errore

Gristian 31 Ott 2015 07:47
Scusate è la prima volta che mi cimento in una versione mobile di un
piccolo sito (personale, non sono un pro) e mi sono imbattuto in un
errore che non so cosa sia.

Praticamente da Ipad e Iphone, qualunque browser usi, ho una procedura
che mi va in errore.

Il problema è che non so quale sia.

Questo è il mio codice:

*************************************************************

//Recupero i numeri assegnati sino ad ora
var Ord_elenco = [];
$("#elenco span.label").each(function() {
var contenuto = parseInt($(this).text());
if (!isNaN(contenuto)) {
Ord_elenco.push(contenuto);
}
});

var numItems = $('#elenco i.fa-refresh').length;

var Ord_elenco_ordinato = Ord_elenco.sort();

alert('Ord_elenco_ordinato: '+Ord_elenco_ordinato); //alert NUM 1

var numero = $("td[name=User_" + Codice + "").children('span');

alert('numero non json: '+numero); //alert NUM 2

alert('numero: '+JSON.stringify(numero)); //alert NUM 2


var i;
var spazio = false;
if (Ord_elenco_ordinato.length > 1) {
for (i = 1; i <= Ord_elenco_ordinato.length; i++) {
var differenza = Ord_elenco_ordinato[i + 1] -
Ord_elenco_ordinato[i];
if (differenza != 1) {
numero.text(Ord_elenco_ordinato[i] + 1);
spazio = true;
break;
}
}
}

if (spazio === false && $.inArray(numItems, Ord_elenco) === -1) {
numero.text(numItems);
}

}


******************************************************************************


Ho debbugato da ipad a colpi di alert (c'è un metodo più efficace?) e
l'ho fatto passo passo. Qui sopra ho lasciato gli alert più significativi.

L'alert NUM 1 restituisce il giusto valore ma poi la procedura non
esegue l'alert NUM 2 e di qui i guai.


Cos'è che ipad/iphone non digeriscono?
C'è qualche linea guida che sarebbe bene seguisse per evitare errori in
futuro?

Grazie in anticipo.
Alessandro Pellizzari 31 Ott 2015 08:45
Il Sat, 31 Oct 2015 07:47:38 +0100, Gristian ha scritto:

> //Recupero i numeri assegnati sino ad ora var Ord_elenco = [];
> $("#elenco span.label").each(function() {
> var contenuto = parseInt($(this).text());

Usa sempre la base quando fai parseInt: parseInt($(this).text(), 10)

> var numero = $("td[name=User_" + Codice + "").children('span');
>
> alert('numero non json: '+numero); //alert NUM 2
>
> alert('numero: '+JSON.stringify(numero)); //alert NUM 2

"numero" è un oggetto jQuery, una collection che include tutti gli span
dentro quel td.
Cosa ti aspetti che ti stampi?

> for (i = 1; i <= Ord_elenco_ordinato.length; i++) {
> var differenza = Ord_elenco_ordinato[i + 1] -
> Ord_elenco_ordinato[i];

Gli indici di elenco ordinato vanno da 0 a length-1, mentre tu stai
ciclando da 1 a length+1.
Mi stupisce che in altri browser non ti dia errori...

Ti conviene estrapolare quel ciclo in una funzione e scriverci sopra un
po' di unit-test, quindi rivederla tutta.

> Ho debbugato da ipad a colpi di alert (c'è un metodo più efficace?) e

Si iPad non ho idea. Su Android puoi usare i remote debugging tools di
Chrome (e credo anche Firefox li abbia adesso).

Bye.
Gristian 31 Ott 2015 09:03
Grazie Alessandro,
ti confermo che su tutti gli altri browser (Chrome, FF, IE + Android)
non ho problemi.

>> var numero = $("td[name=User_" + Codice + "").children('span');
>>
>> alert('numero non json: '+numero); //alert NUM 2
>>
>> alert('numero: '+JSON.stringify(numero)); //alert NUM 3
>
> "numero" è un oggetto jQuery, una collection che include tutti gli span
> dentro quel td.
> Cosa ti aspetti che ti stampi?

Qualsiasi altro browser, in quel punto, mi stampa:
alert NUM 2: 'numero non json: [object][object];
alert NUM 3: 'numero: ' tutti i dati dell'oggetto numero.


Su Ipad e Iphone non viene stampato ne l'alert NUM 2 ne l'alert NUM 3,
non compaiono proprio gli alert.

Per quello che avviene dopo seguirò certamente il tuo consiglio ma che
posso provare per superare questo blocco?






Il 31/10/2015 08.45, Alessandro Pellizzari ha scritto:
> Il Sat, 31 Oct 2015 07:47:38 +0100, Gristian ha scritto:
>
>> //Recupero i numeri assegnati sino ad ora var Ord_elenco = [];
>> $("#elenco span.label").each(function() {
>> var contenuto = parseInt($(this).text());
>
> Usa sempre la base quando fai parseInt: parseInt($(this).text(), 10)
>
>> var numero = $("td[name=User_" + Codice + "").children('span');
>>
>> alert('numero non json: '+numero); //alert NUM 2
>>
>> alert('numero: '+JSON.stringify(numero)); //alert NUM 2
>
> "numero" è un oggetto jQuery, una collection che include tutti gli span
> dentro quel td.
> Cosa ti aspetti che ti stampi?
>
>> for (i = 1; i <= Ord_elenco_ordinato.length; i++) {
>> var differenza = Ord_elenco_ordinato[i + 1] -
>> Ord_elenco_ordinato[i];
>
> Gli indici di elenco ordinato vanno da 0 a length-1, mentre tu stai
> ciclando da 1 a length+1.
> Mi stupisce che in altri browser non ti dia errori...
>
> Ti conviene estrapolare quel ciclo in una funzione e scriverci sopra un
> po' di unit-test, quindi rivederla tutta.
>
>> Ho debbugato da ipad a colpi di alert (c'è un metodo più efficace?) e
>
> Si iPad non ho idea. Su Android puoi usare i remote debugging tools di
> Chrome (e credo anche Firefox li abbia adesso).
>
> Bye.
>
Gristian 31 Ott 2015 09:15
Aggiungo una info, che a quanto letto su Google potrebbe essere importante.

Lo span che vado a cercare tramite

var numero = $("td[name=User_" + Codice + "").children('span');

è aggiunto all'elemento TD, dinamicamente, da codice precedente a quello
scritto.

Quindi è uno span aggiunto dopo che il DOM è stato caricato (spero di
non aver scritto castronerei).

Ripeto che sia da browser desktop che device android il problema non
sussiste.





Il 31/10/2015 08.45, Alessandro Pellizzari ha scritto:
> Il Sat, 31 Oct 2015 07:47:38 +0100, Gristian ha scritto:
>
>> //Recupero i numeri assegnati sino ad ora var Ord_elenco = [];
>> $("#elenco span.label").each(function() {
>> var contenuto = parseInt($(this).text());
>
> Usa sempre la base quando fai parseInt: parseInt($(this).text(), 10)
>
>> var numero = $("td[name=User_" + Codice + "").children('span');
>>
>> alert('numero non json: '+numero); //alert NUM 2
>>
>> alert('numero: '+JSON.stringify(numero)); //alert NUM 2
>
> "numero" è un oggetto jQuery, una collection che include tutti gli span
> dentro quel td.
> Cosa ti aspetti che ti stampi?
>
>> for (i = 1; i <= Ord_elenco_ordinato.length; i++) {
>> var differenza = Ord_elenco_ordinato[i + 1] -
>> Ord_elenco_ordinato[i];
>
> Gli indici di elenco ordinato vanno da 0 a length-1, mentre tu stai
> ciclando da 1 a length+1.
> Mi stupisce che in altri browser non ti dia errori...
>
> Ti conviene estrapolare quel ciclo in una funzione e scriverci sopra un
> po' di unit-test, quindi rivederla tutta.
>
>> Ho debbugato da ipad a colpi di alert (c'è un metodo più efficace?) e
>
> Si iPad non ho idea. Su Android puoi usare i remote debugging tools di
> Chrome (e credo anche Firefox li abbia adesso).
>
> Bye.
>
Gristian 31 Ott 2015 09:57
Allora... sono un pirla. :(

Il primo errore "grave" sta qua:

var numero = $("td[name=User_" + Codice + "").children('span');

manca la chiusura ] del tag TD. :(

Nessun browser testato me l'ha segnalato, assurdo. :(

Ora lavoro sul ciclo come mi ha segnalato.

Grazie




Il 31/10/2015 08.45, Alessandro Pellizzari ha scritto:
> Il Sat, 31 Oct 2015 07:47:38 +0100, Gristian ha scritto:
>
>> //Recupero i numeri assegnati sino ad ora var Ord_elenco = [];
>> $("#elenco span.label").each(function() {
>> var contenuto = parseInt($(this).text());
>
> Usa sempre la base quando fai parseInt: parseInt($(this).text(), 10)
>
>> var numero = $("td[name=User_" + Codice + "").children('span');
>>
>> alert('numero non json: '+numero); //alert NUM 2
>>
>> alert('numero: '+JSON.stringify(numero)); //alert NUM 2
>
> "numero" è un oggetto jQuery, una collection che include tutti gli span
> dentro quel td.
> Cosa ti aspetti che ti stampi?
>
>> for (i = 1; i <= Ord_elenco_ordinato.length; i++) {
>> var differenza = Ord_elenco_ordinato[i + 1] -
>> Ord_elenco_ordinato[i];
>
> Gli indici di elenco ordinato vanno da 0 a length-1, mentre tu stai
> ciclando da 1 a length+1.
> Mi stupisce che in altri browser non ti dia errori...
>
> Ti conviene estrapolare quel ciclo in una funzione e scriverci sopra un
> po' di unit-test, quindi rivederla tutta.
>
>> Ho debbugato da ipad a colpi di alert (c'è un metodo più efficace?) e
>
> Si iPad non ho idea. Su Android puoi usare i remote debugging tools di
> Chrome (e credo anche Firefox li abbia adesso).
>
> Bye.
>

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio JavaScript | Tutti i gruppi | it.comp.lang.javascript | Notizie e discussioni javascript | Javascript Mobile | Servizio di consultazione news.