我向元素添加了自定义绑定,它的作用是不断检查是否单击了li标签,因此我在其中添加了onclick侦听器,但它确实起作用。怎么了,这是我的代码:
ko.bindingHandlers.makeActive = {
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
// First get the latest data that we're bound to
var value = valueAccessor();
// Next, whether or not the supplied model property is observable, get its current value
var valueUnwrapped = ko.unwrap(value);
$(".friend a").click(function(){
alert("The element was clicked.");
});
}
};
有没有一种方法可以检查元素是否已单击?
答案 0 :(得分:2)
您将逻辑放错了一点。 不要在更新回调中设置点击侦听器,它会在每次附加到元素的可观察对象更新时尝试注册该事件。而是在初始化回调中注册侦听器,如下所示:
ko.bindingHandlers.makeActive = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
$(".friend a").on('click',function(){
alert("The element was clicked.");
});
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext)
{
}
};
现在,您应该将此处理程序直接绑定到要观察的元素上,因此您不应在其中有选择器,而应该
$(element).on('click',function(){
alert("The element was clicked.");
});
如果您对超过1个元素使用自定义绑定,这还将使您免于多次注册处理程序。现在,每个处理程序将只处理一个元素,而不是拥有一个选择器,该选择器可以在每次调用时一遍又一遍地解析相同的元素