2012-06-22 10 views
21

estoy usando knockoutjs y actualmente tengo algo en mi opinión, que se ve así:knockoutjs conseguir elemento de identificación a través evento click

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

Esto permite que consiga el ID de elemento en mi modelo de vista:

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

Esto escribe:

Elemento ID: # myTab1

Sin embargo, es demasiado repetitivo enviar el nombre de la img id en el evento click. ¿Hay alguna forma de enviar el ID de img sin volver a escribirlo explícitamente?

+0

continuación enlace funciona para mí con la unión http nocaut: // stackoverflow .com/questions/31513689/knockout-to-get-the-attribute-value-onclick-function/31514589 # 31514589 –

Respuesta

53

En realidad puede obtener acceso al objeto de evento a través de un controlador de clic de 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/

Espero que esto ayude.

+0

Esto es exactamente lo que necesitaba. ¡Muchas gracias! – bdev

+0

gracias. esto me salvó de algunos tirones de pelo – solefald

+0

perdido esto en los documentos knockout. Gracias – geedubb

13

La respuesta de madcapnmckay no es del todo correcta. Puede utilizar mejor currentTarget: devolverá el elemento enlazado original en lugar de un elemento secundario, cuando, por ejemplo, tiene un div con elementos anidados en él.

ver este question

actualización

Como se mencionó @Ryan - event.currentTarget no está disponible para IE8. Para < = apoyo IE8 puede utilizar:

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

Estoy de acuerdo. vm.yourFn = function (data, event) { \t \t \t \t \t \t var $ target = $ (event.currentTarget) ... funciona muy bien. – rball

+1

Tenga en cuenta que si necesita admitir IE <9, currentTarget no está disponible para esas versiones. – Ryan

+0

Tienes razón. ¡He actualizado la respuesta! –

1

HTML Encuadernación

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

código js

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