2009-12-31 5 views
2

J'ajoute actuellement une entrée via un événement .click, puis je souhaite écouter toute pression sur cette entrée. Cependant, l'événement ajouté ne déclenche aucun événement après son insertion (c'est-à-dire flou, pression de touche, mise au point). Est-ce que quelqu'un a des suggestions? Merci d'avance! J'ai également essayé .keyup .keydown, ils ne fonctionnent pas.Jquery .keypress sur une entrée ajoutée dynamiquement

Répondre

5

Pour capturer blur/focus événements, pourquoi ne pas ajouter le gestionnaire à l'élément créé avant l'ajouter à DOM?

$('#recipientsDiv').click (function() 
{ 
    $('< input type="text" id="toInput" class="inlineBlockElement" style="border:0px none #ffffff; padding:0px; width:20px; overflow:hidden;" />') 
     .keypress (function (e) { ... }) 
     .blur (function (e) { $(this).remove() }) 
     .appendTo ($(this)) 
     .focus() 
    ; 
}); 
+0

Que puis-je faire dans des scénarios compliqués par exemple lorsque nous voulons ajouter dynamiquement plus d'un élément? Il semble que la meilleure façon d'utiliser la gestion déléguée des événements est On(). – QMaster

7

Votre gestionnaire keypress est ajouté uniquement aux éléments qui existent lorsque vous l'avez ajouté.

Vous devez appeler la méthode live pour l'ajouter à chaque élément correspondant au sélecteur, peu importe quand il a été ajouté.

Par exemple:

$("input").live('keypress', function(e){ 
    var inputStr = $(this).html(); 
    $("#inputCopier").text(inputStr); 
    var newWidth = $("#inputCopier").innerWidth; 
    $(this).css("width", newWidth); 
}); 
+0

Cela a très bien fonctionné pour la touche, merci! Cependant, cela ne semble pas fonctionner pour le flou. Selon la documentation, il n'est pas supporté ... des suggestions? – BinarySolo00100

+0

Ajouter le gestionnaire à l'élément, avant d'ajouter DOM - voir ma réponse ci-dessous –

0

vous pouvez essayer

$("input").live("keypress", function (e) { 
    alert(e.keyChar); 
}); 
1

En réponse à votre commentaire:

Comme vous avez remarqué, la méthode live ne prend pas en charge l'événement blur.

Pour contourner ce problème, vous pouvez ajouter manuellement le gestionnaire à chaque fois que vous ajoutez un élément, comme celui-ci:

$("#recipientsDiv").click(function(){ 
    $(this).append('< input type="text" id="toInput" class="inlineBlockElement" style="border:0px none #ffffff; padding:0px; width:20px; overflow:hidden;" />') 

    $("#toInput") 
     .focus() 
     .blur(function(){ 
      $("#toInput").remove(); 
     }); 
}); 
+0

Merci, cela a bien fonctionné! Désolé pour la réponse tardive, vacances de Noël :-D – BinarySolo00100

Questions connexes