So I have a button inside a list row that is used to delete the row from the page (calls ajax stuff to delete the object represented by the row, but that’s not important for my question). The whole row is bound to a click event which would redirect to another page.
In other words, the containing row is click bound and the inner button is click bound, which is causing me problems since clicking the inner button also triggers the containing row click event (as it should).
I’ve tried binding a hover event for all delete buttons that unbinds the row click on mouseover, and rebinds it on mouseout, like this pseudocode below:
$('.delete-button').hover(
function() {
$('.list-row').unbind();
$('.delete-button').bind('click', function() { /* delete action */ });
},
function() {
$('.delete-button').unbind();
$('.list-row').bind('click', function() { /* list row action */ });
}
);
This isn’t working very well, and I’m convinced there is a better way to approach it. Should I take the button out of the containing list-row? It’s way easier to have it in there since my list row contains custom attributes that have data I need for the ajax calls and I can just var rid = $('.delete-button).parent().attr('row-id'); to get the data, but I’m not opposed to change 🙂
Thanks!
In your click event handler for the button, you need to call
e.stopPropagation(). This will prevent the event from bubbling up the DOM tree. More info here: http://api.jquery.com/event.stopPropagation/edit: you already accepted (thanks!), but maybe this code snippet would help explain some of the concepts better: