您好我正在尝试在用户提交时禁用所有按钮,因此在页面加载时,他们无法再次提交或执行其他操作。但该页面可能已经禁用了按钮,所以我不能简单地执行
$('.btn').attr('disabled', 'disabled');
然后
$('.btn').removeAttr('disabled');
如果表单无法进行不显眼的验证,我将不得不再次启用按钮。
在twitter-bootstrap中有.button('loading')和.button('reset')但是用“loading”替换了按钮文本,我更喜欢它们被禁用。
有一种简单的方法吗?
答案 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);