2011-12-29 139 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'));