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

时间:2012-06-22 14:20:49

标签: jquery knockout.js knockout-2.0

我正在使用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?

3 个答案:

答案 0 :(得分: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());

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

希望这有帮助。

答案 1 :(得分:13)

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

请参阅此question

<强>更新

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

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

答案 2 :(得分:1)

Html Binding

 <input type="checkbox" data-bind="attr:{id: $data.Id , Qref: '3177'} , click: $root.answerClick">&nbsp;&nbsp;&nbsp;<span data-bind="text: $data.Text , attr:{id: $data.Id}"></span>

js code

answerClick: function(c, event){
        var element = event.target;
        var qref = element.getAttribute('Qref');
        var click_id = element.id;
        return true;
    }