У меня есть список li, каждый из которых включает в себя параметры меню, которые выходят с правой стороны, но я хочу, чтобы только один клик применялся к одному литу за раз.
$('#list li .swipe').click (function(i) {
var t = $('.options');
var ul = t.closest('#list');
var selected = t.hasClass('selected');
ul.find('li .options').removeClass('selected');
if(!selected)
t.addClass('selected');
});
$('.options a').click(function(e) {
var id = $(this).closest("li").attr("data-id");
$(this).closest("li").fadeTo("fast", 0.01).slideUp("fast", function() {
$(this).remove();
});
e.preventDefault();
});
Пример этого в действии http://jsfiddle.net/zidski/V8Qvy/
Если я правильно понимаю ваше требование, вам нужно следующее:
$('#list li .swipe').click (function(i) {
$('.options').not( $(this).next().toggleClass('selected') )
.removeClass('selected');
});
Демо: http://jsfiddle.net/V8Qvy/5/
Или если это выглядит беспорядочно:
$('#list li .swipe').click (function(i) {
var $current = $(this).next().toggleClass('selected');
$('.options').not( $current ).removeClass('selected');
});
Или для внесения незначительных изменений в структуру html:
$('#list li .swipe').click (function(i) {
var $current = $(this).closest('li')
.find('.options')
.toggleClass('selected');
$('.options').not( $current ).removeClass('selected');
});
Демо: http://jsfiddle.net/V8Qvy/6/
То есть, начните с выбора элемента '.options'
с помощью $(this)
, а затем перейдите к соответствующему div '.options'
.
Использовать это:
var t = $(this).next('.options');
Когда вы говорите $('.options')
он соответствует всем параметрам, а не только после DIV, на который было нажато.
Вы должны применить класс к this
элементу:
$('li .options').removeClass('selected'); // Clean the selected ones
if(!selected)
$(this).addClass('selected'); // Apply to the clicked one
selected
должен быть добавлен к элементу .options
, вы применяете его к .swipe
которому щелкнули.