代码
我在http://jsfiddle.net/6vd5C/1/
有问题的JavaScript代码:
var global_loggedOnUser = "User1";
$(function(){
var viewmodel = (function(){
this.feedbacktype = ko.observable("None");
this.currentPage = ko.observable(location.href);
this.currentUsername = global_loggedOnUser;
this.updateFeedbackType = function(item, event)
{
var newText = $(event.target).children("span").text();
feedbacktype(newText);
};
return{
pageUserIsOn : currentPage,
theUser : currentUsername,
feedbackType: feedbacktype
};
})();
ko.applyBindings(viewmodel);
});
目标
每当有人点击提交按钮时,我都希望看到"当前类型"项目符号更新,以指示点击按钮上的标题。
问题
- 有时文本会更新为正确的单词;有时它会更新,但为空值
- 我找不到模式或韵律/理由;有时在为空之后,单击另一个元素,然后单击以前返回null的元素,现在返回正确的文本
我做错了什么?
不要使用$(event.target)
,而是使用$(event.currentTarget)
。
我想扩展一下并解释一下区别,当你使用event.target
时,你得到的是调度事件的元素(实际元素)——就像在你的情况下,如果你点击嵌套在按钮元素中的<i></i>
元素,它将返回<i></i>
,注意如果您将代码返回到event.target
并单击按钮的边缘,它将按预期工作。
在event.currentTarget
的情况下,您将获得将侦听器绑定到的元素(在您的情况下是实际的按钮)。