【问题标题】:Unbind "click" for "onclick" attribute取消绑定“onclick”属性的“click”
【发布时间】:2014-05-22 23:37:36
【问题描述】:

我有以下 html 元素:

<span class="btn btn-mini btn-primary row-remove" onclick="someFunction(param1, param2)">
   <i>Remove</i>
</span>

当我做其他事情时,我会禁用页面上的这些按钮:

$(".row-remove").attr("disabled", true);

问题是,如果您单击禁用的按钮,它仍然会触发“onclick”,这会导致一个大问题(按钮被禁用是有原因的)。

还有什么方法可以“禁用” onclick 事件吗?我已经尝试解除绑定“点击”,但除此之外它不起作用(它是 onclick,而不是 bind())。

谢谢。

最好的,加里

【问题讨论】:

  • 请确认元素,这是一个类吗?如果是这样,您可以检查您的元素,然后单击删除按钮,您将看到属性 disabled 将出现在 row-remove 类元素中。您可以尝试使用 $(".row-remove").attr("disabled", "disabled"); (我不确定两者对我来说是否一样)。这只是一个建议。

标签: jquery html onclick javascript


【解决方案1】:

只有表单元素可以具有disabled 属性。打开和关闭点击事件可能会变得复杂。我建议您向元素添加 data 属性以显示元素的状态。像这样的:

$('.row-remove').data('disabled', true);

function someFunction(param1, param2) {
    if (!$('.row-remove').data('disabled')) {
        // element is not disabled, continue on...
    }
}

我还建议使用 javascript 附加点击事件以保持更好的关注点分离:

<span class="btn btn-mini btn-primary row-remove" data-param1="param1" data-param2="param2">
   <i>Remove</i>
</span>
$('row-remove').click(function() {
    var $el = $(this);
    var param1 = $el.data('param1'); // = 'param1'
    var param2 = $el.data('param2'); // = 'param2'

    if (!$el.data('disabled')) {
        // element is not disabled, continue on...
    }
});

【讨论】:

  • 谢谢,效果很好!关于您的建议,我选择了 onclick,因为我使用的主干模板会根据条件附加此 onclick 事件,并从模型中创建 param1 和 param2。我实际上并不知道“data-param1=..”,这非常有用,谢谢。我现在用这个更新我的代码,它更干净=)
  • @Gary 没问题,很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多