[英]jQuery .on(“click”…) with dynamically created elements not working
[英]on click not working as expected on dynamically created elements jQuery
单击鼠标后我有一个标签,它会提醒标签的数据值。 它工作正常,但是当我单击动态创建的元素时不起作用。
<img id="no_p_fav" src="http://localhost:8000/icons/non_star.png">
以下是我如何创建动态元素
$('.all_candidate_bar').prepend('<div id = "icons"> <a class = "favorite" data-value = "'+data.msg.id+'" > <img id = "no_p_fav" src="{{url("/icons/non_star.png")}}" ></img></a></div>');
下面的功能不适用于动态创建的元素,但可以很好地处理加载页面时存在的元素。
$(document).ready(function(){
$('.favorite').on('click',function(){
var candidate_id = $(this).data('value');
alert(candidate_id);
});
});
我也尝试过
$('#icons').on('click','a.favorite',function(){//myFunction});
$('a').on('click','.favorite',function(){//myFunction});
如何使它适用于动态和静态元素?
由于#icon
也是动态创建的,因此您不能对其使用事件委托,因此您需要一个自开始就存在的更高级别的元素,例如body
:
$('body').on('click','.favorite',function(){//myFunction});
a
也将不起作用,因为在这种情况下未委托事件,因此它正在访问元素本身
$('a').on('click','.favorite',function(){//myFunction}); // won't work
尝试以下代码:
$(document).ready(function(){
$(document).on('click','.favorite',function(){
var candidate_id = $(this).data('value');
alert(candidate_id);
});
});
对于动态创建的元素,您需要委派事件$(document).ready(function(){
$('body').on('click','.favorite',function(){
var candidate_id = $(this).data('value');
alert(candidate_id);
});
});
像这样改变你的功能
$(function(){
$(document).on('click','.favorite',function(){
var candidate_id = $(this).data('value');
alert(candidate_id);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.