Javascript 如何组合类似的事件处理程序?
我有两组几乎相同的事件处理程序。有没有办法将它们结合起来,使代码更加枯燥 这个.E.name只是指向DOM元素的指针/引用 请注意,我的ID与不适用的可能重复的事件类型不同Javascript 如何组合类似的事件处理程序?,javascript,jquery,Javascript,Jquery,我有两组几乎相同的事件处理程序。有没有办法将它们结合起来,使代码更加枯燥 这个.E.name只是指向DOM元素的指针/引用 请注意,我的ID与不适用的可能重复的事件类型不同 /*set 1 */ $(this.E.main).on("click", function () { Page.flip('main'); }); $(this.E.feed).on("click", function () { Page.flip('
/*set 1
*/
$(this.E.main).on("click", function () {
Page.flip('main');
});
$(this.E.feed).on("click", function () {
Page.flip('feed');
});
$(this.E.so_button).on("click", function () {
Backbone.trigger('user_sign_out');
Pane.flip();
Page.flip();
Storage.clear();
});
/* set 2
*/
$(this.E.main_nav).on("click", function () {
Page.flip('main');
});
$(this.E.feed_nav).on("click", function () {
Page.flip('feed');
});
$(this.E.so_button_nav).on("click", function () {
Backbone.trigger('user_sign_out');
Pane.flip();
Page.flip();
Storage.clear();
});
您可以使用逗号、分隔符和方括号[]组合多个选择器,并使用$this引用当前单击的对象:
$([this.E.main, this.E.feed, this.E.main_nav, this.E.feed_nav]).on("click", function () {
Page.flip($(this).attr('name'));
});
$([this.E.so_button, this.E.so_button_nav]).on("click", function () {
Backbone.trigger('user_sign_out');
Pane.flip();
Page.flip();
Storage.clear();
});
希望这有帮助。您可以使用逗号、分隔符和方括号[]组合多个选择器,并使用$this引用当前单击的对象:
$([this.E.main, this.E.feed, this.E.main_nav, this.E.feed_nav]).on("click", function () {
Page.flip($(this).attr('name'));
});
$([this.E.so_button, this.E.so_button_nav]).on("click", function () {
Backbone.trigger('user_sign_out');
Pane.flip();
Page.flip();
Storage.clear();
});
希望这会有所帮助。您可能会变得更加棘手,只需在对象上迭代即可
var valid = ['main', 'feed', 'so_button']; // in case there are other props in object
$.each(this.E, function(key, value) {
if ( valid.indexOf(key) !== -1 || valid.indexOf(key + '_nav') !== -1 ) {
$(this.E[key]).on('click', function() {
if ( key.indexOf('so_button') !== -1 ) {
Backbone.trigger('user_sign_out');
Pane.flip();
Page.flip();
Storage.clear();
} else {
Page.flip(key)
}
});
}
});
您可能会更加棘手,只需在对象上迭代即可
var valid = ['main', 'feed', 'so_button']; // in case there are other props in object
$.each(this.E, function(key, value) {
if ( valid.indexOf(key) !== -1 || valid.indexOf(key + '_nav') !== -1 ) {
$(this.E[key]).on('click', function() {
if ( key.indexOf('so_button') !== -1 ) {
Backbone.trigger('user_sign_out');
Pane.flip();
Page.flip();
Storage.clear();
} else {
Page.flip(key)
}
});
}
});
试试这个
var mainId = "#" + this.E.main.id;
var mainNavId = "#" + this.E.main_nav.id;
$(mainId + "," + mainNavId ).on("click", function () {
Page.flip('main');
});
试试这个
var mainId = "#" + this.E.main.id;
var mainNavId = "#" + this.E.main_nav.id;
$(mainId + "," + mainNavId ).on("click", function () {
Page.flip('main');
});
您可以创建一个实用javascript函数/对象,该函数/对象在事件中为您的每个例程都有一个方法。一个班轮仍然是一个班轮,4个班轮将成为一个班轮。您并没有大幅减少代码量,但维护会更好,未来的可维护性也会更好,尤其是在一行程序中添加更多逻辑时。您可以创建一个实用javascript函数/对象,该函数/对象在事件中为您的每一个例程提供一个方法。一个班轮仍然是一个班轮,4个班轮将成为一个班轮。您并没有大幅减少代码量,但维护会更好,未来的可维护性也会更好,尤其是在一行程序中添加更多逻辑时。可能的重复不是,我有不同的ID不是不同的事件类型。可能的重复不是,我有不同的ID,没有不同的事件类型。