javascript - 如何将 IE7+ 中的 onchange 附加到父元素

标签 javascript internet-explorer-7 prototypejs

我有一个动态表单,其中使用 JavaScript 添加和删除行。在 Safari、Chrome 和 Firefox 中,表单的效果非常好。在 IE 中,好吧,我们就说它不...

<div id="container">
  <div class="row">
    <input name="name[]">
    <select name="color[]">
      <option>Red</option>
      <option>Green</option>
      <option>Blue</option>
    </select>
  </div>
  <div class="row">
    <input name="name[]">
    <select name="color[]">
      <option>Red</option>
      <option>Green</option>
      <option>Blue</option>
    </select>
  </div>

  <a id="add-another" href="#">Add a row</a>
</div>

<script src="prototype.js"></script>
<script>
  $("container").observe("change", function(ev) {
    alert("changed " + ev.element() + " to " + $F(ev.element()));
  });

  $$("#container input, #container select").each(function(el) {
    el.observe("change", function(ev) {
      alert("changed[2] " + ev.element() + " to " + $F(ev.element()));
    });
  });

  $("add-another").observe("click", function(ev) {
    var cloned = $("container").down(".rule").clone(true);
    $("container").insert({top:cloned});
    ev.stop();
  });
</script>

我看到的唯一 onchange 消息是 changed[2]。我更愿意看到 改变,因为那意味着我只有一个听众,而不是数百个。

是否有任何已知的解决方法,以便我可以在父节点上安装单个观察器并接收 onchange 事件?

我读过 MSDN article on onchange我确实找到了一条评论,大意是无法附加 onchange,但也许存在解决方案?

最佳答案

我有点惊讶它能在 Safari、FF 和 Chrome 中运行。这是我永远不会考虑尝试使用包装类的东西,因为它不是表单元素。聪明。

除非它会干扰其他东西,并且在 IE 为人类的进步而被淘汰之前,我认为一个可行的替代方案可能是利用 PeriodicalExecutorAbstract 的扩展。 TimedObserver 每隔一段时间检查一次包装类,可能结合检查浏览器是否为 IE。

关于javascript - 如何将 IE7+ 中的 onchange 附加到父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344726/

相关文章:

javascript - 使用 jquery 在 HTML 中实现飞行效果

javascript - 从javascript中的对象方法访问对象属性

javascript - JS中日期的日期名称

css - 动态修改页面内容的 IE7 相对/绝对定位错误

mysql - 简单的 ColdFusion 脚本在 IE 中有效但在 Firefox 中无效?

javascript - 格式错误的 JSON 响应

javascript - 为什么使用 document.write 在弹出窗口中插入的 HTML 页面需要刷新才能在 IE 7/8 中加载?

javascript - 单击具有相同 ID 的每个按钮

javascript - Prototype 的 DOM 扩展与第 3 方 JS 库发生冲突——我最好的选择是什么?

javascript - 显示文本区域的当前行号和列号