2012-03-19 43 views
5

He estado jugando alrededor con knockout.js con jQuery, y yo soy muy nuevo en knockout.jselemento Recuperando con jQuery dentro evento nocaut

Mi ejemplo de código y el código está aquí: http://jsfiddle.net/Ninjanoel/ADYN6/

Básicamente, estoy tratando de crear una pantalla de ingreso de números de lotería como prueba de mi conocimiento, y ahora estoy tratando de validar la entrada de un cuadro de texto, y luego aplicar efectos especiales al cuadro de entrada si [onBlur], el texto la caja no es válida

Tengo una 'LotteryApp', con una serie observable de 'Líneas', con una matriz normal de [5] ko observables para servir como mis entradas o 'Cajas de números'. Estoy usando una plantilla para mostrar cada 'Línea' y una plantilla adicional dentro de la que se renderizan las 'Cajas'.

Lo que me gustaría es llamar quizás un plugin jquery 'color fade' [rojo a bg color] en el cuadro de texto si la entrada no es correcta. Sin embargo, en función de la 'onBlur' He creado, no puedo encontrar nada en ninguno de los argumentos que se pasan a la función de ayudar a llamar a algo así como myTextBox = jQuery(arguments.something), de modo que pueda hacer algo como jQuery(myTextBox).colourFade()

<input type="text" data-bind="value:n, event:{blur: $parent.onBlur }, uniqueName:true, disable: $parent.isLD" class="lotteryNumber" maxlength="2"/> 

es la código en mi plantilla más interna manejando el onBlur.

self.onBlur = function()... 

es la función que deseo invocar en el evento 'desenfoque'.

Soy consciente de que si utilizo un enlace personalizado, p. ko.bindingHandlers.myBinding luego el 'elemento' se pasa directamente a las llamadas 'update' e 'init', que luego puedo usar para llamar a jQuery (element) .colourFade(), pero esto es más un ejercicio para entender cómo acceder al elemento utilizando los enlaces de eventos estándar, porque puedo imaginar que lo necesitaré a menudo y no deseo hacer TODO en un enlace personalizado, y también, con solo las opciones de 'inicio' y 'actualización' dentro de un enlace personalizado (que yo sepa) , No creo que eso sea suficiente (por ejemplo, ¿qué pasa con 'keyup'?), Y de todos modos, los enlaces personalizados parecen basarse en un ko.observable en lugar de un evento en sí mismo.

Resumen:

cuando se utiliza data-bind="event : {blur : myMethod}", ¿cómo, en el interior de myModel.myMethod, agarra el elemento HTML que creó el evento.

Respuesta

8

El event objeto jQuery es el segundo argumento en el controlador de eventos, por lo que:

self.onBlur = function(data, event) { 
    console.log(event.target); 
} 
+0

dulce, amigo, gracias! "alerta (jQuery (event.target) .val());" devuelve el valor del cuadro de texto, ¡igual que yo también lo necesitaba! Estoy seguro de que intenté event.target anteriormente, ¡bueno, gracias por la respuesta concisa! – Nnoel

+0

note event.target no funciona en IE. necesita usar event.srcElement para IE. Por lo tanto, debe usar algo como esto para manejar todos los navegadores: var target = event.target || event.srcElement – portlandrock

+0

@portlandrock: He editado mi publicación para señalar que esto está utilizando el objeto de evento jQuery, no el que está directamente desde el navegador. Si jQuery está en la página, knockout usará los manejadores de eventos jQuery, que normaliza la propiedad [event.target] (http://api.jquery.com/event.target/) para que pueda usarla en cualquier navegador que jQuery soportes. – Douglas

Cuestiones relacionadas