2010-03-01 15 views
10
$('#lPass').focus(function() { 
     if (this.value == this.defaultValue) this.value = ''; 
     $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove(); 
}).blur(function() { 
    alert(1); 
}); 

<input id="lPass" type="text" size="10" value="Password"/> 


onBlur que no trabaja.
¿Alguna idea?jQuery onBlur no trabajar

Respuesta

24

Uso live en lugar de enfoque y desenfoque

.live() ya no se utiliza. Use .on() y .off() en su lugar.

porque va a añadir la entrada en tiempo de ejecución, por lo que se suma a la página con los acontecimientos, en directo:

Adjuntar un manejador para el evento para todos los elementos que coinciden con la corriente selector, ahora o en el futuro.

Ejemplo:

$('#lPass').on('focus', function() { 
    if (this.value == this.defaultValue) this.value = ''; 
    $(this).after('<input type="password" id="lPass" size="10" value="' + this.value + '"/>').remove(); 
}); 


$('#lPass').on('blur', function() { 
    alert(1); 
}); 
+1

.live le dice a jQuery que desea que esto suceda a algo, ya sea en el archivo original o en javascript. Esa primera parte de comillas antes de la función le dice qué tipo de evento está buscando (foco en la primera instancia, desenfoque en la segunda). Luego defines lo que quieres que suceda. –

+6

.live se elimina a partir de jQuery 1.9+, use .on en su lugar –

2

esto para su código exacto:

$('#lPass').live('focus', function() { 
    if (this.value == this.defaultValue) this.value = ''; 
    $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove(); 
}).live('blur', function() { 
    alert(1); 
}); 
2

El primer problema que veo es que el selector es un ID de #lPass, sin embargo, dentro de ese selector intenta introducir una nueva etiqueta con esa misma ID. La identificación debe ser única en la página. LUEGO intentas eliminar con .remove() - parece que no tiene sentido para mí.

sólo tiene que utilizar el .Remove() o utilizar una nueva identificación ...

o aclarar lo que quiere hacer.

En cuanto a .blur, simplemente use un desenfoque, pero el ID debe ser reparado, o use el .live() como otros sugieren si desea desenfocar el campo NUEVO que ha agregado.