JavaScript以编程方式设置onchange事件

JavaScript以编程方式设置onchange事件,javascript,Javascript,调试输出: 调试输出清楚地表明未设置onchange值 我的错在哪里 调试输出清楚地表明未设置onchange值 不,没有。调试输出仅显示HTML,因为您正在显示: function __setOnchangeEvent() { var inputs = document.getElementsByTagName('input'); if (inputs) { for (var i = 0; i < inputs.length; i++)

调试输出:

调试输出清楚地表明未设置onchange值

我的错在哪里

调试输出清楚地表明未设置onchange值

不,没有。调试输出仅显示HTML,因为您正在显示:

function __setOnchangeEvent()
{
    var inputs = document.getElementsByTagName('input');
    if (inputs)
    {
        for (var i = 0; i < inputs.length; i++)
        {
            if (inputs[i].id.indexOf('display_hidden') >= 0)
            {
                console.debug("outer1: " + inputs[i].outerHTML);
                //inputs[i].addEventListener("onchange", __hideInfoIcon);
                inputs[i].onchange = '__hideInfoIcon';
                console.debug("outer2: " + inputs[i].outerHTML);
            }
        }
    }
} __setOnchangeEvent();
如果仅仅因为设置了事件处理程序而希望看到HTML以某种方式发生更改,那么您就错了。HTML和DOM事件是两件不同的事情

您可以在内嵌HTML中分配事件处理程序,但事件本身不是HTML显示的一部分

您可以通过调用该事件来测试事件处理程序,而不是查看HTML标记

我的错在哪里

除上述情况外,这看起来也不对:

console.debug("outer2: " + inputs[i].outerHTML);
这不是一个函数,它只是一个字符串。如果有同名函数,请将其用作事件处理程序:

inputs[i].onchange = '__hideInfoIcon';

我从输入[I]中删除了引号;当我检查元素时,onchange函数仍然不存在。@Zyre:您是如何检查元素的?更改事件是否不是由函数实际处理的?JavaScript控制台中是否存在错误?调试时,是否执行该函数?听起来你仍然期望HTML本身会发生变化,但这不会发生。除了你错误的假设之外,这是否真的在某种程度上失败了?我正在通过Chrome inspect元素检查元素。不,更改事件根本没有触发。目前,HideInfo函数是一个用于测试的简单警报。表单加载时会弹出警报不确定原因,因为我正在将函数分配给元素的onchange,而不是启动它,但当输入字段实际更改时,它不会启动。@Zyre:您可能想用代码打开一个问题,复制您当时看到的问题,因为根据您上次的描述,事件处理程序的创建和分配方式存在一些错误,这似乎是合理的。当前的问题根本没有显示事件处理程序函数,而是提出了一个完全不同的问题。明白。谢谢你抽出时间来帮忙。感谢您的意见和指导。
inputs[i].onchange = __hideInfoIcon;