提示检测到空值

问题描述 投票:0回答:8

当用户在提示上按“确定”(并且之前清空提示字段)时,如何检测空值?我需要用新的(空)值覆盖旧值。我正在这样做:

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

目前,如果用户清空值并单击“确定”,它会返回 null。

但同时我需要检查空值,因为如果用户单击“取消”,它将返回空值,我不希望将其作为新值。

javascript prompt
8个回答
29
投票

如果用户点击“确定”,它不会返回

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;

当用户清除该字段并按“确定”时,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


3
投票

有点旧,但在同一个 if() 语句中简单地包含对字符串长度的测试可能是值得的

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

检查取消和空条目。


2
投票

在大多数浏览器中,如果用户按下取消,提示将返回

null
,但在某些浏览器中(例如 Safari),它会返回空字符串。如果用户输入一些文本并按确定,提示将返回输入的文本,如果用户按确定而不输入文本,它将返回空字符串。


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
投票

简单地查看是否取消或使用空字符串确定

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

// example:

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

alert("Welcome " + name);

0
投票

我看到其他评论似乎解决了您的问题,但我认为这可能不是最好的答案或解决方案,这里是您的代码

if (newVal == "") {
//action
}

这似乎可行,但可能会导致问题或小错误,即用户只需键入两个空格或空格即可绕过您的代码,这是我的解决方案

If (newVal.trim() == "") {
 //action
}

0
投票

当用户点击“确定”而不输入任何值时,它将返回 NaN,您可以通过 isNaN() 函数检查它。


0
投票
// this is TRUE, when user presses Cancel / ESC
window.prompt('Type whatever', '') === null

// this is TRUE, when presses Enter and value is empty
// note that it will be FALSE if canceled or if "0" is entered
window.prompt('Type whatever', '') == ''

在这里试试: https://jsfiddle.net/L5zrdeq9/

© www.soinside.com 2019 - 2024. All rights reserved.