我怎么把这两个表述变成一个表述呢?

How can I put this two statements into one statement?

本文关键字:一个 两个      更新时间:2023-09-26

如何将这两条语句合并成一条语句呢?它们的工作原理有点像镜子。我试图使代码看起来更好和简单。任何帮助都是非常感谢的。

           $('#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';                     
                });     

两者之间的唯一区别似乎是使用registerlogin,这应该很容易参数化:

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') );