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);
});
}
}
}());
これはクラスではない、それがオブジェクトです! – Raynos
関数はJS内のオブジェクトで、Chooseメソッドにパラメータfを設定し、クロージャにそのパラメータを保持し、コールバックの準備ができたらf()を実行できます。 – Thor84no
@Raynos同じ違いです。 JSには実際のクラスはなく、プロトタイプとオブジェクトだけがあります。 – Thor84no