2012-06-02 22 views
5

estoy usando 1.7.2 en la que entiendo que esto debería funcionar:¿Cómo desencadenar un desenfoque/evento de enfoque en un cuadro de texto de entrada usando jquery?

// cell is a jquery representation of a <td> element 
cell.append($("<input/>", { "type": "text" }).val(content));   
cell.children()[0].focus(); 
cell.children()[0].on("blur", function() { 
    alert("blur"); 
} 

El cuadro de entrada se anexa, agarra enfocar, luego la consola JavaScript me dice:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'on' 

que había Sé agradecido si alguien sabe cómo puedo ver el desenfoque/evento de enfoque.

Respuesta

4

Usted está accediendo el elemento DOM con [0] y actuar como tal es aj Objeto de consulta.

Si solo quiere la primera, necesita usar eq() para obtener el objeto jQuery.

cell.children().eq(0).focus().on("blur", function() { 
    alert("blur"); 
}; 
4

Debería enlazar evento de delegado, es decir. evento en vivo a esas entradas, porque se agregaron a DOM más tarde, por lo que necesitan controlador de eventos en vivo.

$(cell).on('blur focusout', ':text', function() { 
    alert(this.value); 
}); 

después dispare como siguiente:

$(':input:first', cell).blur(); // or $(':text', cell).trigger('blur'); 

$(':input:first', cell).focusout(); // or $(':text', cell).trigger('focusout');. 

acuerdo con su código

cell.children(':input:eq(0)').focus().on("blur", function() { 
    alert("blur"); 
}; 

o

cell.children(':input:first').focus().on("blur", function() { 
    alert("blur"); 
}; 
0

Usted está llamando .on en un elemento DOM, no objeto jQuery, intente esto:

var input = $("<input/>", { "type": "text", val: content }); 
cell.append(input); 
input.focus(); 
input.on("blur", function(){ 
    alert("blur"); 
}); 
Cuestiones relacionadas