【问题标题】:getElementByID.onchange not working after i update html with = innerHTML在我使用 = innerHTML 更新 html 后,getElementByID.onchange 不起作用
【发布时间】:2020-07-04 12:18:17
【问题描述】:

我的起始 html 如下所示:

<label> Names: </label><br>
<input type="text" class="form-control name" placeholder="name1" id="name1" name ="name1"><br>

我有一个捕获 html 的变量:

var html =   "<label> Names: </label><br><input type=\"text\" class=\"form-control name\" placeholder=\"name1\" id=\"name1\" name =\"name1\"><br>"

然后我有一个 onchange 运算符,当第一行中有文本时,它会执行几个函数。 .onchange 第一次被很好地拾取并运行后续功能。我最后多了一行:

for (n = 1; n < inputLength+1 ; ++n) {
    var test2 = document.getElementById(dude+n);
    test2.onchange = forFunction
    }

  function forFunction() {
    for (m = 1; m < inputLength+1 ; ++m) {
      var test = document.getElementById(dude+m)
      if (test.value != "") {
        var txt = "<input type=\"text\" class=\"form-control name\" placeholder="+dude+(m+1)+" id="+dude+(m+1)+" name="+dude+(m+1)+"><br>";
        document.getElementById('group_names').innerHTML = updateHTML(txt);
        //function updateHTML(txt)
      }
    }
  }

  var html =   "<label> Names: </label><br><input type=\"text\" class=\"form-control name\" placeholder=\"name1\" id=\"name1\" name =\"name1\"><br>"
  function updateHTML(txt) {
    html = html + txt;
    return html;
  }

问题是,在完成所有这些之后,我最终得到了两个所需的输入行:name1 和 name2。但是,当我第二次在这些字段中输入文本时,不会拾取 .onchange。但是当我检查和查看 html 时,这些元素在 html 中。

还有,当我

console.log(inputFormDiv.getElementsByTagName('input').length);

在我第一次运行函数后(在我第一次更改输入字段中的值时),输入的长度从 1 增加到 2,以便正确识别,而不是 .onchange。

想法?

【问题讨论】:

    标签: javascript onchange innerhtml getelementbyid


    【解决方案1】:

    onchange 仅在添加到 html 上的属性并且用户点击文本框时才会起作用,例如:

    <input onchange="forFunction()" type="text" class="form-control name" placeholder="name1" id="name1" name ="name1">
    

    在 JavaScript 代码中添加 onchange 事件。将更改事件添加到 addEventListener 例如:

    var test2 = document.getElementById(dude+n);
    test2.addEventListener('change', forFunction, false)
    

    但是,如果您希望在用户键入键时触发事件,请使用 keypress 事件。例如:

     var test2 = document.getElementById(dude+n);
     test2.addEventListener('keypress', forFunction, false
    

    一个基本的例子:https://jsfiddle.net/xrL6y012/1/

    【讨论】:

    • 谢谢,Greg,但不幸的是,在使用 innerHTML 创建输入字段后,eventListener 也不会获取对输入字段的更改。除非我做错了什么。这就是我所拥有的
    • for (n = 1; n
    • 很抱歉我错过了阅读问题。我想你需要按键事件
    • 如果这不能解决问题,您可以将代码添加到jsfiddle.net
    【解决方案2】:

    而不是.innerHTML = html + text.insertAdjacentHTML('beforeend', text),这样您就可以保留原始html(和事件绑定)。

    编辑:https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML

    【讨论】:

    • 谢谢@arieljuod。这解决了我一半的问题,因为我保留了我在输入字段中输入的现有值。但是,eventListener 仍然没有接收到新添加的 html 输入字段上的更改。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2022-10-05
    • 2012-04-08
    相关资源
    最近更新 更多