knockoutjs通过点击事件获取元素id

bde*_*dev 21 jquery knockout-2.0 knockout.js

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

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

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

pressedTab = function(tab){
    console.log("Element ID: " + tab);
}
Run Code Online (Sandbox Code Playgroud)

这写道:

元素ID:#myTab1

但是,在click事件中发送img id的名称太重复了.有没有办法发送img id而不明确地重写它?

mad*_*kay 55

实际上,您可以通过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());
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.


Dir*_*oer 13

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

看到这个问题

更新

正如@Ryan所说 - event.currentTarget不适用于IE8.对于<= IE8支持,您可以使用:

var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
Run Code Online (Sandbox Code Playgroud)