无法通过jQuery选择添加的tr

时间:2011-10-03 19:26:29

标签: javascript jquery selector

我在数据库中查找结果时通过jQuery添加表和原始数据,并在找不到任何内容时删除表。它工作正常。

$("#AdminSearch").bind("change keyup", function() { 
       var url = "http://localhost/PmMusic/index.php/admin/ajax/admin_search/"+$("#AdminSearch").val();
        $.getJSON(url,function(data){
            if (data.length == 0)
            {
                $("#AutoSearch").hide(1000);
                $("#AutoSearchTable").remove();
            }
            else
            {
                $("#AutoSearchTable").remove();
                $("#AutoSearch").append('<table id="AutoSearchTable">');
                for(var i = 0;i < data.length && i < 5;i++)
                    {
                     $("#AutoSearchTable").append('<tr><td id="TableSearchTR'+i+'" value="'+data[i]+'">'+data[i]+'</td></tr>');
                    }
                $("#AutoSearch").append('</table>');
                $("#AutoSearch").show(1000);    
            }
        });

    });

但是当我想通过以下代码选择tr

    $('tr').click(function(){
        alert("Hi");
    });

当我点击页面中的其他表格时,它可以工作,但是它不能选择由上层代码添加的tr。 问题出在哪里?

4 个答案:

答案 0 :(得分:4)

您需要使用.live().delegate()将点击事件附加到动态创建的元素。

$("#AdminSearch").delegate("tr","click",function() {
    alert("Hi");
});

答案 1 :(得分:2)

那是因为你与.click绑定,只适用于页面中已有的元素。

将您的代码更改为

$('tr').live('click', function(){
    alert("Hi");
});

答案 2 :(得分:0)

如果添加.click()函数时TR不存在,则不会附加点击事件。你应该看一下使用.delegate()函数。

答案 3 :(得分:0)

click()仅适用于DOM中已有的元素。如果您正在使用ajax加载某些内容,那么我建议live()

$('tr').live('click', function() {
  alert("Hi");
});