2012-11-25 18 views
7

Browser è il cromo (sotto ubuntu)document.getElementById() valore non impostato il valore

Questo è un pezzo di codice: (ovviamente) I messaggi di avviso indica il giusto valore. ma l'elemento punti non ottiene il valore corretto, in realtà diventa vuoto. Qualcuno può dirmi perché?

Ecco come viene definito l'elemento dei punti.

<input type='number' id='points' value='0'/> 

ed ecco come si suppone che il codice javascript lo compili.

alert(request.responseText); 

document.getElementById("points").value=request.responseText; 
+1

Come si determina che essa "si svuota"? Quale * è * il valore che stai cercando di impostare? Si comporta come ci si aspetta da altri browser (e da quali altri browser è stato testato)? – Quentin

+0

Perché lo vedo. Quando dico vuoto, non intendo alcun valore nella casella di input. Contiene 0 all'avvio, quando la richiesta è terminata, si trasforma in campo vuoto. –

+0

L'uso di '.value' è perfettamente valido. Sospetto che il problema è che 'request.responseText' è vuoto. Cosa dice l'avviso? – slashingweapon

risposta

10

La tua risposta è quasi certamente una stringa. Devi assicurarti che venga convertito in un numero:

document.getElementById("points").value= new Number(request.responseText); 

Puoi dare un'occhiata più da vicino alla tua risposta.Sembra che tu stia ricevendo una stringa che contiene citazioni. Se ricevi dati JSON tramite AJAX, potresti ottenere risultati più coerenti eseguendoli tramite JSON.parse().

document.getElementById("points").value= new Number(JSON.parse(request.responseText)); 
+0

Grazie mille. La tua risposta è stata chiara e utile. –

+2

L'elemento di livello superiore di una struttura JSON deve essere un array o un oggetto. Quindi 'new Number (JSON.parse (...))' molto probabilmente restituire 'NaN'. –

+0

Buon punto sul JSON. Se non si tratta di un array o di un oggetto, Chrome almeno si lamenta. – slashingweapon

1

L'unico caso potevo immaginare è che si esegue questo su un webkit browser come Chrome o Safari e il tuo valore di ritorno in responseText, contiene un valore di stringa .

In che constelation, il valore non può essere visualizzato (sarebbe ottenere vuoto)

Esempio: http://jsfiddle.net/BmhNL/2/


Il mio punto qui è, che mi aspetto un valore stringa sbagliata/doppia codifica. I browser Webkit sono più rigidi su type = number. Se non v'è "solo" un problema di spazio bianco, si può provare a chiamare implicitamente il costruttore Number(), come

document.getElementById("points").value = +request.responseText; 
+0

E come posso risolvere questo problema? –

+1

'document.getElementById (" points "). Value = new Number (request.responseText);' – slashingweapon

+2

Il test non è valido. '" '5' "' non è un numero valido. –

0

Il problema non è chiaramente con il javascript. Ecco un breve snippet per mostrare il funzionamento del codice.

document.getElementById('points').value = 100; 

http://jsfiddle.net/eqTm2/1/

Come si può vedere, il javascript assegna alla perfezione il nuovo valore per l'elemento di input. Sarebbe utile se potessi approfondire la questione.

+1

Sebbene la tua conclusione sia corretta, a volte devi guardare la sfera di cristallo per capire cosa potrebbe significare OP :) –

+0

Nota il richiedente usa 'input type = number'. Si usa 'input type = text' –

+0

Spiacente, non ho visto che l'autore abbia usato" number "come tipo. Modificato. – Karan

3

Secondo le mie prove con Chrome:

Se si imposta un ingresso number ad un numero, quindi funziona benissimo.

Se si imposta un input number su una stringa che non contiene nient'altro che un numero, quindi funziona correttamente.

Se si imposta un input number in una stringa che contiene un numero e alcuni spazi bianchi, allora l'elemento viene oscurato.

Probabilmente hai uno spazio o una nuova riga dopo i dati nella risposta del server che ti interessano veramente.

Utilizzare invece document.getElementById("points").value = parseInt(request.responseText, 10);.

0

Provare a utilizzare,

$('#points').val(request.responseText); 
Problemi correlati