Tuesday 11 June 2019

javascript - Attaching click event to a JQuery object not yet added to the DOM





I've been having a lot of trouble attaching the click event to a JQuery object before adding it to the DOM.



Basically I have this button that my function returns, then I append it to the DOM. What I want is to return the button with its own click handler. I don't want to select it from the DOM to attach the handler.



My code is this:



createMyButton = function(data) {

var button = $('
')
.css({

'display' : 'inline',
'padding' : '0px 2px 2px 0px',
'cursor' : 'pointer'
}).append($('').attr({
//'href' : Share.serializeJson(data),
'target' : '_blank',
'rel' : 'nofollow'
}).append($('').css({
"padding-top" : "0px",
"margin-top" : "0px",

"margin-bottom" : "0px"
})));

button.click(function () {
console.log("asdfasdf");
});

return button;
}



The button that is return is unable to catch the click event. However, if I do this (after the button is added to the DOM):



$('#my-button').click(function () {
console.log("yeahhhh!!! but this doesn't work for me :(");
});


It works... but not for me, not what I want.




It seems to be related to the fact that the object is not yet a part of the DOM.



Oh! By the way, I'm working with OpenLayers, and the DOM object that I'm appending the button to is an OpenLayers.FramedCloud (Which is not yet a part of the DOM but will be once a couple of events are triggered.)


Answer



Use this. You can replace body with any parent element that exists on dom ready



$('body').on('click', '#my-button', function () {
console.log("yeahhhh!!! but this doesn't work for me :(");
});



Look here http://api.jquery.com/on/ for more info on how to use on() as it replaces live() as of 1.7+.



Below lists which version you should be using




$(selector).live(events, data, handler); // jQuery 1.3+



$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+




$(document).on(events, selector, data, handler); // jQuery 1.7+



No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...