2017-08-29 86 views
1

我有一个php员工目录网站,它列出了我们在一个表(连接到mysql)中的所有员工,并且您可以单击每个员工打开他们的详细信息在另一个分区。将jquery事件附加到动态创建的元素(jquery加载php文件)

$('.emptab').click(function(event) { 
    var status = $(this).attr('id'); 
    $("#empview").load("employee.php", {'data': datastring, 'current': status}); 
}); 

我本来上面的代码,但是要能够将事件附加到动态元素需要,所以我改成下面的代码:

$('tbody').on('click', 'tr.emptab', function() { 
    var status = $(this).attr('id'); 
    $("#employeedetails").load("employee.php", {'data': datastring, 'current': status}); 
}); 

我做了这样的说法,因为我读的另一个问题(In jQuery, how to attach events to dynamic html elements?),您可以使用该格式将事件附加到动态元素。只是为了澄清,这段代码继续使用初始页面,但在使用搜索过滤器后失败。

我的动态元素来自过滤器/搜索功能,我将根据搜索文本框更改员工列表,该搜索文本框根据我创建的filter.php文档更改员工列表。

$('#search').on('input propertychange paste', function() { 
    var string = $('#search').val(); 
    $("#employeelist").load("filter.php", {'data': datastring, 'search': string}); 
}); 

然而,当从PHP文件创建的那些内容,我无法通过我的jquery访问元素,我不知道我在做什么错。还有大约4个其他问题,我看到答案是使用jquery on函数,我尝试过没有成功。

谢谢你的时间。

回答

0

您可以使用下面的代码为这个

$(document).on('click', '.emptab', function() { 
    var status = $(this).attr('id'); 
    $("#employeedetails").load("employee.php", {'data': datastring, 'current': status}); 
}); 
+0

嘿感谢,这工作。只是想知道,为什么它必须是文件,而不是像身体或表等东西? – user163362

+0

它是事件委托,它允许我们将一个事件监听器附加到一个父元素,该元素将为匹配选择器的所有后代触发,无论这些后代是现在存在还是未来添加。 可能是你的tbody元素已经动态创建,这就是为什么它的工作原理 –

+0

@ user163362它没有,任何已经存在的未来元素的祖先元素都会这样做。 – CBroe

相关问题