将属性添加到导致attr的HTML元素不是一个函数

时间:2016-04-04 11:19:32

标签: javascript jquery html this

我有一个ID为containerButtons的HTML元素,其数量为labelsdiv

<div class="button-grp" id="containerButtons">
    <label>Selector 1</label>
    <label>Selector 2</label>
    <label>Selector 3</label>
    <div class="time-container">
        <input type="number" min="0" max="24" step="1" value="00" id="time-hour" disabled="disabled">
        <span>:</span>
        <input type="number" min="0" max="60" step="1" value="00" id="time-minutes" disabled="disabled">
    </div>
</div>

以上是通过文件中的JS函数buttons.js。

创建的

buttons.js:

function ButtonsPanel() {

    var that = this;
    this.buttonsEl = document.createElement('div');

    var baseBtn = d3.select(this.buttonsEl);

    var containerBtns = baseFilter.append('div')
        .classed({'button-grp': true})
        .attr({id:'containerButtons'});


    var tmp = containerBtns.append('div')
        .classed({'time-container': true});

    tmp.append('input')
        .attr({type: 'number', min: '0', max: '24', step:'1', value:'00', id:'time-hour', 'disabled': 'disabled'});

    tmp.append('span')
        .text(':');

    tmp.append('input')
        .attr({type: 'number', min: '0', max: '60', step:'1', value:'00', id:'time-minutes', 'disabled': 'disabled'});

    this.timeInputs = tmp;

    var timeHours = this.timeInputs[0][0].children[0];
    // returns <input type="number" min="0" max="24" step="1" value="00" id="time-hour" disabled="disabled">
    var timeMins = this.timeInputs[0][0].children[2];
    // returns <input type="number" min="0" max="60" step="1" value="00" id="time-minutes" disabled="disabled">

}

在buttons.js中,我有一个在load toggleVisability上调用的方法:

ButtonsPanel.prototype.toggleVisability = function() {

    var that = this;

    this.visabilityApply('#containerButtons', function(num) {
        if (!num) {
            alert(that.timeInputs[0][0].children[0]);
            that.timeInputs[0][0].children[0].attr({'disabled': true});
        }
        else {
            alert(that.timeInputs[0][0].children[0]);
            that.timeInputs[0][0].children[0].attr({'disabled': null});
        }
    });
};

有了上述内容,我收到错误:

TypeError: that.timeInputs[0][0].children[0].attr is not a function

然而,如果我申请:

that.timeInputs.attr({'disabled': true});

以上工作正常,但是,我想在输入字段上切换禁用的属性。我正在使用jQuery。

3 个答案:

答案 0 :(得分:4)

attr()是一个jQuery函数,因此需要在jQuery 上下文上调用。

在你的情况下:

that.timeInputs[0][0].children[0]

返回不公开attr()函数的本机DOM元素,因此错误(而that.timeInputs仍然引用jQuery上下文)。

请改为尝试:

$(that.timeInputs[0][0].children[0]).attr({'disabled': true});

答案 1 :(得分:1)

如果您仍希望使用Javascript,则可以使用setAttribute()之类的

that.timeInputs[0][0].children[0].setAttribute("disabled", "true");

答案 2 :(得分:1)

删除jquery中的变量{}包裹变量

$(that.timeInputs[0][0].children[0]).attr('disabled': true)