【问题标题】:How can you tell when user clicked cancel from a JavaScript prompt() with a default?您如何判断用户何时从 JavaScript prompt() 默认单击取消?
【发布时间】:2013-11-15 19:31:08
【问题描述】:

通常,如果您用prompt 向用户提出如下问题并且用户点击取消,那么prompt 函数将返回null

var name = prompt('What is your name?');
var hitCancel = name === null;

效果很好,除了现在我想在提示中输入默认答案:

var name = prompt('What is your name?', 'Fred');

现在即使用户点击取消,'Fred' 也会被返回!即使用户输入“Smith”并点击取消,“Fred”仍然会被返回!如何判断用户何时点击了取消?

更新:忘了说我已经在 Firefox 和 Chrome 中测试过了。我知道还有其他用于用户输入的库,但在我的特殊情况下,我需要使用 prompt 函数。

更新 2:建议使用“\x00Fred”作为默认值。注意到那里有趣的东西。如果单击取消,则返回“Fred”。但是,如果您只是单击确定,则返回“\x00Fred”。我希望它是相反的方式!因为我不知道是有人写了“Fred”还是点击了取消。

UPDATE 3:我觉得很傻,问题出在我的代码上。 prompt 在点击取消时实际上是在返回 null

【问题讨论】:

  • 存储原始值(以便稍后比较)并且不要使用可接受的值预先填充提示。
  • 您可以尝试提示"\x00Fred" 并检查他们是否更改了字符串
  • @megawac 当然,如果他们碰巧被称为“Fred”并单击“确定”,您将放弃答案。
  • 您也可以只使用不受古代 DOM 函数限制的众多 DHTML 对话框库之一。
  • alert 和朋友是获取用户输入的非常糟糕的方式。

标签: javascript default prompt


【解决方案1】:

也许我遗漏了什么,但对我来说,prompt() 函数总是在取消时返回 null,即使有默认答案。

见小提琴:http://jsfiddle.net/TuzE3/3/

【讨论】:

    【解决方案2】:

    虽然使用提示或警报功能并不是最理想的。这是它的完成方式

    var defaultName = "Fred";
    var name = prompt('What is your name?');
    
    if (!name){
       // this section means they clicked cancel
       name = defaultName;
       // plus do anything else you want in case of cancel.
    }
    

    【讨论】:

      【解决方案3】:

      对于我的测试(Mac 版 Chrome 和 Safari)取消在这种情况下返回空字符串,所以尝试:

      var name = prompt('What is your name?', 'Fred');
      var hitCancel = !(name != "" && name !== null);
      console.log(hitCancel)
      

      演示:http://jsfiddle.net/GK5wq/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-10
        • 2011-01-14
        • 2011-09-02
        • 2014-09-02
        • 1970-01-01
        • 2017-08-16
        • 2013-11-07
        • 1970-01-01
        相关资源
        最近更新 更多