2012-11-25 29 views
7

Browser là crom (dưới ubuntu)document.getElementById() giá trị không thiết lập giá trị

Đây là một đoạn mã: (tất nhiên) Các thông điệp cảnh báo cho thấy giá trị đúng. nhưng điểm yếu tố không nhận được giá trị phù hợp, nó thực sự bị trống. Ai có thể cho tôi biết tại sao?

Dưới đây là cách xác định phần tử điểm.

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

và đây là cách mã javascript được cho là phổ biến nó.

alert(request.responseText); 

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

Làm thế nào để bạn xác định rằng nó "bị trống rỗng"? * Giá trị gì bạn đang cố gắng đặt? Ứng dụng có hoạt động như bạn mong đợi trong các trình duyệt khác không (và bạn đã kiểm tra trình duyệt nào khác)? – Quentin

+0

Vì tôi thấy nó. Khi tôi nói trống, tôi có nghĩa là không có giá trị trong hộp đầu vào. Nó chứa 0 lúc bắt đầu, khi yêu cầu được thực hiện, nó chuyển sang trường trống. –

+0

Việc bạn sử dụng '.value' là hoàn toàn hợp lệ. Tôi nghi ngờ vấn đề là 'request.responseText' trống. Cảnh báo nói gì? – slashingweapon

Trả lời

10

Phản hồi của bạn gần như chắc chắn là một chuỗi. Bạn cần đảm bảo rằng nó được chuyển đổi thành một số:

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

Bạn có thể xem kỹ hơn về responseText của mình.Có vẻ như bạn đang nhận được một chuỗi chứa dấu ngoặc kép. Nếu bạn đang nhận dữ liệu JSON qua AJAX, bạn có thể có nhiều kết quả nhất quán hơn chạy qua JSON.parse().

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

Cảm ơn bạn rất nhiều. Câu trả lời của bạn rõ ràng và hữu ích. –

+2

Phần tử cấp cao nhất của cấu trúc JSON phải là mảng hoặc đối tượng. Do đó 'số mới (JSON.parse (...))' rất có thể sẽ trả về 'NaN'. –

+0

Điểm tốt trên JSON. Nếu nó không phải là một mảng hoặc đối tượng, Chrome ít nhất là phàn nàn. – slashingweapon

1

Trường hợp duy nhất mà tôi có thể tưởng tượng là, mà bạn chạy trên một webkit trình duyệt như Chrome hoặc Safari và giá trị trả về của bạn trong responseText, chứa một giá trị chuỗi.

Trong constelation rằng, giá trị có thể không được hiển thị (nó sẽ nhận được trống)

Ví dụ: http://jsfiddle.net/BmhNL/2/


Quan điểm của tôi ở đây là, mà tôi mong đợi một sai/giá trị chuỗi kép mã hóa. Trình duyệt webkit nghiêm ngặt hơn trên type = number. Nếu có "chỉ" là một vấn đề trắng-không gian, bạn có thể thử mặc nhiên gọi constructor Number(), như

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

Và làm thế nào để tôi sửa lỗi này? –

+1

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

+2

Bài kiểm tra của bạn không hợp lệ. '" '5' "' không phải là số hợp lệ. –

0

Vấn đề rõ ràng là không phải với javascript. Dưới đây là một đoạn trích nhanh để cho bạn biết cách làm việc của mã.

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

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

Như bạn có thể thấy, javascript hoàn hảo gán các giá trị mới cho các yếu tố đầu vào. Sẽ rất hữu ích nếu bạn có thể giải thích thêm về vấn đề này.

+1

Mặc dù kết luận của bạn là chính xác, đôi khi bạn phải xem xét quả cầu pha lê của mình để tìm hiểu ý nghĩa của OP: –

+0

Lưu ý người hỏi sử dụng 'kiểu đầu vào = số'. Bạn sử dụng 'kiểu đầu vào = văn bản' –

+0

Xin lỗi, tôi không thấy tác giả đã sử dụng" số "làm loại. Đã chỉnh sửa. – Karan

3

Theo thử nghiệm của tôi với Chrome:

Nếu bạn đặt một đầu vào number đến một số, sau đó nó hoạt động tốt.

Nếu bạn đặt đầu vào number cho Chuỗi không chứa gì ngoài số, thì số đó hoạt động tốt.

Nếu bạn đặt một đầu vào number cho một Chuỗi có chứa một số và một số khoảng trắng, thì nó sẽ điền vào đầu vào.

Bạn có thể có một khoảng trống hoặc một dòng mới sau khi dữ liệu trong phản hồi của máy chủ mà bạn thực sự quan tâm.

Sử dụng document.getElementById("points").value = parseInt(request.responseText, 10); để thay thế.

0

Thử sử dụng,

$('#points').val(request.responseText); 
Các vấn đề liên quan