代码
我在 http://jsfiddle.net/6vd5C/1/ 设置了一个 jsFiddle
有问题的 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
的情况下您正在获取要将监听器绑定(bind)到的元素(在您的情况下是实际按钮)。
关于javascript - 事件有时似乎只触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904695/