我有一个bootstrap下拉按钮,在用户点击它之后,控制器加载并用JS响应,其中它从部分重新呈现html。
在Bootstrap下拉按钮中,我有<ul class="dropdown-menu keep-open">
,其中使用了保持开放类:
$(document).ready ->
$('.keep-open').on 'click': (e) ->
e.stopPropagation()
return
要在单击时保持下拉打开,默认情况下保持关闭(我在下拉列表中有一个表单)。调用工作正常,直到我提交for和控制器JS重新呈现按钮,然后keep-open
停止工作,下拉菜单继续关闭。
我可以将此菜单以其他方式打开,还是阻止$('.keep-open').on 'click'
再次被调用?
答案 0 :(得分:1)
要详细说明评论者,您的问题来自直接绑定的事件处理程序。仅当事件发生在绑定到的确切元素上时才会调用处理程序。您的重新渲染将删除原始元素,并且新创建的元素没有附加处理程序。
您可以通过使用委托事件处理程序来解决此问题:
$('body').on('click' , '.keep-open' , function() { ... });
您应该会在jQuery .on() docs
中看到有关“直接和委派事件”的部分