我正在尝试执行一个函数,当点击div的外面使用knockout。我试图这样做,通过使用事件绑定与模糊。我想我是接近,我只是需要一点帮助。
filterFromList函数工作正常。
相关JS
self.filterFromList = function (item) {
self.selectedName(item.name);
self.location().forEach(function(place) {
if (place.name === self.selectedName()) {
place.showLocation(true);
place.marker.setVisible(true);
} else {
place.showLocation(false);
place.marker.setVisible(false);
}
});
};
self.unfilter = function (item) {
console.log("blurring");
self.location().forEach(function (place) {
place.showLocation(true);
place.marker.setVisible(true);
})
};
相关HTML
<ul data-bind="foreach: location">
<a class="location-click" data-bind="click: $parent.filterFromList, event: { blur: $parent.unfilter }">
<li class="location-block" data-bind="visible: showLocation">
<img class="location-img" data-bind="attr: {src: imgURL}" />
<h4 data-bind="text: name"></h4>
<hr>
</li>
</a>
</ul>
3条答案
按热度按时间8ftvxx2r1#
您可以使用自订bindingHandler(fiddle)来完成这项作业:
于飞:
基本上,我们的想法是在可能的最外层元素(
<html>
)中添加一个事件侦听器,然后检查单击目标是直接还是间接位于($.contains(what contains, what is contained)
)所需的容器中,如果是,则不执行任何操作,如果不是,则调用绑定函数。0s0u357o2#
通过在有问题的div中添加tabindex属性修复了这个问题。谢谢您的帮助!
suzh9iv83#
注意:使用敲除绑定效果不佳,比如(if和with)第一次显示元素容器init时效果很好,如果再次隐藏并显示,单击外部就不再起作用
,而不是用途:
将UID分配给父级,则这将与“with”和“if”绑定一起使用