2011-12-29 22 views
1

この2つの文をどのようにして1つのsingel文にすることができますか?彼らは鏡のように働く。 私はコードをよりよく見えるようにしようとしています。 ご迷惑をおかけして申し訳ございません。この2つのステートメントをどのように1つのステートメントに入れることができますか?

  $('#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も表示する方が簡単です。一般に、複数の要素に対して同じ操作をより簡単に実行できるように、クラスを使用します。 –

+1

コードの相違を除けば、それらのすべてを行う新しい関数を作ることができます。 –

+2

また、(#q_login_dialog#menu-registerのように)1つのステートメントに2つのIDセレクタがある場合、間違っていることがわかります。 –

答えて

2

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