如何等待消息框的返回值

时间:2017-03-08 22:40:47

标签: javascript jquery

我有一个调用我的消息框的调用过程并期望返回值:

text = 'do you want?';
buttons = Array('Yes','No','Perhaps');
param = Array(text,buttons);
returnvalue = msg(param);

alert(returnvalue);

这会调用填充消息框的函数。填写后显示消息框。到目前为止它的作用。 但是:它不会等待(显示后)生成并返回所选值。我在哪里以及如何实施回调?

function msg(arr) {
    var text = arr[0];
    var buttons = arr[1];
    $('#modal-text-msg').html(text);
    out = '';
    for (i = 0, len = buttons.length; i < len; i++) {
        console.log(buttons[i]);
        out += '<input type="button"  class="modal-button modal-button-msg" value="'+buttons[i]+'">';
    }
    $('#modal-close-msg').html(out);    
    $('#modal-msg').show();

    $('.modal-close').on('click', '.modal-button-msg', function(e) {
    returnvalue = $(this).val();
    $('#modal-msg').hide();
    return returnvalue;
    }); 
}

1 个答案:

答案 0 :(得分:1)

您需要使用回调函数。 Javascript没有睡眠或等待命令。即使它确实如此,当Javascript不允许继续前进时,也会发生不好的事情。尝试将msg更改为:

function msg(arr, callback) {
    var text = arr[0];
    var buttons = arr[1];
    $('#modal-text-msg').html(text);
    out = '';
    for (i = 0, len = buttons.length; i < len; i++) {
        console.log(buttons[i]);
        out += '<input type="button"  class="modal-button modal-button-msg" value="'+buttons[i]+'">';
    }
    $('#modal-close-msg').html(out);    
    $('#modal-msg').show();

    $('.modal-close').on('click', '.modal-button-msg', function(e) {
        returnvalue = $(this).val();
        $('#modal-msg').hide();
        if (callback instanceof Function) callback(returnvalue);
    }); 
}

没有必要return returnvalue;因为它将它返回到事件处理程序而不是msg的调用者。来电者已经开始了。现在,您可以这样致电msg

msg(param, function(value) {
  alert(value);
});