【问题标题】:jQuery - how to perform 'each' function on selected elements?jQuery - 如何对选定元素执行“每个”功能?
【发布时间】:2014-11-22 09:26:17
【问题描述】:

我想禁用屏幕上的所有按钮。

我试过了:

$(":button").each(function () {
    $(this).attr("disabled", true);
});

它不起作用,我认为我没有正确使用“this”这个词。

编辑:按钮位于表格单元格中

我尝试过类似的方法,但它不起作用:

$("#gameboard-table tbody tr td button").attr("disabled", true);

【问题讨论】:

  • $(":button").prop("disabled", true);
  • 检查我的答案并使用我的 jsfiddle 链接重现问题
  • 你也可以检查你的控制台或萤火虫调试器来判断它抛出了什么错误吗?
  • 你包括 jQuery 吗?
  • 该代码是否适用于动态 div ?

标签: jquery jquery-selectors each


【解决方案1】:

用于<button> 标签

$("button").attr("disabled", true);

对于<input type="button">标签

$("input[type=button]").attr("disabled", true);

FOR JQuery 1.6+ 将 attr 更改为 prop

或者简单地用普通的javascript编写禁用行

$("button, input[type=button]").each(function () {
    this.disabled=true;
});

更新:

如果您想禁用动态创建的按钮,请确保在按钮创建后运行代码,而不是在页面加载之前/页面加载时运行。

如果您使用的是 Ajax,则需要在使用按钮更新表格后禁用 ajax 成功功能上的按钮。

以下是您需要做的示例:

var options = {
    type: "POST",
    //...
    //more ajax vars 
    //...
    success: function (response) {

        //...
        //update your table with the buttons,
        //...

        //disable buttons using one of the methods from above:
        $("button, input[type=button]").each(function () {
            this.disabled=true;
        });
    }
};
$.ajax(options);

【讨论】:

  • 如果动态元素是在 ajax 的成功函数中创建的,那么是的,它会起作用。只要代码在动态元素创建之后运行,它就会工作
【解决方案2】:

无需使用each()。简直可以用

$(":button").attr("disabled", "disabled");

$(":button").attr("disabled", true);

<button>x</button>
<button>y</button>
<button>x</button>


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script>
    $(":button").attr("disabled", "disabled");
    //$("button").attr("disabled", true);
</script>

【讨论】:

  • 谢谢!它正在处理不在容器内的按钮。我忘了提到按钮在桌子上。我已经编辑了我的帖子。
【解决方案3】:

请尝试以下代码

//for <button> tags --> pls uncomment below line 
      $(":button").attr("disabled", "disabled");



    //Even your code works !!!! ---> uncomment below lines to see

    $(":button").each(function () {
       //$(this).attr("disabled", true);
    });

据我检查,它甚至在桌子内也能正常工作,

Here is my jsfiddle link : http://jsfiddle.net/hiteshbhilai2010/9tzhabzw/16/

已编辑:

请尝试下面的小提琴和代码

JSFIDDLE : http://jsfiddle.net/hiteshbhilai2010/9tzhabzw/32/

//for <button> tags --> pls uncomment below line 
 // $(":button").attr("disabled", "disabled");


$(":button").click(function(){
//alert(this.id);
})

$(".btn1").click(function(){
$("#mytable").append("<tr><td>"+'<button class = "btn" >new button</buttton>'+"</td></tr>");
})

//Even your code works !!!! ---> uncomment below lines to see


jQuery('body').on("click", "#click5", function() {
      $(".btn").each(function () {
       $(this).attr("disabled", true);
    });
})

jQuery('body').on("click", "#click6", function() {
      $(".btn").each(function () {
       $(this).attr("disabled", false);
    });
})

这就是为什么动态生成的 div 点击不起作用:

In jQuery, how to attach events to dynamic html elements?

Click event doesn't work on dynamically generated elements

【讨论】:

  • 如果我的 jsfiddle 链接可以帮助您理解您的问题,请告诉我
  • 谢谢。它有效,但不在我的桌子上。我的表是动态创建的,但我仅在创建后才运行此代码。动态创建的表会是问题吗?
  • 嗯好吧,让我动态试试吧
  • 我试过了,它只有在我开始使用页面时才起作用,但在 $(document).ready 函数上不起作用,知道为什么吗?此函数仅在表加载后执行。
  • 那么它将永远无法处理准备好的文档。您需要禁用 Ajax 成功功能上的按钮。我会用一个例子来更新我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多