检测提示中的空值

15

当用户按下提示框的“确定”按钮(且事先清空了提示框字段)时,如何检测一个空值?我需要用新的(空)值覆盖旧值。我正在这样做:

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

如果用户清空值并点击“确定”,当前代码返回null。

但同时,我需要检查null值,因为如果用户点击“取消”,它也会返回null,而这不是我想要的新值。


3
当输入为空并按下“确定”时,prompt 函数不会返回 NULL,而是返回空字符串。 - user142162
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 将是一个空字符串""!newValtrue,因此您将返回 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


但我需要在我的语句中加入这个:if(!newVal || oldVal == newVal)return false; 所以我需要检查是否为空。如果用户清空提示字段,然后按下确定,将返回null。 - Toniq
@Toniq - 你似乎没有理解!newVal也会匹配一个空字符串,因此你没有区分null(取消按钮)和空字符串(确定按钮)。我在我的答案中添加了代码,将向你展示如何实现你所要求的功能。 - jfriend00
@DomVinyard - 到底哪里不起作用了?在哪个演示中您看到了什么按钮和字段的值是多少? - jfriend00

3

虽然有点老,但是在同一个if()语句中加入字符串长度的测试可能是值得的。

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

检查取消和空输入两个条件。


1
你测试过这个吗?应该使用&&,而不是二进制的&(虽然我不确定在这里使用&是否也可以)。 - YakovL

2

在大多数浏览器中,如果用户按下取消,prompt将返回null,但在某些浏览器中(例如Safari),它会返回空字符串。如果用户输入了一些文本并按下ok,则prompt将返回输入的文本;如果用户在没有输入文本的情况下按下了ok,则它将返回空字符串。


0

简单判断两者是否都为空或空字符串

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

// example:

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

alert("Welcome " + name);

0
当用户在不输入任何值的情况下点击“确定”按钮时,它会返回NaN,您可以通过isNaN()函数进行检查。

0

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

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

看起来可能是有效的,但很可能会导致问题或小错误,因为用户可以只输入两个空格或空白字符来绕过您的代码,这是我的解决方案

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

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>

请仅返回已翻译的文本,不要解释 - Renats Stozkovs
您可以在提示框中检查空值...如果提示框返回空值,则返回到同一函数... - sebastian

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/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接