2012-08-25 142 views
0

我在理解jQuery时遇到了一些问题。jQuery on()需要选择器帮助

如果我有一个UL有一些通过jQuery创建的动态Li元素,它将设置第一个li来选择类 - 例如,

<li class='selected'>text</li> 

编辑UDPATE:

Ok..so我有什么是从中动态地从一个文本框生成的REST调用一组动态生成的LI的。我需要发生的事情基本上是在我输入(键入)之后,我会得到一些显示的结果(类似于自动完成)。然后,我需要从搜索框的上下文中检测向上和向下箭头,并在树上上下移动“.selected”类。下面的代码适用于静态列表,而不是动态创建的。

一些示例代码:

$('.txtSearchBox') 
.unbind('keypress keyup') 
.bind('keypress keyup', function (e) { 
    if ($(this).val().length < 3 && e.keyCode != 13) { 
     $('.searchWrapper').hide(); 
    } else { 
     $('.searchWrapper').show(); 
     SearchAutoComplete.init($('.searchWrapper')); 
     SearchAutoComplete.load(); 
    } 

    if (e.keyCode == 38) { // up 
     var selected = $(".selected"); 
     $(".searchWrapper li").removeClass("selected"); 
     if (selected.prev().length == 0) { 
      selected.parent().children().last().addClass("selected"); 
     } else { 
      selected.prev().addClass("selected"); 
     } 
    } 
    if (e.keyCode == 40) { // down 
     var selected = $(".selected"); 
     $(".searchWrapper li").removeClass("selected"); 
     if (selected.next().length == 0) { 
      selected.parent().children().first().addClass("selected"); 
     } else { 
      selected.next().addClass("selected"); 
     } 
    } 
}); 

$(".searchWrapper li").live('mouseover', function (e) { 
    $(".searchWrapper li").removeClass("selected"); 
    $(this).addClass("selected"); 
}); 

正如你可以看到这个代码检测向上和向下箭头键。问题在于动态元素不做任何事情。我只是困惑,因为事件应该在李不是一个?

感谢

克里斯

+0

两个人已经展示了如何使用'在()'。将知识应用于您的按键事件。 – Owlvark

回答

0

试试这个:

$(".searchWrapper ul").on('mouseover',"li", function() { 
    $(".searchWrapper li").removeClass("selected"); 
    $(this).addClass("selected"); 
}); 

从jQuery docs当你提供一个选择的on()功能(“李”)的事件处理程序委托。

0

这是你的意思? DEMO

随着each你可以通过你的元素进行迭代,并对其进行操作,如你所愿。

$('ul.alist li').on('click', function(){ 

jQuery.each($('ul.alist li'), function() { 
    $(this).removeClass('selected'); 

}); 
}); 

通过上面的代码,我正在做的是遍历li标签并删除'selected'类。