Javascript 如何退出单击功能?
所以在这个例子中,我有一个隐藏字段和一个名为ban user的按钮的表单。单击“禁止用户”按钮时,它会提交隐藏字段中的值,并将ajax请求发送到Javaservlet。如果成功,将禁止该用户,并将按钮更改为“unban user”。问题是,当我单击一次按钮并禁止一个用户,然后再次尝试单击该按钮以取消禁止时,我仍然处于禁止用户的单击事件中,我收到警告“您确定要禁止id为…?”的用户吗?”。如何退出click事件,以确保再次单击按钮时,它从函数的开头开始,而不是在click函数内部开始?我试过使用“return;”正如你在下面看到的,但这不起作用Javascript 如何退出单击功能?,javascript,jquery,ajax,Javascript,Jquery,Ajax,所以在这个例子中,我有一个隐藏字段和一个名为ban user的按钮的表单。单击“禁止用户”按钮时,它会提交隐藏字段中的值,并将ajax请求发送到Javaservlet。如果成功,将禁止该用户,并将按钮更改为“unban user”。问题是,当我单击一次按钮并禁止一个用户,然后再次尝试单击该按钮以取消禁止时,我仍然处于禁止用户的单击事件中,我收到警告“您确定要禁止id为…?”的用户吗?”。如何退出click事件,以确保再次单击按钮时,它从函数的开头开始,而不是在click函数内部开始?我试过使用“
$(document).delegate('form', 'click', function() {
var $form = $(this);
var id = $form.attr('id');
var formIdTrim = id.substring(0,7);
if(formIdTrim === "banUser") {
$(id).submit(function(e){
e.preventDefault();
});
var trimmed = id.substring(7);
var dataString = $form.serialize();
var userID = null;
userID = $("input#ban"+ trimmed).val();
$("#banButton"+ trimmed).click(function(e){
e.preventDefault();
//get the form data and then serialize that
dataString = "userID=" + userID;
// do the extra stuff here
if (confirm('Are you sure you want to ban the user with the id of ' + trimmed +'?')) {
$.ajax({
type: "POST",
url: "UserBan",
data: dataString,
dataType: "json",
success: function(data) {
if (data.success) {
//$("#banUser"+trimmed).html("");
$('#banUser'+trimmed).attr('id','unbanUser'+trimmed);
$('#ban'+trimmed).attr('id','unban'+trimmed);
$('#banButton'+trimmed).attr('value',' UnBan User ');
$('#banButton'+trimmed).attr('name','unbanButton'+trimmed);
$('#banButton'+trimmed).attr('id','unbanButton'+trimmed);
$form = null;
id = null;
formIdTrim = null;
return;
}else {
alert("Error");
}
}
});
} else {
}
});
}
else if(formIdTrim === "unbanUs") {
//Stops the submit request
$(id).submit(function(e){
e.preventDefault();
});
var trimmed = id.substring(9);
var dataString = $form.serialize();
var userID = null;
userID = $("input#unban"+ trimmed).val();
$("#unbanButton"+ trimmed).click(function(e){
e.preventDefault();
//get the form data and then serialize that
dataString = "userID=" + userID;
// do the extra stuff here
if (confirm('Are you sure you want to UNBAN the user with the id of ' + trimmed +'?')) {
$.ajax({
type: "POST",
url: "UserUnban",
data: dataString,
dataType: "json",
success: function(data) {
if (data.success) {
//$("#banUser"+trimmed).html("");
$('#unbanUser'+trimmed).attr('id','banUser'+trimmed);
$('#unban'+trimmed).attr('id','ban'+trimmed);
$('#unbanButton'+trimmed).attr('value',' Ban User ');
$('#unbanButton'+trimmed).attr('name','banButton'+trimmed);
$('#unbanButton'+trimmed).attr('id','banButton'+trimmed);
$form = null;
id = null;
formIdTrim = null;
return;
}else {
alert("Error");
}
}
});
} else {
}
});
}
});
尝试:
$(“#banButton”+修剪)。关闭('click')。打开('click'),(函数(e){
我也遇到过类似的问题,这是一个解决方案这段代码非常混乱。尝试在按钮上设置一个类,如“禁止”和“禁止”,当用户单击按钮时,您可以更改该类并做您想做的事情。您可以将html、javascript代码放在JSFIDLE.net中…然后我们可以查看它。而不必查看您的setup、 很难找到您期望的解决方案。此外,我觉得有一种类型,但我可能是错的。是否应该…否则如果(formIdTrim==“unbanUser”),我现在将它放在JSFIDLE上,但由于ajax,它不会运行或其他任何东西。关于formIdTrim,如果(formIdTrim==“unbanUs”),这是正确的,因为当我声明formIdTrim时,我使用var formIdTrim=id.substring(0,7);。unbanUs是它的前7个字母,它很接近,但当我再次单击它时,会出现错误的警报,但当我单击警报上的取消并再次单击禁止按钮时,会出现正确的警报。我说的有意义吗?