jquery click once, then disable/enable element
i have many rows
- List item - delete
- List item - delete
- List item - delete
like above 3 rows.. it has delete link, on click i want to disable that link, until i get response from ajax saying ok delete it or no not ok, dont delete it, user is not an owner, then i have to give the element back to clickable.. if that makes sence
开发者_StackOverflow中文版basically preventing element on click and then restoring its element on error from backend.
what methods do i need to use for this? im using live method, if i use die, then how will i restore again?
As requested, here's a version that uses links instead of buttons.
<ol>
<li id="item-1">List item <a href="delete.php?1">Delete</a></li>
<li id="item-2">List item <a href="delete.php?2">Delete</a></li>
<li id="item-3">List item <a href="delete.php?3">Delete</a></li>
</ol>
And the JS support for this would be
$("ol").click(function(evt){
if (evt.target.nodeName != "A") {
return true;// it's not the delete link, so we don't have to do anything
}
var listItem = $(evt.target.parentNode);
if (listItem.hasClass("disabled")) {
return true;// we're still processing this already deleted list item
}
listItem.addClass("disabled");// lock the list item (perhaps visually too)
// set up the AJAX call
$.post("evaluator.php", {listId : listItem.attr("id")}, function(data){
// let's suppose that we get "1" if the user can perform the procedure
if (data == "1") {
// request approved, remove the list item
listItem.fadeOut("fast", function(){
$(this).remove();
});
} else {
// release the lock
listItem.removeClass("disabled");
// request denied, rollback
alert("Sorry, you can't do that.");
}
});
// here we stop the click event, so the URL in href won't be called.
// you can "disable" a link by returning false on a click event
// e.g. <a href="url" onclick="return false">disabled link</a>
return false;
});
The best way would be to create a separate function to handle the AJAX call, so you could do
$(".delete").bind("click", deleteItem);
And in your deleteItem function you could unbind that by doing
function deleteItem(delBtn) {
$(delBtn).unbind("click", deleteItem);
//ajax call
onerror: function() {
$(delBtn).bind("click", deleteItem);
}
}
edit: Realized you're using live, which is just another version of bind. So in the above example you can just switch the bind keyword for live, and unbind for die. And it should do the same (:
加载中,请稍侯......
精彩评论