2011-12-29 115 views
1

我怎样才能把这两条语句放入一条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';      
       });  
+5

里面的事件处理程序,您可以用'this'访问点击的元素。剩下的,如果你还要显示你的HTML,那就更容易了。通常,使用类可以更轻松地在多个元素上执行相同的操作。 – 2011-12-29 21:57:07

+1

您可以创建一个新的函数来完成所有这些工作,除了代码中的任何差异之外。 – 2011-12-29 21:57:32

+2

也让我们知道,如果你在一个语句中有两个ID选择符(如:“#q_login_dialog#menu-register”),你就会做错事。 – 2011-12-29 22:06:19

回答

2

两者之间唯一的区别似乎是使用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")); 

我的眼睛可能会错过另一个不同之处,但我认为就是这样(如果不是,你应该看到一般的想法)。

1

你必须使用一个变量函数和闭合:

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