Nó không trả lại null
nếu người dùng nhấn OK - nó sẽ trả về một chuỗi rỗng. Có thể bạn không thử nghiệm giá trị trả lại đúng cách. Nếu bạn muốn kiểm tra giữa ba trạng thái khác nhau trở lại, bạn có thể làm điều đó như thế này:
var oldVal = 'something';
var newVal = prompt("Enter new value:", oldVal);
if (newVal === "") {
// user pressed OK, but the input field was empty
} else if (newVal) {
// user typed something and hit OK
} else {
// user hit cancel
}
bản demo làm việc: http://jsfiddle.net/jfriend00/Kx2EK/
bình luận của bạn cho thấy rằng bạn đang sử dụng mã này để kiểm tra kết quả:
if(!newVal || oldVal == newVal)return false;
Khi người dùng xóa trường và nhấn OK, newVal sẽ là ""
(một chuỗi trống). !newVal
sẽ là true
để bạn sẽ trả lại false
. Chuỗi trống là giá trị falsey giống như null
. Bạn cần phải kiểm tra một cách rõ ràng hơn cho null
như thế này:
if (newVal === null || newVal === oldVal) {
// cancel button was hit
// or the same value was entered
return false;
}
demo của logic này làm việc: http://jsfiddle.net/jfriend00/ynwBx/
Lưu ý: Tôi đang sử dụng ===
để ngăn chặn việc thông dịch javascript từ làm bất kỳ đúc kiểu như tôi muốn chỉ kiểm tra rõ ràng null
.
'prompt' không trả lại NULL khi đầu vào là trống rỗng và OK được nhấn; nó trả về chuỗi rỗng. –