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
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()
;
});
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);
});
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
Ajouter le gestionnaire à l'élément, avant d'ajouter DOM - voir ma réponse ci-dessous –
vous pouvez essayer
$("input").live("keypress", function (e) {
alert(e.keyChar);
});
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();
});
});
Merci, cela a bien fonctionné! Désolé pour la réponse tardive, vacances de Noël :-D – BinarySolo00100
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