2012-11-25 16 views
7

przeglądarka jest chrom (pod ubuntu)document.getElementById() wartość nie ustawić wartość

Jest to fragment kodu: (oczywiście) Te komunikaty alarmowe pokazuje właściwą wartość. ale element points nie otrzymuje poprawnej wartości, w rzeczywistości jest pusty. Czy ktoś może mi powiedzieć, dlaczego?

Oto, jak definiowany jest element points.

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

i tutaj jest to, w jaki sposób kod javascript ma go zapełnić.

alert(request.responseText); 

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

Jak można stwierdzić, że "dostaje puste"? Czym * jest * wartość, którą próbujesz ustawić? Czy zachowuje się tak, jak oczekujesz w innych przeglądarkach (i które inne przeglądarki testowałeś)? – Quentin

+0

Bo widzę to. Kiedy mówię puste, mam na myśli brak wartości w polu wprowadzania. Zawiera 0 na początku, gdy żądanie jest zakończone, zmienia się w puste pole. –

+0

Twoje użycie '.value' jest całkowicie poprawne. Podejrzewam, że problem polega na tym, że 'request.responseText' jest puste. Co oznacza alert? – slashingweapon

Odpowiedz

10

Twoja odpowiedź prawie na pewno jest ciągiem. Musisz upewnić się, że zostanie przekonwertowany na numer:

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

Możesz przyjrzeć się swojej odpowiedzi tekstowej.Wygląda na to, że otrzymujesz ciąg zawierający cytaty. Jeśli otrzymujesz dane JSON za pośrednictwem AJAX, możesz uzyskać bardziej spójne wyniki, uruchamiając je przez JSON.parse().

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

Dziękuję bardzo. Twoja odpowiedź była jasna i pomocna. –

+2

Element najwyższego poziomu struktury JSON musi być tablicą lub obiektem. Stąd "nowy numer (JSON.parse (...)) najprawdopodobniej zwróci' NaN'. –

+0

Dobry punkt na JSON. Jeśli nie jest to tablica lub obiekt, Chrome przynajmniej narzeka. – slashingweapon

1

Jedyny przypadek, mogę sobie wyobrazić to, że uruchomienie tego na WebKit przeglądarce Chrome jak lub Safari i swojej wartości zwracanej w responseText, zawiera wartość ciąg.

W tym constelation wartość nie może zostać wyświetlona (to się puste)

Przykład: http://jsfiddle.net/BmhNL/2/


Chodzi mi o to, że spodziewam się źle/podwójnie zakodowany ciąg znaków. Przeglądarki Webkit są bardziej restrykcyjne na type = number. Jeśli nie ma „tylko” kwestia white-space, można próbować niejawnie wywołanie konstruktora Number(), jak

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

A jak to naprawić? –

+1

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

+2

Twój test jest nieważny. '' '5' "' nie jest prawidłową liczbą. –

0

Problem oczywiście nie jest z javascript. Oto krótki fragment, który pokazuje działanie kodu.

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

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

Jak widać, javascript doskonale nadaje nową wartość do elementu wejściowego. Byłoby pomocne, gdybyś mógł rozwinąć więcej w tej kwestii.

+1

Chociaż twój wniosek jest poprawny, czasami musisz spojrzeć na swoją kryształową kulę, aby dowiedzieć się, co OP może oznaczać :) –

+0

Uwaga, pytający używa 'input type = number'. Używasz 'input type = text' –

+0

Niestety, nie widziałem, aby autor używał" number "jako typu. Edytowane. – Karan

3

Według moich testów z Chrome:

Jeśli ustawisz wejście number do numeru, to działa dobrze.

Jeśli ustawisz wejście number na łańcuch, który zawiera tylko liczbę, to działa poprawnie.

Jeśli ustawisz wejście number na łańcuchu, który zawiera liczbę i odstępy, to puste wejście.

Prawdopodobnie masz spację lub nową linię po danych w odpowiedzi na serwerze, które naprawdę Cię interesują.

Zamiast tego użyj document.getElementById("points").value = parseInt(request.responseText, 10);.

0

Spróbuj użyć,

$('#points').val(request.responseText); 
Powiązane problemy