当用户在提示符下按下ok时(以前清空提示字段),如何检测空值?我需要用new(空)值覆盖旧值。我这样做:
var oldVal = 'something';
var newVal = prompt("Enter new value:", oldVal);
目前,如果用户清空值并单击“确定”,则返回null。
但同时我需要检查空值,因为如果用户单击“取消”,它将返回null,我不想将其作为新值。
答案 0 :(得分:14)
如果用户点击OK,它不返回null
- 它将返回一个空字符串。您可能没有正确测试返回值。如果要在三种不同的返回状态之间进行测试,可以这样做:
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
}
工作演示:http://jsfiddle.net/jfriend00/Kx2EK/
您的评论表明您正在使用此代码来测试结果:
if(!newVal || oldVal == newVal)return false;
当用户清除该字段并按OK时,newVal将为""
(空字符串)。 !newVal
将true
,因此您将返回false
。空字符串是一个假值,就像null
一样。您需要更明确地检查null
,如下所示:
if (newVal === null || newVal === oldVal) {
// cancel button was hit
// or the same value was entered
return false;
}
此逻辑的工作演示:http://jsfiddle.net/jfriend00/ynwBx/
注意:我正在使用===
来防止javascript解释器执行任何类型转换,因为我只想显式检查null
。
答案 1 :(得分:2)
在大多数浏览器中,如果用户按下取消,则提示将返回null
,但在某些情况下(Safari,例如),它将返回空字符串。如果用户输入一些文本并按下确定,提示将返回输入的文本,如果用户按下确定而不输入文本,则返回空字符串。
答案 2 :(得分:1)
有点旧,但在同一个if()语句中简单地包含字符串长度的测试可能是值得的
if(newVal !=null & newVal.length>0){
检查取消和空条目。
答案 3 :(得分: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>
答案 4 :(得分:0)
很容易看到是否取消或使用空字符串
function valueIsSet(value)
{
return (value && value !== "")
}
// example:
var name;
while (!valueIsSet(name) {
name = prompt("Please enter your name");
}
alert("Welcome " + name);
答案 5 :(得分:0)
我看到其他注释似乎可以解决您的问题,但我认为这可能不是最好的答案或解决方案,这是您的代码
if (newVal == "") {
//action
}
这似乎可行,但可能会导致问题或小错误,因为用户可以键入两个空格或空格来绕过您的代码,这是我的解决方法
If (newVal.trim() == "") {
//action
}