我有一个jQuery问题。
我有一个HTML列表设置如下:
<ul class="areas">
<li title="Volunteering">Volunteering</li>
<li title="Partnership & Support">Partnership & Support</li>
<li title="Business Services">Business Services</li>
</ul>
当用户点击外部div-styled select时,我会过滤这些项目并将标题添加到范围。
我遇到的问题是,“Volunteering”需要两次点击才能显示在该范围内。
我已经嘲笑了jsFiddle这个
我的jQuery看起来像这样:
$('ul.areas').css('display', 'none');
$('.styled-select').click(function()
{
var cur = $('.areas li.current');
next = cur.next('li');
var value = cur.attr('title');
if (next.length === 0) { // wrap if necessary
next = $('.areas li:first');
}
cur.removeClass('current'); // move the current class
next.addClass('current');
$('.service-area').html(value);
})
如何只需点击一下即可让它工作?
提前致谢。
答案 0 :(得分:3)
我更改了你的标记,以便li
类有一个current
元素,它似乎工作正常:
<ul class="areas">
<li class="current" title="Volunteering">Volunteering</li>
<li title="Partnership & Support">Partnership & Support</li>
<li title="Business Services">Business Services</li>
</ul>
如果那不是您想要的,那么您可以动态地将current
类添加到第一个li
(如果它尚不存在)。
答案 1 :(得分:2)
你可以从下一个元素中获取标题,当你第一次点击它时,curr就没什么了。
这是小提琴
if (next.length === 0) { // wrap if necessary
next = $('.areas li:first');
}
var value = next.attr('title');
答案 2 :(得分:1)
你也可以试试这个:
var li = $('.areas li.current');
var cur = li.length ? li : $('.areas li:first').addClass('current');
next = cur.next('li');
答案 3 :(得分:1)
简化一下:
$('.styled-select').click(function () {
var cur = $('.areas li.current').length === 0 ? $('.areas li').eq(0) : $('.areas li.current').eq(0).removeClass('current');
var next = cur.next('li').length ? cur.next('li').addClass('current') : cur.next('li').eq(0).addClass('current');
var value = cur.attr('title');
$('.service-area').html(value);
});