2012-09-14 10 views
9

Tengo función:¿Cómo usar el enfoque y desenfoque en los elementos dinámicos insertados?

$(document).ready(function(){ 

    $("input.myclass").focus(function() { 
     // something 
    }).blur(function() { 
     // something 
    }); 

} 

y html:

<div class="usil"> 
    <div class="editable"> 
     <form> 
      <input type="text" class="myclass" /> 
     </form> 
    </div> 
</div> 

En la página de carga jQuery en elementos "MyClass" funcionan bien, pero otro script añadir dinámicamente "USIL" divs de clase y en este Dont jQuery divs trabajo. ¿Cómo hacerlo?

Respuesta

25

Uso delegación de eventos:

$(document).on('focus',"input.myclass", function() { 
     // something 
    }).on('blur',"input.myclass", function() { 
     // something 
    }); 

o

$(document).on({ 
    'focus': function() { 
     // something 
    }, 
    'blur': function() { 
     // something 
    } 
}, 'input.myclass'); 

http://api.jquery.com/on

http://learn.jquery.com/events/event-delegation/

+0

1 Muy bien simple y directo –

+2

Cabe señalar que el uso de 'document' no es generalmente una buena idea si se puede evitar. Por motivos de rendimiento, desea utilizar el elemento ancestro estático común más cercano. –

+0

Sí, eso vale la pena señalar, aunque no iba a entrar en eso ahora, ya que era claramente un concepto nuevo para OP, y la diferencia en el uso típico es insignificante. – Blazemonger

-1

Ese código podría ayudar:

$('input').live('focus', function() { 
    $('label span').text('focus'); 
}).live('blur', function() { 
    $('label span').text('blur'); 
}); 


Ejemplo de uso: http://jsfiddle.net/CPQ37/

+1

.live se suspendió desde v1.9: http://stackoverflow.com/questions/14354040/jquery-1-9-live-is-not-a-function – meataxe

Cuestiones relacionadas