2012-06-22 11 views
21

Używam knockoutjs i obecnie mam coś w moim przekonaniu, który wygląda tak:knockoutjs dostać id elementu poprzez kliknięcie zdarzenia

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

To pozwala mi uzyskać identyfikator elementu moim zdaniem modelu

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

pisze to:

Element ID: # myTab1

Jest jednak zbyt monotonna, aby wysłać nazwę identyfikatora img w zdarzeniu kliknięcia. Czy istnieje sposób wysłania img id bez wyraźnego przepisania go?

+0

poniższy link działa na mnie z wiążącym nokaut http: // stackoverflow .com/question/31513689/knockout-to-get-the-attribute-value-onclick-function/31514589 # 31514589 –

Odpowiedz

53

Rzeczywiście można uzyskać dostęp do obiektu zdarzenia za pomocą modułu obsługi kliknięć 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/

Nadzieja to pomaga.

+0

To jest dokładnie to, czego potrzebowałem. Wielkie dzięki! – bdev

+0

dziękuję. to uratowało mnie przed ciągnięciem włosów – solefald

+0

przegapiłem to w dokumentacji nokaut. Dzięki – geedubb

13

Odpowiedź madcapnmckay nie jest całkowicie poprawna. Możesz lepiej użyć currentTarget: zwróci oryginalny powiązany element zamiast elementu podrzędnego, np. Masz element div z elementami zagnieżdżonymi.

Zobacz ten question

Aktualizacja

Jak wspomniano @Ryan - event.currentTarget nie jest dostępna dla IE8. Dla < = wsparcie IE8 można użyć:

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

Zgadzam się. vm.twojFn = funkcja (dane, zdarzenie) { \t \t \t \t \t \t var $ target = $ (event.currentTarget) ... działa świetnie. – rball

+1

Należy pamiętać, że jeśli potrzebujesz obsługi IE <9, currentTarget nie jest dostępny dla tych wersji. – Ryan

+0

Masz rację. Zaktualizowałem odpowiedź! –

1

Html Oprawa

<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 kod

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