繁体   English   中英

click事件未在新创建的列表项上触发

[英]click event not firing on newly created list item

我有两个列表,当您单击第二个列表时,第一个列表会删除第一个项目并添加到第二个列表中,但是当我单击新创建的列表项目时,它并不会触发为什么。 jsFiddle演示

$('#SearchList li a').bind("click", function () {
    var $this = $(this).unwrap('<a href="#"></a>').remove().text();

    var $that = $('#Search li:first').remove().text();

    $('<li>' + $this + '</li>').insertBefore('#Search li:first')

    $('#SearchList').append('<li><a href="#">' + $that + '</a></li>');
});

<ul id="Search">
    <li>Electronics</li>
    <li>Image</li>
</ul>

<ul id="SearchList">                        
    <li><a href="#">Interests</a></li>
    <li><a href="#">Entertainment</a></li>
    <li><a href="#">Clothing</a></li>
    <li><a href="#">Pharmacy</a></li>
    <li><a href="#">Home & Garden</a></li>
</ul>

.bind()仅影响DOM中已经存在的元素,您想使用.delegate().on() (如果使用的是jQuery 1.7+):

$('#SearchList').on("click", " li a", function () {
    var $this = $(this).unwrap('<a href="#"></a>').remove().text();

    var $that = $('#Search li:first').remove().text();

    $('<li>' + $this + '</li>').insertBefore('#Search li:first')

    $('#SearchList').append('<li><a href="#">' + $that + '</a></li>');
});

注意: .live()从jQuery 1.7开始已弃用,因此最好使用.on().delegate()

这是上述解决方案的jsfiddle(使用jQuery 1.7): http : //jsfiddle.net/jasper/pgwdv/

一些文档链接:

  • .on()http.on()
  • .delegate()http.delegate()

您应该尝试使用.live而不是.bind。

您可以使用实时功能使点击(和其他)处理程序保持活动状态,以动态添加内容。

代替

$('#SearchList li a').bind("click", function () {

采用

$('#SearchList li a').live("click", function () {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM