如何禁用未知数量的按钮并知道哪些按钮,以便我以后可以再次启用它们?

时间:2013-05-23 22:26:39

标签: jquery twitter-bootstrap unobtrusive-validation

您好我正在尝试在用户提交时禁用所有按钮,因此在页面加载时,他们无法再次提交或执行其他操作。但该页面可能已经禁用了按钮,所以我不能简单地执行

$('.btn').attr('disabled', 'disabled'); 

然后

$('.btn').removeAttr('disabled');

如果表单无法进行不显眼的验证,我将不得不再次启用按钮。

在twitter-bootstrap中有.button('loading')和.button('reset')但是用“loading”替换了按钮文本,我更喜欢它们被禁用。

有一种简单的方法吗?

5 个答案:

答案 0 :(得分:1)

找到尚未禁用的类,给它们一个类并禁用它们:

$('.btn').filter(function() {
   return !this.disabled;
}).addClass('disabled_now').prop('disabled', true);

再次启用它们,你会这样做:

$('.disabled_now').removeClass('disabled_now').prop('disabled', false);

答案 1 :(得分:1)

由于jQuery 流利,因此需要

$('.btn').attr('disabled', 'disabled'); 

返回已更改项目的数组。你可以这样存储:

var disabledBtns = $('.btn').attr('disabled', 'disabled'); 

<强>更新

由于您只想获取尚未禁用的按钮,请按以下方式过滤它们:

var disabledBtns = $('.btn:not(:disabled)').attr('disabled', 'disabled'); 

这样你就可以保存和禁用已启用的按钮。

答案 2 :(得分:1)

尝试:

var $non_disabled_buttons = $('.btn').filter(function() {
    return !$(this).is(':disabled');
}).attr('disabled', true);

然后重新启用它们:

$non_disabled_buttons.attr('disabled', false); 

答案 3 :(得分:0)

虽然其他答案都有优点,但他们使用变量来存储禁用对象列表。这对我来说似乎有点不合适,因为DOM可以在不同的时间进行修改,这可能会使存储在JS变量中的控件列表无效。

我的解决方案是将类应用于您禁用的按钮,并在想要再次启用它们时在jQuery选择器中使用该类。类似的东西:

// disable buttons
$(':button').not('[disabled]').addClass("dis_temp").attr("disabled","disabled");

// do something
//...

// enable buttons disabled above
$('.dis_temp').attr("disabled", null).removeClass("dis_temp");

使用DOM类对对象进行分组似乎是相当常见的做法。

在大多数情况下,我更喜欢单独保留按钮并使用模态jQueryUI对话框。这是我猜的风格问题。

答案 4 :(得分:0)

假设您正在使用jQuery 1.6及更高版本。您应该使用.prop()方法

$(".btn").prop('disabled', false);
$(".btn").prop('disabled', true);