【问题标题】:onclick="return confirm('')" working with $('.class').click(function () {});onclick="return confirm('')" 与 $('.class').click(function () {});
【发布时间】:2012-12-27 17:58:00
【问题描述】:

我有这个功能可以在用户点击后禁用输入:

$('.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 事件中的确认返回?甚至阻止调用 $('.click-off').click 事件?

【问题讨论】:

    标签: jquery onclick confirm


    【解决方案1】:

    为什么你首先要把这些逻辑分开?以下是解决问题的两种方法:

    将逻辑组合成一个方法:

    $('.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;
    });
    

    【讨论】:

    【解决方案2】:

    尝试捕获确认框,然后禁用按钮。

    $('.click-off').click(function () {
      var r=confirm("Press a button");
      if (r==true)
      {
        $(this).attr('disabled', 'disabled');
      }
      else
      {
    
      }
    });
    

    同时移除 onclick

    【讨论】:

    • $('.click-off').click() 是一个全局函数,被很多输入使用...我不想把确认放在里面!跨度>
    【解决方案3】:

    您应该避免使用 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 事件,尽管结果相互影响,但它们都被触发了。

    【讨论】:

    • $('.click-off').click() 是一个全局函数,被很多输入使用...我不想把确认放在里面!跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多