Javascript:暂停程序流程直到单击按钮

时间:2012-10-05 14:59:56

标签: javascript

下午好下午... ..

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

它的工作原理如下: -

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

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

(注意:YesNo和Yes,在上面的示例中是常量。到目前为止,对话框完美无缺,我只需要知道如何在按下按钮之前停止流动而不会使事情过于复杂。)

4 个答案:

答案 0 :(得分:2)

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

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

注意工作流程在功能中暂停,直到给出答案

答案 1 :(得分:1)

对不起,我有点迟了但我会做以下(假设只有两个可能的选择,即是或否,并且还假设正在使用模态类型确认框而不是花园种类警报/确认框):

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

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

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

<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
    }
}

答案 2 :(得分:0)

JS中有alert()prompt()这类事情。警报是针对只需要确认的简单消息,提示可以返回一些输入。

答案 3 :(得分:0)

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

function doStuff () {
    // do stuff here
}

button.onclick = doStuff;

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

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