如何使用JS向添加的输入添加属性

时间:2011-11-15 11:49:47

标签: javascript jquery html

我需要将“bad”类的每个复选框添加到DOM中以获取“禁用”属性。外部代码添加了复选框,因此当复选框自己插入DOM时,我无法添加disabled属性。

我该怎么做?

已更新:我不知道何时会添加这些复选框。情景非常复杂。

5 个答案:

答案 0 :(得分:3)

****更新了代码**** - 请参见底部的注释。

此处建议的DOMNodeInserted事件不是跨浏览器,它在ie<中不可用。 9,甚至在9中它都是错误的。

一个简单的跨浏览器解决方案是设置一个每隔100毫秒检查一次的间隔,是否禁用按类名“坏”的所有复选框元素:

function CheckBadCheckboxes()
{
    var elems = document.getElementsByTagName("input");
    for (var i = 0; i < elems.length; i++) {
        if (elems[i].type == "checkbox" && /\b(bad)\b/i.test(elems[i].className) && !elems[i].disabled) {
            elems[i].disabled = true;
        }
    }
}
window.setInterval(CheckBadCheckboxes, 100);

此代码不要求您使用jQuery。

DOMNodeInserted还有另一个参数,它被弃用并降低了网页的性能。 PetersenDidIt在这里的评论中解释了它:

DOMNodeInserted equivalent in IE?

  

@Anurag注意:MutationEvent接口是在DOM Level 2 Events中引入的,但尚未在用户代理之间实现完全和互操作。此外,有人批评界面,如设计,引入了性能和实施挑战。正在开发一个新规范,目的是解决突变事件解决的用例,但是性能更高。因此,本规范描述了完整性的突变事件,但不推荐使用MutationEvent接口和MutationNameEvent接口。

DOMNodeInserted的错误行为:

http://help.dottoro.com/ljmcxjla.php

  

请注意,在Internet Explorer 9中,DOMNodeInserted事件是错误的,第一次插入节点时不会触发它。有关详细信息,请参阅以下示例。

<强>更新

我已经更新了我的代码,之前我使用了getElementsByClassName(),遗憾的是IE不支持它。 9,我用getElementsByTagName(“input”)替换它。

答案 1 :(得分:1)

这是一个例子:

$(document).bind("DOMNodeInserted", function(e) {
    var elm = $("input.bad", $(e.target));
    if(elm)
        elm.prop("disabled", "disabled");
});

注意:.prop是自jQuery 1.6以来。如果您使用的是旧版本,请使用attr()

答案 2 :(得分:1)

你知道“处理程序”会添加复选框吗?

如果是这样,你可以捕获它并放置“中间”功能(例如)

var MyTempFunct = OldHandler;

function MyNewFunct(){
    MyTempFunct();
    AddDisableds();
}

OldHandler = MyNewFunct;

虽然这个想法可能存在一些封闭问题。

答案 3 :(得分:1)

您可以使用此插件:http://docs.jquery.com/Plugins/livequery

解决问题。它将在添加和删除节点时调用函数。类似的东西:

$(".bad").livequery(function(){
    $(this).attr("disabled", "disabled");
}, $.noop);

答案 4 :(得分:0)

$(".bad").attr("disabled","disabled");