2014-01-23 49 views
0

我有一個李列表,其中每個包括一個菜單選項,從右側滑出,但我只想點擊一次應用在一個李。在行動的它abillity選擇個人li與jquery

$('#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/

+0

_「我只想點擊一次應用於一個li。」_ - 哪一個? – nnnnnn

+0

你可以點擊它們沒有特別的順序 – user1177860

+0

我的意思是,你怎麼知道哪一個點擊應該適用?或者我的意思是我不知道你的意思。你能否詳細解釋你的要求? – nnnnnn

回答

1

如果我理解您的要求正確,以下是你所需要的:

$('#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/

即,通過與$(this)選擇被點擊的元素開始,然後導航到相關'.options' DIV。

+0

當你選擇一行時,你不會取消選擇其他行。 – Barmar

+0

@Barmar - 好點。對我而言,過分簡化。答案已更新。 – nnnnnn

0

你必須對類適用於this元素:

$('li .options').removeClass('selected'); // Clean the selected ones 
if(!selected) 
    $(this).addClass('selected'); // Apply to the clicked one 
+0

'selected'必須被添加到'.options'元素,您將它應用到'.swipe'被點擊。 – Barmar

+0

是的,那麼你的答案是正確的:) – naoxink

1

使用此:

var t = $(this).next('.options'); 

當你說$('.options')它匹配所有的o不僅僅是點擊DIV後的那一個。

FIDDLE