如何将这两个陈述合并成一个陈述?
问题描述:
我怎样才能把这两条语句放入一条singel语句中。他们像镜子里一样工作。 我试图让代码看起来更好,更简单。 任何帮助非常感谢。如何将这两个陈述合并成一个陈述?
$('#q_login_dialog #menu-register').click(function() {
$('#q_login_dialog #menu-login').removeClass('q_dialog_panel_item_active');
$('#q_login_dialog #menu-register').addClass('q_dialog_panel_item_active');
$('#q_dialog_login input[type!=hidden]').val('');
$('#q_dialog_reset input[type!=hidden]').val('');
$('#q_dialog_login').hide();
$('#q_dialog_reset').hide();
$('#q_dialog_register').show();
$('#q_dialog_register input[name=email]').focus();
$('#q_dialog_login input').blur();
$('#q_dialog_login span').html('');
what = 'register';
});
$('#q_login_dialog #menu-login').click(function() {
$('#q_login_dialog #menu-register').removeClass('q_dialog_panel_item_active');
$('#q_login_dialog #menu-login').addClass('q_dialog_panel_item_active');
$('#q_dialog_register input[type!=hidden]').val('');
$('#q_dialog_reset input[type!=hidden]').val('');
$('#q_dialog_register').hide();
$('#q_dialog_reset').hide();
$('#q_dialog_login').show();
$('#q_dialog_login input[name=email]').focus();
$('#q_dialog_register input').blur();
$('#q_dialog_register span').html('');
what = 'login';
});
答
两者之间唯一的区别似乎是使用register
与login
的,这应该是相当容易的参数:
function makeClickHandler(type, subtype) {
return function() {
$('#q_login_dialog #menu-' + subtype)
.removeClass('q_dialog_panel_item_active');
$(this).addClass('q_dialog_panel_item_active');
$('#q_dialog_' + subtype + ' input[type!=hidden]').val('');
$('#q_dialog_reset input[type!=hidden]').val('');
$('#q_dialog_' + subtype).hide();
$('#q_dialog_reset').hide();
$('#q_dialog_' + type).show();
$('#q_dialog_' + type + ' input[name=email]').focus();
$('#q_dialog_' + subtype + 'input').blur();
$('#q_dialog_' + subtype + 'span').html('');
what = type;
}
}
$('#q_login_dialog #menu-register').click(makeClickHandler("register", "login"));
$('#q_login_dialog #menu-login').click(makeClickHandler("login", "register"));
我的眼睛可能会错过另一个不同之处,但我认为就是这样(如果不是,你应该看到一般的想法)。
答
你必须使用一个变量函数和闭合:
var my_fct = function (action1, action2) {
// here comes the closure
return function() {
$('#q_login_dialog #menu-'+action2).removeClass('q_dialog_panel_item_active');
$('#q_login_dialog #menu-'+action1).addClass('q_dialog_panel_item_active');
$('#q_dialog_'+action2+' input[type!=hidden]').val('');
$('#q_dialog_reset input[type!=hidden]').val('');
$('#q_dialog_'+action2).hide();
$('#q_dialog_reset').hide();
$('#q_dialog_'+action1).show();
$('#q_dialog_'+action1+' input[name=email]').focus();
$('#q_dialog_'+action2+' input').blur();
$('#q_dialog_'+action2+' span').html('');
what = action1;
};
};
$('#q_login_dialog #menu-register').click(my_fct('register', 'login'));
$('#q_login_dialog #menu-login').click(my_fct('login', 'register'));
里面的事件处理程序,您可以用'this'访问点击的元素。剩下的,如果你还要显示你的HTML,那就更容易了。通常,使用类可以更轻松地在多个元素上执行相同的操作。 – 2011-12-29 21:57:07
您可以创建一个新的函数来完成所有这些工作,除了代码中的任何差异之外。 – 2011-12-29 21:57:32
也让我们知道,如果你在一个语句中有两个ID选择符(如:“#q_login_dialog#menu-register”),你就会做错事。 – 2011-12-29 22:06:19