2016-12-08 2 views
1

Доброе утро.Как объединить две функции jQuery

Я хочу объединить функции jQuery в один.

$('body').on('click', '.toggle2', function() { 
    console.log(123); 
    $('body').find('.dateshow').toggleClass('show'); 

}); 

$('body').on('click', '.toogle3', function() { 
    $('body').find('.autorshow').toggleClass('show'); 
}); 


$('body').on('click', '.toogle4', function() { 
    console.log(123); 
    $('body').find('.starshow').toggleClass('show'); 

}); 

Большое спасибо заранее

+0

'$ ('тело') найти ('dateshow.')' -. Почему? он GNDN (никуда не годится) –

+0

попытаться использовать if else условие с классом –

+0

Да, я вижу, что я удалил его из своего кода – Leon

ответ

6

Если изменить все ваши коленно-рычажного иметь следующую разметку:

<a href="#" class="toggle" data-toggle="dateshow">click</a> 
<a href="#" class="toggle" data-toggle="autorshow">click</a> 
<a href="#" class="toggle" data-toggle="starshow">click</a> 

Затем вы можете добавить более общий обработчик, такие как:

$('.toggle').on('click', function() { 
    var targetSelector = $(this).attr('data-toggle'); 
    $('.' + targetSelector).toggleClass('show'); 
}); 

Codepen: http://codepen.io/anon/pen/aBKJEb

+0

Его ответ товара, но когда я его использую, он просто показывает мне «датировку» ... – Leon

+0

Можете ли вы разместить свой HTML? –

+0

Ха-ха, если я нашел свою ошибку, это был просто орфографический перевод. Спасибо за помощь :) – Leon

2

Когда обратный вызов называется jQuery, будет передан объект события. Вы можете проверить target события и процесс по мере необходимости.

$('body').on('click', '.toggle2, .toogle3, .toogle4', function(e) { 
    var $target = jQuery(e.target), 
     $targetObject; 

    if($target.hasClass('toggle2')) { 
     $targetObject = jQuery('body').find('.dateshow'); 
    } 
    if($target.hasClass('toogle3') { 
     $targetObject = jQuery('body').find('.autorshow'); 
    } 
    if($target.hasClass('toogle4') { 
     $targetObject = jQuery('body').find('.starshow'); 
    } 

    $targetObject.toggleClass('show'); 
}); 
+0

или вы можете использовать '$ (this)' –

0
$('body').on('click', '.toggle2,.toogle3,.toogle4', function() { 
    var mapper = { 
     'toggle2': { cls: '.dateshow', console:true }, 
     'toggle3': { cls: '.autorshow', console:false }, 
     'toggle4': { cls: '.starshow', console:true } 
    }; 
    this.classList.forEach(function(cls) { 
     var obj = mapper[cls]; 
     if(obj) { 
      obj.console && console.log(123); 
      $('body').find(obj.cls).toggleClass('show'); 
     } 
    }); 
}); 
Смежные вопросы