2017-03-08 6 views
0

の戻り値を待ちます。記入後、メッセージボックスが表示されます。これまでのところ動作します。 BUT:選択した値を生成して返すために待機しません(表示後)。どこでどのようにコールバックを宣言しますか?は、どのように私は私のメッセージボックスを呼び出し、戻り値を期待呼び出し手順を持つメッセージボックス

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

そのイベントハンドラに及びませんmsgの呼び出し元にそれを返していましたので、return returnvalue;する必要はありませんでした。発信者はすでに移動しています。今度はmsgと呼んでください。

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

これはうまくいきます...ありがとう!!!しかし、私がそれを複数回呼び出すと、アラートが増加します。 – ratmalwer

+0

'instanceof'は' callback'が実際に何を保持しているかを確認しています( 'msg(params、6)'を呼び出す場合はエラーになりません)。あなたは何回 "何"呼んでいますか? –

+0

私はページ上に複数のボタンがあり、ユーザーがクリックして何をすべきかを尋ねられると言うことができます。今私はそれのいくつかを押して、より多くの警告を得る... – ratmalwer

関連する問題