获取DOM元素并动态添加事件侦听器

时间:2014-01-24 12:02:29

标签: javascript forms dom jsfiddle

我有一个函数,我通过将它的id传递给一个函数然后添加一个事件监听器来动态地尝试访问DOM元素,这个代码在函数外部完美地运行但是它在这里不起作用。函数看起来像这样:

 var count = 0;
 function disableOnCheck(radioId, textBoxId) {
var a = document.getElementById(radioId);
var atext = document.getElementByID(textBoxId)
alert(a.value);
a.addEventListener('click', function (event) {
    alert(count);
    count++;
    if (count === 2) {
        a.checked = false;
        atext.disabled = false;
        count = 0;
        return;
    }
    alert(a.value);
    atext.disabled = true;
});

};

我使用以下方式运行:

disableOnCheck( '一个', 'ATEST');

此外,我创建了一个小提琴http://jsfiddle.net/vamsiampolu/vKkUP/2/

3 个答案:

答案 0 :(得分:1)

JavaScript区分大小写。它应该是:

var atext = document.getElementById(textBoxId);

而不是

var atext = document.getElementByID(textBoxId);

如果您尝试使用它,您会在控制台中看到错误(未捕获TypeError:对象#没有方法'getElementByID')。

<强>更新

由于您在 disableOnCheck函数中传入了错误的变量,因此无法得到您想要的内容。

您有disableOnCheck('a', 'atest');
什么时候应该是disableOnCheck('a', 'atext');

请参阅Fiddle

答案 1 :(得分:0)

document.getElementByID更改为document.getElementById

答案 2 :(得分:-1)

首先,您尝试通过错误的方法获取元素Id,javascript是区分大小写的语言

这是一个工作代码:

var count = 0;

function disableOnCheck(radioId, textBoxId) {

    var a = document.getElementById(''+radioId);
    var atext = document.getElementById(''+textBoxId); // you were using getElementByID which is wrong
    alert(a.value);;
    a.addEventListener('click', function (event) {
        alert(count);
        count++;
        if (count === 2) {
            a.checked = false;
            atext.disabled = false;
            count = 0;
            return;
        }
        alert(a.value);
        atext.disabled = true;
    });
};

disableOnCheck('a','atext');  // HERE you were using `atest` which is not a element id it's `atext`

小提琴链接是here.