Knockoutjs получает идентификатор элемента через событие клика

Я использую Knockoutjs, и в настоящее время у меня есть что-то похожее на это:

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

Это позволяет мне получить идентификатор элемента в моей модели представления:

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

Это пишет:

Идентификатор элемента: #myTab1

Однако слишком часто повторяется отправка имени идентификатора img в событии клика. Есть ли способ отправить идентификатор img без его повторной записи?


person bdev    schedule 22.06.2012    source источник
comment
Ссылка ниже работает для меня с привязкой нокаута получить значение атрибута onclick function"> stackoverflow.com/questions/31513689/   -  person San Jaisy    schedule 20.07.2015


Ответы (2)


На самом деле вы можете получить доступ к объекту события через обработчик кликов 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/

Надеюсь это поможет.

person madcapnmckay    schedule 22.06.2012
comment
Это именно то, что мне нужно. Большое спасибо! - person bdev; 22.06.2012
comment
Это будет небезопасно, если на кнопке будет что-то вроде этого, <button id="somebutton" data-bind="click: log"><span class='fa fa-user'></span>Click Me </button> - person jmvtrinidad; 27.11.2015

Ответ madcapnmckay не совсем правильный. Вы можете лучше использовать currentTarget: он вернет исходный связанный элемент вместо дочернего элемента, когда, например, у вас есть div с вложенными элементами.

См. этот вопрос

Обновить

Как упоминал @Ryan, event.currentTarget недоступен для IE8. Для поддержки ‹= IE8 вы можете использовать:

var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
person Dirk Boer    schedule 31.12.2012
comment
Я согласен. vm.yourFn = function (data, event) { var $target = $(event.currentTarget)... отлично работает. - person rball; 26.02.2013
comment
Обратите внимание, что если вам нужна поддержка IE ‹ 9, currentTarget недоступен для этих версий. - person Ryan; 26.06.2013