在事件冒泡后,有没有办法让点击运行?在下面的场景中,单击span会触发removeChildNode函数,该函数会从dom中删除span。这可以防止跨度点击触发点击[数据标识符]'节点。我希望事件能够冒泡,然后再执行要执行的功能。
<div data-identifier>
<div data-bind="click: removeChildNode">
<span>Click Me!</span>
</div>
</div>
removeChildNode = function() { $(arguments[1].target).children()[0].remove(); }
$('body').on("click", 'span', function(event) {
// use the span to navigate around and do something interesting
$(event.target).closest('div[data-identifier]').click();
});
答案 0 :(得分:1)
如果您要使用Knockout,则需要让它控制DOM,并操纵您的viewmodel。您应该有一些表示可移动子项的viewmodel实体,并且您的removeChildNode
函数会将其删除(或将其设置为指示它已被删除的状态)。作为一般规则,jQuery选择器表明您未能对某些内容进行建模。
设置点击事件有两种方法是没有意义的。如果您要在一个地方使用jQuery click事件,则应该对所有点击事件使用jQuery而不使用Knockout。
也就是说,默认情况下,Knockout确实允许事件冒泡。您可以在节点移除器周围放置一个setTimeout
,以便在移除节点之前为DOM传播事件,如果这样可以防止外部点击被触发。如果你把DOM完全留给Knockout,你将会遇到更少的问题。
答案 1 :(得分:0)
你应该点击你这样点击绑定
{{1}}
通过设置超时,您将延迟执行removeChildNode。
通过将你的调用包装成一个函数,你可以立即返回true,我认为告诉koJs冒泡这个事件。因此,您可以在延迟一段时间后实现冒泡并执行removeChild。
我没有尝试过这个小提琴,但我认为它应该有用,如果你试试它让我知道它是怎么回事,也许我应该确定我的答案在回答之前是可靠的,但我认为我是正确的这一个:)