J'ai eu beaucoup de mal à attacher l'événement de clic à un objet JQuery avant de l'ajouter au DOM.
En gros, j'ai ce bouton que ma fonction renvoie, puis je l'ajoute au DOM. Ce que je veux, c'est retourner le bouton avec son propre gestionnaire de clic. Je ne veux pas le sélectionner dans le DOM pour attacher le gestionnaire.
Mon code est le suivant :
createMyButton = function(data) {
var button = $('<div id="my-button"></div>')
.css({
'display' : 'inline',
'padding' : '0px 2px 2px 0px',
'cursor' : 'pointer'
}).append($('<a>').attr({
//'href' : Share.serializeJson(data),
'target' : '_blank',
'rel' : 'nofollow'
}).append($('<image src="css/images/Facebook-icon.png">').css({
"padding-top" : "0px",
"margin-top" : "0px",
"margin-bottom" : "0px"
})));
button.click(function () {
console.log("asdfasdf");
});
return button;
}
Le bouton qui est retourné est incapable d'attraper l'événement de clic. Cependant, si je fais ceci (après que le bouton soit ajouté au DOM) :
$('#my-button').click(function () {
console.log("yeahhhh!!! but this doesn't work for me :(");
});
Ça marche... mais pas pour moi, pas ce que je veux.
Cela semble être lié au fait que l'objet ne fait pas encore partie du DOM.
Oh ! au fait, je travaille avec OpenLayers, et l'objet DOM auquel j'ajoute le bouton est un OpenLayers.FramedCloud (qui ne fait pas encore partie du DOM mais qui le sera une fois que quelques événements seront déclenchés).
0 votes
Regardez dans le .on() de jquery. C'est pour attacher des gestionnaires d'événements au moment de l'exécution.
1 votes
Essayez peut-être de relier
click
à la création de l'élément ?0 votes
@AndrewPeacock qu'entendez-vous par "clic obligatoire à la création" ?
0 votes
@danielrvt A la fin de la création, faites quelque chose comme
$("#my-button").bind("click");
Je pense que vous devrez le délier à un moment donné.3 votes
J'ai un problème similaire avec leaflet. Il semble être lié au fait que la carte désactive la propagation des clics. Cela pourrait-il être le cas pour votre problème ?