(function($) {
// ウィジェット定義
$.widget('test.myWidget', {
// デフォルト設定
options: {
content: 'hoge'
},
// 初期化処理として自動的に呼び出される
_init: function() {
this._update();
},
// プライベートメソッド
_update: function() {
var opts = this.options;
var elm = this.element;
elm.html(opts.content);
},
// パブリックメソッド
setContent: function(str) {
this.options.content = str;
this._update();
}
});
delegate = function(func,ctx){
return function(){ return func.apply(ctx,arguments); };
};
$.widget('forms.textField', {
options: {
fields: []
},
_init: function() {
},
validate: function(){
this.message = "hello;"
return false;
},
getMessage: function(){
return this.message;
}
});
$.widget('forms.form', {
options: {
fields: []
},
_init: function() {
this.element.submit(delegate(this._onsubmit,this));
},
_onsubmit : function(){
this.messages = [];
var valid = true;
var length = this.options.fields.length;
for(var i = 0;i < length;i++){
var field = $(this.options.fields[i]);
if(!$(field).textField("validate")){
this.messages.push(field.textField("getMessage"));
valid = false;
}
}
if(!valid){
var m = "";
for(var i = 0;i < this.messages.length;i++){
$("#myWidget").append(this.messages[i]);
m += this.messages[i];
}
return false;
}
return true;
},
// パブリックメソッド
setContent: function(str) {
this.options.content = str;
this._update();
},
});
})(jQuery);
// DOM構築完了後
$(function() {
// オプションを上書きして呼び出し
$("#myWidget").myWidget({
content: 'fuga',
onUpdate: function() {
alert('更新されました')
}
});
$("#form1").form({
fields: [
$("#text1").textField(),
$("#text12").textField(),
$("#text13").textField(),
]
});
})