Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I change the HTML content of a dynamically generated element in Jquery

I long ago learned that for dynamically added content, attaching listeners and events like click and focus must be done by using $(document).on('click','[ID]', function(){});.... etc.

However, what I'm trying to do is change the HTML value of a specific element that has been dynamically added.

For instance, I use this code to add the element:

$('.friend_chooser_pop').html("<div id='#friend_chooser_list'></div>"); 

Now how do I access #friend_chooser_list and set its HTML value? Neither one of these works:

$('#friend_chooser_list').html('something');
document.getElementById('friend_chooser_list').innerHTML = 'something';
like image 434
not_a_generic_user Avatar asked Mar 31 '14 13:03

not_a_generic_user


2 Answers

This should work, your problem is that you included a # in your id, this is not needed here.

This would work.

$('.friend_chooser_pop').html("<div id='friend_chooser_list'></div>");
$('#friend_chooser_list').html('something');

If this is your intend to include # in the ID and you want it to work you can use it like this:

$("#\\#friend_chooser_list").html('something');

It's escaping the # and allowing jQuery to get the right element anyway. I would not recommend this, it can get confusing pretty fast.

like image 131
Allan Kimmer Jensen Avatar answered Oct 31 '22 19:10

Allan Kimmer Jensen


When you dynamically add elements to the page, you have to refresh the event listeners.

You should group all your event listeners in a function :

function bindEvents(){
    $('*').off();

    $('a.fonction').click(function(){
        /* ... */
    }
}

The first line (.off()) remove all the listener on the page (* = all the element, like in CSS).

Then just recall this function when you change the content of the page.

Have fun !

like image 25
antoinestv Avatar answered Oct 31 '22 19:10

antoinestv