Ton*_*bet 12 javascript jquery events
让我说我有
function trigger(){
$('a.pep').each(function(){
$('a.pep').click(function(){
console.log($(this).val());
});
});
}
function push(){
$('body').append('<a class="pep">hey mate i have no trigger yet</a>');
trigger(); //now i do but the others have duplicated trigger
}
$(document).ready(function(){
$('a.push').click(function(){
push();
});
});
Run Code Online (Sandbox Code Playgroud)
所以似乎click事件被应用了两次/ +因为console.log通过点击多次激活
我该如何防止这种情况?
问题是你$('a.pep').click()多次打电话.(事实上,你绑定的点击处理程序与每个元素的匹配元素一样多.然后每次单击其中一个元素时再次执行它.)
您应该使用DOM事件冒泡模型来处理这个问题.jQuery帮助您使用该on方法:
$(document.body).on('click', 'a.pep', function() {
console.log('element clicked');
$(document.body).append('<a class="pep">Click handlers handled automatically</a>');
});
Run Code Online (Sandbox Code Playgroud)
请注意,我已经删除了val调用,因为a元素不能有值...还要注意该on方法是在jQuery 1.7中引入的; 在此之前,使用delegate:
$(document.body).delegate('a.pep', 'click', function() {
Run Code Online (Sandbox Code Playgroud)
只需对触发功能进行微小更改即可.只需在绑定之前取消绑定click事件,以确保它永远不会被添加多次.此外,您不需要在绑定事件时使用每个事件,它会自动将事件添加到每个项目.
function trigger(){
$('a.pep').unbind('click').click(function() {
console.log($(this).val());
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |