2014-11-04 30 views
0

我的問題很簡單,但我沒有找到任何解決方案。加入活動keypress(with keyCode)並點擊鏈接

我有一個功能:

function toggleLabels(){ 
    $(".hideable").toggle(); 
    if($(this).parent().parent().hasClass("selected")) { 
     $(this).parent().parent().removeClass("selected"); 
     $('.preview-toggle .message').text('hide options'); 
    } else { 
     $(this).parent().parent().addClass("selected"); 
     $('.preview-toggle .message').text('show options'); 
    } 
} 

,我想用兩個不同的事件來呼籲:

$(document).keypress(function(e) { 
     if (e.keyCode == 113) { .... 

$('.preview-toggle a').click(function() { 

是否有可能加盟的事件? 我試過.bind(),但沒有任何積極的結果:(

謝謝 法比奧

後嘗試你的建議,我已經決定要獨立的事件,並選擇該格式:

var toggleLabels = function(){ 
     $(".hideable").toggle(); 
     if($('.preview-toggle').hasClass("selected")) { 
      toggleMargins("show"); 
      $('.preview-toggle').removeClass("selected"); 
      $('.preview-toggle .message').text('hide options'); 
     } else { 
      toggleMargins("hide"); 
      $('.preview-toggle').addClass("selected"); 
      $('.preview-toggle .message').text('show options'); 
     } 
    } 
    $('.preview-toggle a').click(function() { 
     toggleLabels() 
    }); 
    $(document).keydown(function(e) { 
     if (e.keyCode == 113) { 
      toggleLabels() 
     } 
    }); 
+0

謝謝馬丁。 儘快我嘗試你的建議。 – ilpiubello 2014-11-04 15:44:34

回答

0

因爲這兩個事件都是在不同的元素上觸發的('.preview-toggle a'和文檔),並且有不同的類型,所以你不能加入它們,因爲點擊事件冒泡DOM併到達文檔,你可以設置文件處理程序如下所示:

var links = $('.preview-toggle a'); 
$(document).on('keypress click', function(event) { 
    if (event.keyCode == 113 || event.type == 'click' && links.index(event.target) > -1) 
     toggleLabels(); 
}); 

但請注意,引擎蓋下的jQuery在文檔上設置了兩個偵聽器,一個用於'按鍵'和一個用於'點擊'。唯一的另一種方法是使用相同的函數回調在每個處理程序:

$('.preview-toggle a').click(toggleLabels); 
$(document).keypress(function(e) { 
    if (e.keyCode == 113) toggleLabels(); 
}) 

還要注意,在這兩種方法中toggleLabels點不同元素this -keyword。您可以用$("someSelector")替換$(this)

順便說一句:您不應該多次創建具有相同內容的jQuery對象。如果你需要不止一次將其存儲在一個變量,並參考該變種:

function toggleLabels(){ 
    $(".hideable").toggle(); 
    var par = $(this).parent().parent(); // store jQuery object here 
    if(par.hasClass("selected")) { // reference to variable par 
     par.removeClass("selected"); // reference again 
     $('.preview-toggle .message').text('hide options'); 
    } else { 
     par.addClass("selected"); 
     $('.preview-toggle .message').text('show options'); 
    } 

}