首页 > 解决方案 > 在用户取消时显示提示,它得到未捕获的 typeError

问题描述

我已经声明了一个名为 的函数init(),它询问用户游戏大小,由空格分隔。我想在用户不点击时显示提示ok并且像取消一样(显式单击取消或隐式按下esc键盘)。

这是我已经实现的:

function init(){
    let promptMessage = 'تعداد سطرها و ستون‌های جدول را به ترتیب وارد کرده و با فاصله از هم جدا کنید\nمثلا مقدار پیش‌فرض دارای 7 جدول و 6 ستون است';
    let promptDefault = '7 6';
    let prompt = this.prompt(promptMessage, promptDefault);
    if (prompt) {
        prompt = prompt.split(" ")
        console.log(prompt);
        prompt[0] = Number(prompt[0]);
        prompt[1] = Number(prompt[1]);
        return prompt;
    }
    init()
}

var gameSize = init(),
    rows = gameSize[0],
    cols = gameSize[1];

当我测试上面的代码时,单击取消后,它可以正常工作并再次显示提示,但问题是它给了我以下错误。

未捕获的类型错误:无法读取行中未定义的属性“0”rows = gameSize[0]

标签: javascriptprompt

解决方案


当您调用gameSize = init()它时,它会运行 init() 函数,如果用户点击取消,该函数将返回undefined,因为您没有return在该代码路径中声明语句。

然后,当您执行var rows = gameSize[0],gameSizeundefined,会导致您看到的错误。

您需要做的是返回下一次调用的结果init()

function init(){
    let promptMessage = 'تعداد سطرها و ستون‌های جدول را به ترتیب وارد کرده و با فاصله از هم جدا کنید\nمثلا مقدار پیش‌فرض دارای 7 جدول و 6 ستون است';
    let promptDefault = '7 6';
    let prompt = this.prompt(promptMessage, promptDefault);
    if (prompt) {
        prompt = prompt.split(" ")
        console.log(prompt);
        prompt[0] = Number(prompt[0]);
        prompt[1] = Number(prompt[1]);
        return prompt;
    }
    return init();
}

var gameSize = init(),
    rows = gameSize[0],
    cols = gameSize[1];


推荐阅读