I just submitted a patch for this bug. As a temporary workaround, you could fix this by using an anonymous function wrapper, like so:

el.bind('click', data, function() {
    return my_func.apply(this, arguments);
});

or in the context of your example:

$(
    "<li style=\"display: none\">"+
    "["+task.client.code+"] "+task.project.name+
    "<br/>"+task.name+"<br/>"+
    "<a class='removeTask' href='#'>Remove</a>"+
    "</li>"
).find("a.removeTask").bind('click', {taskid: task.id}, function(){
    return remove_task.apply(this, arguments);
}).end().appendTo("#actSessionList");

Hope that helps.

Cheers,

--
Jesse Skinner
http://www.thefutureoftheweb.com

dec wrote:
On Apr 17, 8:22 pm, dec <[EMAIL PROTECTED]> wrote:
Hi list,

I'm trying to add items to an unordered list using jQuery. This is
something triggered by another event, so it cannot be done within my
HTML templating engine whilst building the page.

I also wish to add an 'a' element within the list item which I can
then use to remove the item and post an AJAX request at a later point.

I had come up with the following with some assistance on #jquery:

                 $(
                     "<li style=\"display: none\">"+
                     "["+task.client.code+"] "+task.project.name+
                     "<br/>"+task.name+"<br/>"+
                     "<a class='removeTask' href='#'>Remove</a>"+
                     "</li>"
                  ).find("a.removeTask").bind('click', {taskid:
task.id}, remove_task
                  ).end().appendTo("#actSessionList");

My understanding is that this should: build the HTML, find any
elements matching 'a.removeTask' within that HTML and bind them to
remove_task() passing taskid within event.data and then add the
initial HTML to my unordered list (#actSessionList).

This seems to work fine when I call it the first time, but for any
subsequent calls (with new data in the 'task' variable),
the .bind(...) call overwrites the binding of the previous items and
causes all their 'Remove' links to call remove_task with the wrong
value of task.id.

Is this incorrect behavior for the code I've written or am I not
grasping the concept completely? My initial thought is that I'm not
being explicit enough when selecting the 'a' element to _only_ receive
the single element within that list item, but I'm too new to
JavaScript to know how to debug this.

Any help or comments are much appreciated.

Regards,
Tom


Ah hah, just discovered that this is a bug! (http://dev.jquery.com/
ticket/935)

So I'm not crazy after all... well maybe just a little... :)


-Tom



Reply via email to