Knockoutjs получает идентификатор элемента через событие click
Я использую knockoutjs, и в настоящее время у меня есть что-то на мой взгляд, которое выглядит так:
<img id="myTab1" data-bind="click: pressedTab.bind($data, '#myTab1')" src="images/image1.png"></img>
Это позволяет мне получить идентификатор элемента в моей модели просмотра:
pressedTab = function(tab){
console.log("Element ID: " + tab);
}
Это пишет:
Элемент ID: # myTab1
Однако он слишком повторяется, чтобы отправить имя id img в событие click. Есть ли способ отправить img id, не переписывая его явно?
Ответы
Ответ 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/
Надеюсь, что это поможет.
Ответ 2
Ответ madcapnmckay не совсем корректен. Вы можете лучше использовать currentTarget: он вернет исходный связанный элемент вместо дочернего элемента, когда у вас есть div с вложенными элементами в нем.
Смотрите question
Обновление
Как упоминал @Ryan - event.currentTarget недоступен для IE8. Для поддержки <= IE8 вы можете использовать:
var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
Ответ 3
Связывание HTML
<input type="checkbox" data-bind="attr:{id: $data.Id , Qref: '3177'} , click: $root.answerClick"> <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;
}