我有这个功能,用户点击后禁用输入:
$('.click-off').click(function () {
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
});
我的输入有一个javascript确认:
<input type="submit" class="click-off" onclick="return confirm('Are you sure?');" value="Delete">
即使我在确认框中点击“取消”,也会调用$('。click-off')。click()事件,该按钮将被禁用。
$('。click-off')。click()被很多输入使用,所以确认不能在其中。
如何查看$('。click-off')中的确认返回。点击事件?或者甚至阻止$('。click-off')。点击事件来调用?
答案 0 :(得分:8)
为什么你首先将这些逻辑分开?以下是解决问题的两种方法:
将逻辑组合成一个方法:
$('.click-off').click(function () {
// escape here if the confirm is false;
if (!confirm('Are you sure?')) return false;
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
});
使用全局变量(或最好是对象):
var clickOffConfirmed = false;
<input type="submit" class="click-off" onclick="clickOffConfirmed = confirm('Are you sure?');" value="Delete" />
$('.click-off').click(function () {
// escape here if the confirm is false;
if (!clickOffConfirmed) return false;
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
});
答案 1 :(得分:1)
你应该避免使用jquery和onclick挂钩动作,主要是因为你的代码很快就会丢失。
例如,你可以这样做:
$('.click-off').click(function () {
var r=confirm("Are you sure?")
if (r==true)
{
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
}
else
{
//nothing to do here
}
});
删除onclick事件。所以你将把所有东西放在一个地方。
在你的例子中,你对click事件挂了两次,尽管彼此的结果都会被解雇。
答案 2 :(得分:1)
尝试捕获确认框,然后禁用该按钮。
$('.click-off').click(function () {
var r=confirm("Press a button");
if (r==true)
{
$(this).attr('disabled', 'disabled');
}
else
{
}
});
也删除了onclick