事件似乎有时只会起火?

时间:2013-07-28 03:26:23

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

守则

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

我做错了什么?

1 个答案:

答案 0 :(得分:6)

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

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

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