OnChange事件在td标签的HTML表单元素使用Chrome(Onchange event fo

2019-10-30 09:55发布

如何调用表中的单元格(TD)在它的形式标记歌浏览器的onchange事件? 下面的代码工作对我来说,除了铬所有的浏览器。 令人惊讶它的工作原理与剧院15(应该使用相同的引擎(WebKit的/闪烁),如最新的谷歌浏览器)。

<table><tr>
    <td onchange="bla()">
        <select>
            <option value="n">foo</option>
            <option value="n">foo</option>
            <option value="n">foo</option>
            <option value="n">foo</option>
            <option value="n">foo</option>
        </select>
    </td>

    <td onchange="bla()">
        <input type="text" />
    </td>

    <td>
    </td>
</tr></table>



<script>
function bla() {
    alert('something changed...');
}
</script>

我知道这是可能的事件绑定到选择标签,但我的网络应用程序将无法正常工作那么好

Answer 1:

为什么原因onchange不会因为要工作,因为它不是改变细胞 ,它的里面的表单元素。 当然,如果你点击一个表的内容,表被点击了。 这是有道理的:你不能打开屋内一扇门无需先打开前门。
你可以,但是,去一个房间里面,把头发剪了(火对自己的改变事件)不改变此事件发生的房间。 在这方面,它是有道理的变化不会触发事件在母细胞。

该事件遍历DOM,不过,它通过表格单元格,所以你可以把它捡起来有,但不是HTML属性。 (顺便说一句:尽量使用那些尽可能少)。

尝试监听绑定到JS整个表。 这样的话,只有1对所有事件(这就是所谓的事件代表团)的作品监听器:

//assume tbl has id foobar:
document.getElementById('foobar').addEventListener('change',function(e)
{
    e = e || window.event;
    var target = e.target || e.srcElement;
    var name = target.id || target.getAttribute('name');
    alert('the ' + name + ' element changed!');
},false);

以下是事件代表团一个稍微复杂一点的版本 ,这也与在IE8中选择元素,改变事件涉及。 (改变事件不起泡在旧IE的)。

的几个环节:

  • 一如往常: MDN
  • 上一篇文章代表团是如何工作的 ,以及如何方便它确实是
  • 而良好的醇”怪异模式: 对事件顺序/事件模型的全面概述


文章来源: Onchange event for Html-form-elements in td tag with Chrome