我有一个函数,它将click事件处理程序附加到我的元素:
function attachClickToElem() {
$('.elem').on('click', function () {
alert('Hello World');
});
}
Run Code Online (Sandbox Code Playgroud)
问题是每当我调用这个函数时,n click处理程序会附加到我的元素,所以当我调用它两次时,alert当我点击我的元素时,我得到两个:
$(function () {
attachClickToElem();
attachClickToElem();
});
Run Code Online (Sandbox Code Playgroud)
我该怎样预防呢?并检查我的元素是否已经click处理?
Aru*_*hny 12
尝试
function attachClickToElem() {
$('.elem').off('click.mytest').on('click.mytest', function () {
alert('Hello World');
});
}
$(function () {
attachClickToElem();
attachClickToElem();
});
Run Code Online (Sandbox Code Playgroud)
演示:小提琴
其他方式
function attachClickToElem() {
$('.elem').filter(function(){
return !$(this).data('myclick-handler');
}).on('click.mytest', function () {
alert('Hello World');
}).data('myclick-handler', true);
}
$(function () {
attachClickToElem();
attachClickToElem();
});
Run Code Online (Sandbox Code Playgroud)
演示:小提琴
小智 5
使用.each()通过你的元素的方法循环,并检查标志与已经事件处理
.data()方法,如果标志是true,跳过当前循环。否则,将事件处理程序附加到 element 并将标志设置为true。
function attachClickToElem() {
$('.elem').each(function () {
var $elem = $(this);
// check if event handler already exists
// if exists, skip this item and go to next item
if ($elem.data('click-init')) {
return true;
}
// flag item to prevent attaching handler again
$elem.data('click-init', true);
$elem.on('click', function () {
alert('Hello World');
});
});
}
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
4899 次 |
| 最近记录: |