Javascript 单击动态添加的元素
大多数人都知道如何将“click”事件绑定到动态添加的元素Javascript 单击动态添加的元素,javascript,jquery,Javascript,Jquery,大多数人都知道如何将“click”事件绑定到动态添加的元素 $('#main').on('click','.link',function(){ //some code here }); 其中.link是一个动态添加的元素。但是当我只想在第一次单击时启动函数时,上面的代码应该是什么样子?是的,我知道.one(),但问题是要将.one()与.on()合并如果您只想在第一次单击时启动它,可以在执行后解除侦听器的绑定 $('#main').on('click', '.link', function(
$('#main').on('click','.link',function(){ //some code here });
其中
.link
是一个动态添加的元素。但是当我只想在第一次单击时启动函数时,上面的代码应该是什么样子?是的,我知道.one()
,但问题是要将.one()
与.on()合并
如果您只想在第一次单击时启动它,可以在执行后解除侦听器的绑定
$('#main').on('click', '.link', function() {
$('#main').off('click', '.link');
// do whatever you need here
});
说明:将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序
show.one()和.on()的jQuery文档与1.7相同:
.one( events [, selector ] [, data ], handler )
.on( events [, selector ] [, data ], handler )
我认为,由于委托处理程序的连接方式,不可能立即在()上创建最多触发一次的委托
(即one()
)
:当提供选择器时,事件处理程序被称为委派。当事件直接发生在绑定元素上时,不会调用该处理程序,而仅针对与选择器匹配的子体(内部元素)。jQuery将事件从事件目标气泡化到处理程序所附加的元素(即,从最内层到最外层的元素)并为与选择器匹配的路径上的任何元素运行处理程序
因此,即使您在处理程序主体内使用.off()
方法分离当前元素.link
的处理程序,事件也将始终在子代上激发。
但是,您仍然可以通过将DOM元素列表维护为闭包并在执行实际代码工作之前匹配该列表来实现这一点
var elements = [];//list of elements which is responded to events at once
$('#main').on('click', '.link', function() {
if(matched){//match $(this)/ uniqueIdentifier in 'elements' array
// prevent default and stopPropagation
return;
}
elements.push($(this));//or push something like 'id' to uniquely identify current element
//..codes
});
$(“#main”).one('click'、'.link',function(){//some code here})
从jQuery 1.7开始,one
接受选择器参数来委托事件,就像.on()
一样。现在它取决于您期望的结果,一次用于所有链接还是一次用于每个链接?
var elements = [];//list of elements which is responded to events at once
$('#main').on('click', '.link', function() {
if(matched){//match $(this)/ uniqueIdentifier in 'elements' array
// prevent default and stopPropagation
return;
}
elements.push($(this));//or push something like 'id' to uniquely identify current element
//..codes
});