2017-03-08 104 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