2013-12-12 15 views
6

Cách phát hiện giá trị trống khi người dùng nhấn ok trên lời nhắc (và trước đó làm trống trường nhắc)? Tôi cần ghi đè giá trị cũ bằng giá trị mới (trống). Tôi đang thực hiện việc này:Phát hiện giá trị trống trên lời nhắc

var oldVal = 'something'; 
var newVal = prompt("Enter new value:", oldVal); 

Hiện tại nó trả về giá trị rỗng nếu người dùng làm trống giá trị và nhấp chuột ok.

Nhưng đồng thời tôi cần phải kiểm tra giá trị null vì nếu người dùng nhấp vào 'hủy', nó sẽ trả về giá trị rỗng, mà tôi không muốn làm giá trị mới.

+3

'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. –

Trả lời

13

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.

+0

Nhưng tôi cần phải có điều này trong tuyên bố của tôi: if (! NewVal || oldVal == newVal) trả về false; vì vậy tôi cần kiểm tra null. Và nếu người dùng làm trống trường nhắc, sau đó nhấn ok, null sẽ được trả về. – Toniq

+0

@Toniq - bạn dường như không hiểu rằng '! NewVal' cũng sẽ khớp với một chuỗi rỗng, do đó bạn không phân biệt giữa' null' (nút hủy) và chuỗi rỗng (nút ok). Tôi đã thêm mã vào câu trả lời của tôi sẽ cho bạn biết cách làm những gì bạn đã hỏi. – jfriend00

+0

Cảm ơn, nó hoạt động ngay bây giờ! – Toniq

2

Trong hầu hết các lời nhắc của trình duyệt sẽ trả về null nếu người dùng nhấn hủy, nhưng trong một số (Safari, ví dụ) trả về chuỗi rỗng. Nếu người dùng nhập một số văn bản và nhấn ok, lời nhắc sẽ trả về văn bản đã nhập, nếu người dùng nhấn ok mà không nhập văn bản, nó sẽ trả về chuỗi rỗng.

1

Một Bit cũ, nhưng nó có thể là đáng giá để chỉ đơn giản bao gồm một thử nghiệm cho chiều dài của chuỗi trong cùng if() tuyên bố

if(newVal !=null & newVal.length>0){ 

Kiểm tra cho cả Hủy bỏ và một mục rỗng.

+0

Bạn đã thử nghiệm điều này chưa? Nên có '&&', không phải nhị phân '&' (mặc dù tôi không chắc chắn nếu '&' cũng hoạt động ở đây) – YakovL

0
<html> 
<body>  
<p>Click the button to demonstrate the prompt box.</p>  
<button onclick="myFunction()">Try it</button>  
<p id="demo"></p>  
<script> 
function myFunction() { 
    var answer=prompt('Reason for deletion?'); 
    var n = answer.length; 
    if(n > 5) 
    { 
    document.getElementById("demo").innerHTML = 
    "Hello " + answer + "! How are you today?"; 
    } 
    else if(n == 0) 
    { 
    myFunction() 
    } 
} 
</script>  
</body> 
</html> 
+0

Vui lòng cung cấp giải thích cũng như – bc004346

+0

Bạn có thể kiểm tra giá trị null trong hộp nhắc ... nếu hộp nhắc trả lại một giá trị rỗng, sau đó nó trở về cùng chức năng ... – sebastian

0

đơn giản để xem nếu cả hai hoặc hủy ok với chuỗi rỗng

function valueIsSet(value) 
{ 
    return (value && value !== "") 
} 

// example: 

var name; 
while (!valueIsSet(name) { 
    name = prompt("Please enter your name"); 
} 

alert("Welcome " + name); 
Các vấn đề liên quan