【发布时间】:2017-10-24 06:54:55
【问题描述】:
我有一个按钮。当我单击它时,我将一些按钮附加到 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 example(如下所示)。
$('button').on('click', function () {
$('.cont').remove();
$('.container').remove();
var html = '<button class="cont">click</button><div class="container">placeholder</div>';
$('body').append(html);
key();
});
$(document).on('click', '.cont', function () {
var html = '<div id="but_placeholder"><button class="one">1</button><button class="two">2</button><button class="three">3</button></div>';
$('.container').html(html);
});
function key() {
$(document).on('click', '#but_placeholder button', function () {
$('input').val($('input').val() + $(this).html());
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input" />
<button>test</button>
要重现,请单击test 按钮,然后单击click,然后单击1 2 3 并重复该过程
您会注意到第二次执行该过程时,文本会加倍
【问题讨论】:
-
你试过用keyup()代替click()吗?
-
我也遇到了同样的问题,然后我把.on改成.bind,问题就解决了
-
为什么每次点击
el时都在文档中添加一个新的事件处理程序? -
用户 adeneo 已经回答了您的问题。如何解决?删除函数 key() 并放入 console.log()。但这不是(很可能)你想要的。您为什么不分享更多代码并解释您想要实现的目标?
-
我编辑了我的问题并添加了一个示例
标签: javascript jquery click bind unbind