【问题标题】:Is it possible to extend prompt() object in JAVASCRIPT是否可以在 JAVASCRIPT 中扩展 prompt() 对象
【发布时间】:2011-03-30 12:32:18
【问题描述】:

为了确保问题更清楚,

我想在 JAVASCRIPT 中重新实现提示对象,因为我想同时从用户那里获取两个变量。

如果可以扩展、重新实现或覆盖此对象,请告诉我如何。如果没有,您有更好的解决方案吗?

谢谢。

【问题讨论】:

  • 不,创建你自己的对话框:)

标签: javascript prompt


【解决方案1】:

你应该使用类似http://jqueryui.com/demos/dialog/#modal-form的东西

你需要在你有对话框的地方分割你的javascript

如果你有

function getAndUseUserInfo() {
   bla1();
   bla2();
   var x = prompt("Gimme something for bla 3","");
   if (x) bla3(x); // this will not be executed until user closes prompt
}

你现在需要

function getUserInfo() {
  bla1();
  bla2();
  var x = "";
  $( "#dialog-form" ).dialog({
    autoOpen: false,
    height: 300,
    width: 350,
    modal: true,
    buttons: { 
      "OK": function() { x = $("#someIdFromtheForm").val(); $(this).dialog("close");}
      "CANCEL": function() { $(this).dialog("close");}
    }
    close: function() {
      if (x) bla3(x);
    }
  });
}

或者,如果您坚持要覆盖内置函数,您可以执行以下操作(由于我没有使用 html 页面,因此目前会出错):

  var orgPrompt = window.prompt;
  var varone, vartwo;
  function saveVars(doc) {
    varone = doc.getElementById("x").value;
    vartwo = doc.getElementById("y").value
    return [varone,vartwo];
  }
  window.prompt=function(one,two) {
    var html = '<center><br><br>'+one+':<input type=text id=x><br>'+two+':<input type=text id=y><br><input type=button value=OK onclick=\'window.returnValue=window.dialogArguments.saveVars(document);window.close()\'/>';
    var res = showModalDialog('javascript:"'+html+'"',window,"dialogWidth:100px;dialogHeight:100px");
  }
  x = prompt('first name','last name')
  alert(x)

【讨论】:

  • 这应该如何工作? window.prompt 与 jQuer UI 有什么关系?我认为覆盖window.prompt不是一个好主意。
  • 窗口提示太大,我可以修复它吗?如果可以怎么办?
  • 完美 :) 如果你说我如何删除地址行,我会很感激
  • @Exculuber:除非您使用 jQuery 对话框或类似工具,否则不可能。对不起
  • 我已尝试按照您的建议使用 Jquery-ui 对话框。但是,它不会暂停 javascript,但此解决方案会暂停。如何让对话框暂停和恢复 javascript 代码,直到用户做出反应。
【解决方案2】:

您可以让它们使用分隔符分隔两个不同的值。

var result = prompt('enter two values seperated by a comma').split(',');
alert('first value: ' + result[0]);
alert('second value: ' + result[1]);

DEMO

【讨论】:

  • 谢谢,但这会影响可用性,因此我不喜欢这个
【解决方案3】:

您可以在 javascript 中重新定义大部分内容,包括窗口提示、警报和确认方法,但最好定义方法并调用 it 而不是原生对象。例如,定义 'prompter'、'alerter' 或 'confirmer' 方法。

【讨论】:

  • 我真的不明白 能不能给个重新定义的例子提示一下
猜你喜欢
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2020-12-22
  • 2018-08-16
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多