onclick =“return confirm('')”使用$('。class')。click(function(){});

时间:2012-12-27 17:58:00

标签: jquery onclick confirm

我有这个功能,用户点击后禁用输入:

$('.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')。点击事件来调用?

3 个答案:

答案 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