aln*_*fie 7 javascript oop jquery javascript-events
假设我有一个对象,有一些属性和方法:
var Form = {
name: 'sign-up',
show: function() {...},
hide: function() {...},
validate: function() {...},
updateCurrency: function() {...},
handleCheckBox: function() {...}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在我的表单中发生某些事件时调用不同的方法,如下所示:
$('#country-select').bind('change', function() {
Form.updateCurrency();
});
$("input[type='checkbox']").bind('change', function() {
Form.handleCheckBox();
});
Run Code Online (Sandbox Code Playgroud)
我有很多这些事件监听器,坦率地说,我发现它们像这样一个接一个地列出,并没有直接与它们相关的对象联系在一起.有没有更优雅的方法将它们封装在我的对象文字中Form
?有最好的做法吗?
我喜欢@gillesc
回答,它在正确的轨道上.但是,我认为我们可以做得更好.
@gillesc
回答的主要问题是它缺少事物的动态方面(例如事件处理程序),它也强制你定义丑陋的回调函数.
所以我认为你应该如何解决你的问题.
// Test object
var testObj = {
// Our event handlers.
// Notice how we must only define the callback function name here.
// Not the function itself. The callback function must be defined in testObj.
handlers: {
'#form submit': 'onSubmit'
},
// Method that will register all handlers to some selector
registerHandlers: function() {
var that = this;
// Go through the handlers list.
$.each(this.handlers, function(k, v) {
// Parsing the event to two different parts.
// 1. trigger event
// 2. selector
var split = k.split(" "),
el = split[0],
trigger = split[1];
// Delegating the trigger to selector
$(document).delegate(el, trigger, that[v]);
});
},
// Our actual callback function
onSubmit: function(evt) {
evt.preventDefault();
alert("submit");
}
};
Run Code Online (Sandbox Code Playgroud)
它会如何运作?这很简单!我们只需要打电话testObj.registerHandlers()
.
归档时间: |
|
查看次数: |
1621 次 |
最近记录: |