2011-10-26 10 views
0

jQueryダイアログを開き、ユーザーがオプションを選択してコールバックで選択した値を返すことを可能にするjavascriptクラスを作成しようとしています。JavaScriptクラスのコールバック機能を追加する

... jQuery Alert Dialogsと同じように。私は今まで持っているものの

jPrompt(メッセージ、[値、タイトル、コールバック])

jPrompt('Type something:', 'Prefilled value', 'Prompt Dialog', function(r) { 
    if(r) alert('You entered ' + r); 
}); 

Here is a DEMO。しかし、気づいたら、値は即座に設定され、ユーザーが[OK]をクリックするまで待つ必要があります。ユーザーが「キャンセル」をクリックすると、nullまたは空の文字列が返されます。

は、ここに私のJavascriptのクラスです:

var namespace = {}; 
(namespace.myChooser = function() { 
    var _dialog = null; 
    /** 
    * Function : onButtonCancel 
    */ 
    function onButtonCancel() { 
     _dialog.dialog("close"); 
     return null; 
    } 
    /** 
    * Function : onButtonOK 
    */ 
    function onButtonOK() { 
     _dialog.dialog("close"); 
    } 
    /** 
    * Function : Initialize 
    */ 
    function Init() { 
     var dialog_options = { 
      modal: false, 
      disabled: false, 
      resizable: false, 
      autoOpen: false, 
      //height: 460, 
      maxHeight: 300, 
      zIndex: 500, 
      stack: true, 
      title: 'My Chooser', 
      buttons: { "OK": onButtonOK, "Cancel": onButtonCancel } 
     }; 
     _dialog = $("#myDialog"); 
     // create dialog. 
     _dialog.dialog(dialog_options); 
     _dialog.dialog("open"); 
    } 

    return { 
     Choose: function Choose() { 
      Init(); 
      var myChoice = $("#myOptions").val(); 
      return myChoice; 
     } 
    } 
}()); 

と私はこのような何かを行うことができるようにしたい:

namespace.myChooser.Choose(function (myChoice) { 
     $("span#myChoice").text(myChoice); 
    }); 

SOLUTION: をこれが最終的にそれをやったことです:

$(document).ready(function() { 

    $('#myButton').click(function() { 
     namespace.myChooser.Choose(function (x) { 
      console.log(x); 
     }); 
    }); 

}); 

var namespace = {}; 
(namespace.myChooser = function (callback) { 
    function _show(callback) { 
      var dialog_options = { 
       modal: false, 
       disabled: false, 
       resizable: false, 
       autoOpen: false, 
       //height: 460, 
       maxHeight: 300, 
       zIndex: 500, 
       stack: true, 
       title: 'My Chooser', 
       buttons: { 
        "OK": function() { 
         if (callback) callback("OK"); 
        }, 
        "Cancel": function() { 
         if (callback) callback("Cancel"); 
        } 
       } 
      }; 
      _dialog = $("#myDialog"); 
      // create dialog. 
      _dialog.dialog(dialog_options); 
      _dialog.dialog("open"); 
    } 

    return { 
     Choose: function (callback) { 
      _show(function (result){ 
       if (callback) callback(result); 
      }); 
     } 
    } 
}()); 
+0

これはクラスではない、それがオブジェクトです! – Raynos

+0

関数はJS内のオブジェクトで、Chooseメソッドにパラメータfを設定し、クロージャにそのパラメータを保持し、コールバックの準備ができたらf()を実行できます。 – Thor84no

+0

@Raynos同じ違いです。 JSには実際のクラスはなく、プロトタイプとオブジェクトだけがあります。 – Thor84no

答えて

1
Choose: function Choose(cb) { 
    Init(); 
    var myChoice = $("#myOptions").val(); 
    return cb(myChoice); 
} 

あなたは

+0

申し訳ありませんが、動作していません:/。私は同じ結果を得る。私が望むのは、ユーザが値を選択した後に値が表示された後です。 – capdragon

+0

コメントに記載されているように関数参照をオブジェクトに格納し、準備ができたら呼び出します。 – Thor84no

+0

@ Thor84no:あなたが話していることの例を投稿して回答してください。私はあなたが言っていることを描くことができません。 – capdragon

1

var _callbackのようなもの、それを呼び出し、あなたはvar _dialogを持っている別の変数を追加したいものを行う必要があります。次に、あなたのChoose機能では、何かのように、コールバック関数を取得し、それを保存するためのパラメータを追加します。あなたはコールバック関数を呼び出す準備ができたら、次に

Choose: function Choose(f) { 
    _callback = f; 
    ... 
} 

、(私はこれがonButtonOK/onButtonCancelであると推定します)コールバック関数を呼び出す_callback(parameter);

関連する問題