2

jquery ダイアログを使用して、確認ボックスの置き換えを実装する必要があります。私はこのような呼び出し機能を持っています

function callingFunc() {

 var a = confirmJquery("text", 300, 300, "ok", "cancel"); 

 if (a == true) {
   .....
 }
 else {
   .... 
 }
}

これはconfirmJquery関数です

function confirmJquery(msg, width, height, txtOk, txtCancel) {

    var div = document.createElement('div');
    div.className = "confirmJquery";

    var span = document.createElement('span');
    $(span).html(msg);
    div.appendChild(span);

    var buttonOk = document.createElement('button');
    buttonOk.className = 'buttonStyleBigger';
    $(buttonOk).html(txtOk);

    var buttonCancel = document.createElement('button');
    buttonCancel.className = 'buttonStyleBigger';
    $(buttonCancel).html(txtCancel);

    var divBottom = document.createElement('div');
    divBottom.className = 'dialogAction';

    divBottom.appendChild(buttonOk);
    divBottom.appendChild(buttonCancel);

    div.appendChild(divBottom);

    var dialog = window.parent.$(div).appendTo(window.parent.document.body);

     // open the dialog
    dialog.dialog({
        height: height,
        width: width,
        resizable: false,
        // add a close listener to prevent adding multiple divs to the document
        close: function(event, ui) {
            // remove div with all data and events
            dialog.remove();
        },
        modal: true
    });

    $(buttonOk).bind('click', function(){
        return true;

    });

    $(buttonCancel).bind('click', function() {

        return false;
    });

}

問題は、confirmJquery 関数が常にボタン ([OK] または [キャンセル]) が押される前に終了することです。したがって、呼び出し関数には値がありません。ユーザーがボタンを押して関数が終了し、呼び出し関数の残りの部分が続行されるまで、confirmJquery を待機させる必要があります。どうやってやるの ?

詳細を更新する必要があります。コールバック関数の方法は既に試しました。それは完全に機能します。しかし、人生はそう簡単ではありません。これは非常に大きく、古く、乱雑なシステムです。それを行うには、多くの関数を書き直す必要があるため、javascript の確認関数とまったく同じように機能する関数を作成する必要があります。

4

4 に答える 4

3

関数は非同期になるため、コールバックを使用する必要があります。このようなもの:

function myCallback(result)
{
  if (result) {
    // OK
  } else {
    // Cancel
  }
}

function confirmJquery(msg, width, height, txtOk, txtCancel, callback) {
...
    $(buttonOk).bind('click', function(){
        callback(true);
    });

    $(buttonCancel).bind('click', function() {
        callback(false);
    });
}

confirmJquery(msg, width, height, txtOk, txtCancel, myCallback);
于 2012-04-25T08:03:33.913 に答える
0

まず、受信側の引数の長いリストを回避するために、代わりに引数のオブジェクトを使用できます。次に、コールバックをに送信しますconfirmJquery

function callingFunc() {

    var a = confirmJquery({
        msg:"text", 
        width:300, 
        height:300, 
        txtOk:"ok", 
        txtCancel:"cancel"
    },function(ok){
        if(ok){
            ...
        } else {
            ...
        }
    });
}

function confirmJquery(options,callback) {
    //options.msg
    //options.width
    ...

    $(buttonOk).bind('click', function(){
        callback(true);
    });

    $(buttonCancel).bind('click', function() {
        callback(false);
    });

}
于 2012-04-25T08:04:27.023 に答える
0

関数の残りの部分を別の関数内に移動し、confirmJquery関数の最後でその2番目の関数を実行します。

function firstfunction(){

  // Do Some Stuff

  secondfunction();

}
于 2012-04-25T08:02:35.953 に答える
0

はい、アレクサンダーは正しいです。コードを再編成するだけです。1 つはダイアログ用、もう 1 つはフラグ/メッセージに基づく関数用です。mvc パターンと同じです。

于 2012-04-25T08:08:59.127 に答える