点击事件多次触发问题,如何?
我有一个按钮。 当我点击它时,我将一些按钮附加到DOM。
我遇到的问题是那些我多次追加的按钮。
$(el).on('click', function (e) { key(); }); function key() { $(document).on('click', '#key li', function () { console.log($(this)); }); }
第一次调用key()
, console.log
会触发一次
第二次调用key()
, console.log
会触发两次
等等
我已经尝试添加$(document).find('#key li').unbind('click')
,但这似乎不起作用
有任何想法吗?
编辑:
这是一个jsfiddle示例 (如下所示)。
$('button').on('click', function () { $('.cont').remove(); $('.container').remove(); var html = 'placeholder'; $('body').append(html); key(); }); $(document).on('click', '.cont', function () { var html = ''; $('.container').html(html); }); function key() { $(document).on('click', '#but_placeholder button', function () { $('input').val($('input').val() + $(this).html()); }); }
要重现,请单击test
按钮,然后click
,然后click
1
2
3
并重复此过程
您会注意到,第二次完成该过程后,文本会翻倍
做这个
function key() { $('#key li').unbind('click'); $('#key li').bind('click', function () { console.log($(this)); }); }
或者你可以做到
function key() { $('#key').find('li').unbind('click'); $('#key').find('li').bind('click', function () { console.log($(this)); }); }
我想第二个肯定会奏效。
更新方法
function key() { $(document).off('click', '#but_placeholder button'); $(document).on('click', '#but_placeholder button', function () { $('input').val($('input').val() + $(this).html()); }); }
尝试给所有按钮一个唯一的ID。
尝试在文档on
设置,应该这样做,并且只绑定一次,包括将来(生成的)元素。 例如:
$(document).on('click', '#key li', function() { //do stuff });
关键是,使用key()函数继续重新绑定到click事件。 在将on
事件绑定到文档时,不需要将其包装在函数中。 像这样的绑定(我上面的代码)将告诉jQuery将动作(在我的情况下’// do stuff’)绑定到它在文档中找到的’#key li’上的每个click事件。 它是否在那里,有一个或有很多。 我希望这有点解释。
小提琴
在我的小提琴中,我稍微修改了你的其他代码,并将插入的按钮预先包装为jQuery对象,这样你不仅可以附加一个按钮,而且还可以在其上设置操作。