【发布时间】:2011-09-27 23:05:57
【问题描述】:
我有一个下拉列表矩阵,我希望能够在用户视觉编辑设置时向他们显示(例如,通过将表格单元格的背景设置为红色)。如果他们将其切换回原始值,它将恢复为默认背景颜色。这样一来,系统的状态就很清楚了。
为此,我想出了在<select> 元素上设置onchange 处理程序,如下所示:select.setAttribute('onchange','chSel(this,'+select.selectedIndex+');'); 其中select 是<select> 元素。
它将调用函数chSel并引用自身和当前设置,因此它将能够设置将通过CSS确定显示属性的类:
function chSel(node, origSelIndex) {
if (node.selectedIndex == origSelIndex) // switching back to the set state
node.parentNode.removeAttribute('class');
else node.parentNode.setAttribute('class','cell_changed');
}
这不需要检索动态数据,尽管onchange 处理程序中保存的selectedIndex 值用作特定于元素的静态数据。
我想通过在我的表格周围制作一个边框来扩展我所描述的这个功能,我打算在它的任何内容被修改时将其涂成红色,这样如果表格很大,仍然可以一目了然如果它的任何条目被修改。
有一种不好的方法和更好的方法来实现这一点。我确实知道如何在兼容的 HTML/XHTML 中实现的坏方法是让chSel(在用户与下拉菜单交互时执行)运行完整搜索整个表格来计算编辑,并相应地标记表格边框。这实际上可能不是性能问题,但我预计它会是。我认为它的扩展性不会那么好。
更好的方法是计算已编辑元素的数量。当该数字回落到零(用户将他的所有编辑更改回原始值)时,我可以将表格重新标记为未编辑。
但是,这需要我有一些方法来确定选择菜单是否已从新值更改为不同的新值,而不是从原始值更改为新值,即现在与被改变的值是。似乎没有办法做到这一点。 This discussion 似乎表明我无法在保持文档有效的同时创建和检索自定义属性。当我试图分配任意属性时,我很难检索它们的值。
还剩下什么?我可以构建一个对象,将其用作从元素到整数的散列吗? javascript甚至会让我这样做吗?
【问题讨论】:
-
不要使用 setAttribute 设置监听器,因为它在某些浏览器中不起作用,使用 addEventListener/attachEvent 或仅将函数分配给适当的属性。
-
@RobG,感谢您的提示。将 HTML 内容与代码语义分开可能是一个非常好的主意。不过,您知道哪些浏览器会出现问题吗?
标签: javascript html