【问题标题】:Javascript/jQuery disable buttons by classnameJavascript/jQuery 按类名禁用按钮
【发布时间】:2014-08-21 02:07:48
【问题描述】:

我有一个复杂的 Javascript 应用程序,它根据应用程序状态和只读权限填充一个按钮:

但本质上,当按钮添加到文档中时,它看起来像这样:

<button type="button" id="..." class="btn btn-link btn-table-action btn-table-add-row" title="Add"></button>

id 是自动生成的,事先不知道。此外,我们还有几个这样的按钮,它们都需要同时禁用/启用。

我尝试了以下方法,但没有成功:

$(".btn-table-add-row").prop('disabled', true);

setInterval(function() {
  $(".btn-table-add-row").prop('disabled', true);
}, 1000);

var elems = document.getElementsByClassName("btn-table-add-row");
console.log(elems);
for(var i = 0; i < elems.length; i++) {
  elems[i].disabled = true;
}

以上示例都是在页面加载时尝试的,在文档加载并且按钮可见之后。我可以阅读最后一个示例中的 elems 列表,但它们不会禁用。有什么建议吗?

【问题讨论】:

  • 您使用的是文档就绪处理程序吗?你的代码是正确的
  • 你能为此制作一个小提琴吗?
  • @Satpal 是的,代码在大多数情况下看起来都是正确的。我认为这与按钮在DOM中生成的顺序有关
  • @j08691 - 我可以创建一个小提琴,但它不能准确表示我的问题,因为它是一个拥有数千行代码的企业应用程序,并且 DOM 渲染是由内部 javascript 完成的引擎。
  • 如果您检查其中一个按钮,是否存在 disabled 属性?

标签: javascript jquery css button disabled-input


【解决方案1】:

正如 Satpal 和您自己所提到的,代码是正确的(至少我尝试过的第一句话),所以问题可能出在按钮的创建顺序上,或者可能在其他执行过程中出错导致你的代码无法运行的 JS 代码。

我还为此创建了一个小提琴,您的代码正在运行:http://jsfiddle.net/gx7zC/

$(document).ready(function(){
var btnAmount = Math.floor((Math.random() * 10) + 1);
for(var i=0; i<btnAmount;i++){
    var newButton = document.createElement("button");
    $(newButton).addClass("btn btn-link btn-table-action btn-table-add-row");
    newButton.id = "btn"+i;
    $(newButton).text("btn"+i);
    document.body.appendChild(newButton);
}
$(".btn-table-add-row").prop('disabled', true);

});

【讨论】:

    【解决方案2】:

    我创建了一个小提琴http://jsfiddle.net/mfleshman/yR9U3/

    <button type="button" class="btn btn-link btn-table-action btn-table-add-row" title="Add">test</button>
    
    <button type="button" class="btn btn-link btn-table-action btn-table-add-hide" title="Add">test</button>
    
    $(".btn-table-add-row").prop('disabled', true);
    $(".btn-table-add-hide").hide();
    

    您说这些按钮是“可见的”。除非您有其他 CSS 选择器执行此操作,否则禁用按钮不会将其从页面中隐藏。

    如果你想隐藏你需要在元素上调用 .hide() 的按钮。

    【讨论】:

    • 我想他只是说当他运行这段代码时它们是可见的。
    • 对造成的混乱表示歉意。我不想隐藏按钮,只是禁用它们并阻止它被点击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    相关资源
    最近更新 更多