2011-10-26 120 views
0

我試圖創建一個JavaScript類,它打開一個jQuery對話框並允許用戶選擇一個選項,然後在回調中返回選定的值。在JavaScript類中添加回調函數

...類似於jQuery Alert Dialogs如何做。

jPrompt(消息,[值,標題,回調])

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

的什麼我到目前爲止Here is a DEMO。但是,如果你注意到,這個值會被設定爲亞馬遜,我希望它等到用戶點擊確定。如果用戶點擊取消,那麼它應該返回空或空字符串。

這裏是我的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 _dialog,把它像var _callback什麼。然後在你的Choose功能,添加一個參數,以獲得回調函數和存儲,是這樣的:

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

然後,當你準備調用回調函數(我相信這是onButtonOK/onButtonCancel)呼叫回撥功能使用_callback(parameter);