我有一个动态表单,其中使用 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 为人类的进步而被淘汰之前,我认为一个可行的替代方案可能是利用 PeriodicalExecutor
或 Abstract 的扩展。 TimedObserver
每隔一段时间检查一次包装类,可能结合检查浏览器是否为 IE。
关于javascript - 如何将 IE7+ 中的 onchange 附加到父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344726/