2017-03-08 73 views
0

的返回值我有叫我的消息框,并期望一个返回值调用过程:如何等待一个消息

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

您需要使用回调函数。 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); 
}); 
+0

Ogbum这工作正常......谢谢!但是,如果我多次调用它会增加警报......这是因为instanceof ??? – ratmalwer

+0

'instanceof'只是确保我们知道'callback'实际上是什么(如果你要调用'msg(params,6)'',这不会引发错误。你多次拨打什么“它”? –

+0

可以说我在我的页面上有多个按钮,用户可以点击并询问该怎么做。现在我按下其中的一部分,并得到更多的警报... – ratmalwer