1

各位下午好。。

我正在尝试在 Javascript 中创建一个函数,该函数会生成一个屏幕对话框,类似于 VB/VBA 中的 msgbox 函数。到目前为止,我已经设法在 Javascript 中编写 msgbox 函数,以便在调用它时动态地在屏幕上创建一个对话框。

它的工作原理是这样的:-

if (msgbox("Do you want to continue", YesNo) == Yes) {
      //Do something here
}

我想知道的是-有什么方法可以暂停/暂停代码中的流程,直到按下动态生成的对话框中的一个按钮?在用户单击我的对话框中的“是”按钮之前,我不希望“在这里做某事”位或任何其他以下代码运行。

(注意:YesNo 和 Yes,在上面的示例中是常量。到目前为止,对话框工作得很好,我只需要弄清楚如何在按下按钮之前停止流动,而不会使事情变得过于复杂)。

4

4 回答 4

2

如果您使用确认框,这应该对您有用 - 它会触发带有 ok/cancel 选项的提示:

    if (confirm("Are you sure you wish to continue?")){
//executed when OK clicked
}
else{
//executed when CANCEL clicked
}

注意工作流在函数中暂停,直到给出答案

于 2012-10-05T15:02:38.760 回答
1

抱歉,我来晚了,但我会执行以下操作(假设只有两种可能的选择,即是或否,并且还假设正在使用模态类型确认框而不是花园品种警报/确认框):

将此变量存储表单添加到您的 html(表单隐藏输入的注意值未列出,因此当前为空值)

<form id="UserSelection" style="display:none"><input type="hidden" name="yes_or_no">    
</form>

然后在模态确认框中添加两个按钮,其中按钮“yes”触发“yes”值,按钮“no”触发表单隐藏输入的“no”值:

<div id="ModalConfirm">
<button type="button" onclick="StoredSelectionVar('yes')">Yes</button>
<button type="button" onclick="StoredSelectionVar('no')">No</button>
</div>

其中函数 StoredSelectionVar() 定义为:

StoredSelectionVar(type) {
    if (type === 'yes') {
        document.forms['UserSelection']['yes_or_no'].value = 'yes';
    } else {
        document.forms['UserSelection']['yes_or_no'].value = 'no';
    }
}

然后按如下方式修改剩余的javascript:

function YesOrNo() {
var x = document.forms['UserSelection']['yes_or_no'].value;
if (!x) {
    window.setTimeout(YesOrNo, 1000);<!--Modify time as desired.....checks form 
    UserSelection to see if a value is present, which implies the user clicked either    
    the yes or no button for the hidden input, or no click if still a null value, in 
    which case the function is called again and the process repeated-->
} else {
    if (x === 'yes') {
        //Do This
    } else {
        //Do that
    }    
}

function yourFunction() {
    if (msgbox("Do you want to continue")) {
        YesOrNo();
    } else {
        //whatever
    }
}
于 2014-03-05T06:21:00.300 回答
0

在 JS 中有alert()prompt()用于这类事情。Alert 用于只需要确认的简单消息,prompt 可以返回一些输入。

于 2012-10-05T15:01:22.377 回答
0

如果您使用的是 HTML 元素,您希望将onclickyes 按钮的属性设置为包含所需操作的函数,或者您可以addEventListener用于现代浏览器。

function doStuff () {
    // do stuff here
}

button.onclick = doStuff;

您应该构建脚本的方式是有一些顶级代码是设置全局变量或顶级函数所必需的,并且在页面加载时执行您希望发生的任何其他事情。然后,您创建函数来对各种用户操作(单击/悬停/击键等)进行回调。没有真正的“暂停”,但您可以推迟函数,以便它们仅在响应用户输入时执行。

如果您想在以模式对话框的方式执行此操作时阻止其他用户操作,则必须通过某个对象的全局变量或属性设置状态,并在执行之前让所有回调检查该状态。这很容易变得复杂,并且可能是更喜欢使用简单confirm提示的原因。

于 2012-10-05T15:05:38.790 回答