2012-06-22 39 views
21

我使用knockoutjs和我目前在我看來的東西,看起來像這樣:knockoutjs通過點擊事件得到元素ID

<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

但是,在點擊事件中發送img id的名稱太重複了。有沒有一種方法可以發送img id而不需要明確地重寫它?

+0

下面的鏈接對我的作品與淘汰賽結合 的http://計算器.com/questions/31513689/knockout-to-get-the-attribute-value-onclick-function/31514589#31514589 –

回答

53

您實際上可以通過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/

希望這有助於。

+0

這正是我所需要的。非常感謝! – bdev

+0

謝謝。這救了我從一些拉發 – solefald

+0

在擊倒文件中錯過了這一點。謝謝 – geedubb

13

madcapnmckay的答案並不完全正確。你可以更好地使用currentTarget:它會返回原始的綁定元素,而不是一個子元素,當你有一個嵌套元素的div。

看到這個question

更新

由於@Ryan提到的 - event.currentTarget不適用於IE8。對於< = IE8的支持,你可以使用:

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

我同意。 vm.yourFn =函數(數據,事件){$ {$} = $(event.currentTarget)...很好。 – rball

+1

請注意,如果您需要支持IE <9,則currentTarget不適用於這些版本。 – Ryan

+0

你說得對。我已經更新了答案! –

1

的Html綁定

<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代碼

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