无法检测到用户从window.prompt()按“取消”

时间:2015-10-14 00:47:02

标签: javascript

根据我研究的内容,该功能应该能够检测输入是否为空以及是否按下“取消”。但是,只有前两项工作正常,每当我点击“取消”时,都没有任何反应。

我发布了整个功能代码,但问题在于if-else语句。我已经在IE7,Chrome和Firefox上测试了这个。

JavaScript的:

function countStrings()
{
    var sequence = [];
    sequence = window.prompt( "Enter a sequence of values", "a 1 b 2" ).split( " " );
    if ( sequence[ 0 ] === "" )
    {
        // user pressed OK or Return; input is empty
    }
    else if ( sequence )
    {
        // user pressed OK or Return; input not empty.
    }
    else
    {
        // User pressed Cancel; not being detected/not working.
        // Nothing happens.
    }
}

HTML:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>Practice</title>
    <script type = "text/javaScript" src="./practice.js"></script>
</head>
<body id="beach_ready">
    <h1>Practising JavaScript functions</h1>
    <p>
        <input id="f" type="button" value="Function" onclick="countStrings();" />
        Click to the count number of strings in an array
    </p>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

var sequence=window.prompt();

if (sequence===""){
//then I entered nothing and pressed OK
} else
if (sequence===null){
//then I pressed cancel.
} else {
//then I entered something good. process it
//..rest of your code...
}

回答你的问题: null.split(" ");会导致错误,因为您无法调用null上的任何方法,因为它的null并且不是对象,也没有调用方法。

所以当这一行发生时

sequence = window.prompt( "Enter a sequence of values", "a 1 b 2" ).split( " " );

并且用户按下取消,这将评估为sequence = null.split(" ")并且您的脚本会爆炸。因此,您需要首先获取值,看看它是什么,然后在您确定这样做之前不要调用它。像这样:

var sequence, sequenceInput;
    sequenceInput = window.prompt( "Enter a sequence of values", "a 1 b 2" );
    if ( sequenceInput=== "" )
    {
        // user pressed OK or Return; input is empty
    }
    else if ( sequenceInput===null )
    {
        // user pressed cancel
    }
    else
    {
        //user entered something
        sequence=sequenceInput.split(" ");
    }