【问题标题】:knockoutjs get element id through click eventknockoutjs 通过点击事件获取元素id
【发布时间】:2012-06-24 20:40:37
【问题描述】:

我正在使用 knockoutjs,我目前在我的视图中有一些看起来像这样的东西:

<img id="myTab1" data-bind="click: pressedTab.bind($data, '#myTab1')" src="images/image1.png"></img>

这允许我在我的视图模型中获取元素 ID:

pressedTab = function(tab){
    console.log("Element ID: " + tab);
}

这样写:

元素 ID:#myTab1

但是,在click事件中发送img id的名称太重复了。有没有办法在不显式重写的情况下发送 img id?

【问题讨论】:

标签: jquery knockout.js knockout-2.0


【解决方案1】:

您实际上可以通过 KO 点击处理程序访问事件对象。

<button id="somebutton" data-bind="click: log">Click Me </button>

var ViewModel = function() {
    this.log = function(data, event) {
        console.log("you clicked " + event.target.id);
    }
};
ko.applyBindings(new ViewModel());

http://jsfiddle.net/madcapnmckay/e8JPT/

希望这会有所帮助。

【讨论】:

  • 这正是我所需要的。非常感谢!
  • 如果按钮上有类似这样的图标,这将不安全,&lt;button id="somebutton" data-bind="click: log"&gt;&lt;span class='fa fa-user'&gt;&lt;/span&gt;Click Me &lt;/button&gt;
【解决方案2】:

madcapnmckay 的答案并不完全正确。您可以更好地使用 currentTarget:当您有一个包含嵌套元素的 div 时,它将返回原始绑定元素而不是子元素。

看到这个question

更新

正如@Ryan 提到的 - event.currentTarget 不适用于 IE8。对于

var target = (event.currentTarget) ? event.currentTarget : event.srcElement;

【讨论】:

  • 我同意。 vm.yourFn = function (data, event) { var $target = $(event.currentTarget) ... 效果很好。
  • 请注意,如果您需要支持 IE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多