【问题标题】:Event appears to only fire sometimes?事件似乎有时只会触发?
【发布时间】:2013-07-28 02:25:52
【问题描述】:

代码

我在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 的元素现在返回正确的文本。

我做错了什么?

【问题讨论】:

  • 仅供参考,对于其他人:在收到下面 Dimitar 的回答后,我在 SO 的其他地方找到了这个很好的答案,描述了 target 和 currentTarget 之间的差异:stackoverflow.com/questions/5921413/…

标签: javascript jquery twitter-bootstrap knockout.js jquery-events


【解决方案1】:

不要使用$(event.target),而是使用$(event.currentTarget)

我想扩展一下并解释区别,当您使用 event.target 时,您将获得调度事件的元素(实际元素字面意思) - 就像您的情况一样,如果您单击嵌套在 button 元素中的 <i></i> 元素,它将返回 <i></i> 请注意,如果您将代码返回到 event.target 并单击按钮的边缘,它将按预期工作.

event.currentTarget 的情况下,您将获得将侦听器绑定到的元素(在您的情况下是实际按钮)。

【讨论】:

  • 谢谢!就是这样。不知道 currentTarget 的存在。工作就像一个魅力。
  • @SeanKilleen 很高兴我能帮上忙 :)
猜你喜欢
  • 2015-06-25
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2011-09-23
  • 2016-12-21
  • 2012-06-12
相关资源
最近更新 更多