簡體   English   中英

有沒有一種方法可以將此JavaScript重構為兩個事件處理程序

[英]Is there a way to refactor this javascript into two event handlers

$('.main').on('mouseleave', '.left_inner_element', function(event){
  $('.left_inner_element').removeClass('inner_hover');
});

$('.main').on('mouseover', '.right_element', function(event){
  $('.right_element').addClass('outer_hover');
});

$('.main').on('mouseleave', '.right_element', function(event){
  $('.right_element').removeClass('outer_hover');
});

$('.main').on('mouseover', '.right_inner_element', function(event){
  $('.right_inner_element').addClass('inner_hover');
});

$('.main').on('mouseleave', '.right_inner_element', function(event){
  $('.right_inner_element').removeClass('inner_hover');
});

$('.main').on('mouseover', '.bottom_element', function(event){
  $('.bottom_element').addClass('outer_hover');
});

$('.main').on('mouseleave', '.bottom_element', function(event){
  $('.bottom_element').removeClass('outer_hover');
});

如您所見,除了事件處理程序所在的類以及inner或external_hover以外,它們都是相同的。

這應該為您工作:

$('.main').on('mouseenter mouseleave', '.left_inner_element, .right_inner_element', function(e){    
    var selector = $(this).hasClass('.left_inner_element') ? '.left_inner_element' : '.right_inner_element';
    $(selector).toggleClass('inner_hover');
});

$('.main').on('mouseenter mouseleave', '.right_element, .bottom_element', function(e){
    var selector = $(this).hasClass('.right_element') ? '.right_element' : '.bottom_element';
    $(selector).toggleClass('outer_hover');
});

我的原始代碼僅將類添加到了元素的懸停實例,此版本將類添加到了懸停類的所有實例。

看來您希望每個元素都發生相同的事情(我正在想像一種突出顯示的交易類型),因此我將在所有元素中添加另一個類,讓其稱為.foo然后再添加懸停事件對於那個班。

$('.foo').hover(function(){
    $(this).toggleClass('outer_hover')
    $(this).toggleClass('inner_hover')
}, function(){
    $(this).toggleClass('outer_hover')
    $(this).toggleClass('inner_hover')
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM