字段中选项卡上的JavaScript高亮表单元格

时间:2020-03-06 14:53:46  来源:igfitidea点击:

我有一个摆在桌子上的网站。 (长期抵押表格)

每个表格单元格中都有一个HTML对象。 (文本框,单选按钮等)

当每个表单元格都被"标签"到其中时,该怎么办呢?该单元格以非常浅的红色突出显示(不要太夸张,而是告诉用户它们在哪里)?

解决方案

可能:

<script type="text/javascript">
//getParent(startElement,"tagName");
function getParent(elm,tN){
  var parElm = elm.parentNode;
  while(parElm.tagName.toLowerCase() != tN.toLowerCase())
    parElm = parElm.parentNode;
  return parElm;
}
</script>

<tr><td><input type="..." onfocus="getParent(this,'td').style.backgroundColor='#400';" onblur="getParent(this,'td').style.backgroundColor='';"></td></tr>

使用jQuery使生活更轻松,并且我们可以执行以下操作:

$('#mytableid input').focus( function() { 
    $(this).addClass('highlight'); 
}).blur( function() {
    $(this).removeClass('highlight'); 
});

这就是说,当表中的任何输入元素都处于焦点下时,向其添加"突出显示"类,一旦失去焦点,则删除该类。

将CSS设置为:

input.highlight { background-color: red; }

并且你应该被设置。

这是我测试代码的表:

<table id="myTable">
  <tr>
    <td><input type="text" value="hello" /></td>
    <td><input type="checkbox" name="foo" value="2" /></td>
    <td><input type="button" value="hi" /></td>
  </tr>
</table>

这是起作用的代码:

// here is a cross-browser compatible way of connecting 
// handlers to events, in case you don't have one
function attachEventHandler(element, eventToHandle, eventHandler) {
    if(element.attachEvent) {
       element.attachEvent(eventToHandle, eventHandler);
    } else if(element.addEventListener) {
       element.addEventListener(eventToHandle.replace("on", ""), eventHandler, false);
    } else {
    element[eventToHandle] = eventHandler;
  }
}
attachEventHandler(window, "onload", function() {
  var myTable = document.getElementById("myTable");
  var myTableCells = myTable.getElementsByTagName("td");
  for(var cellIndex = 0; cellIndex < myTableCells.length; cellIndex++) {
    var currentTableCell = myTableCells[cellIndex];
    var originalBackgroundColor = currentTableCell.style.backgroundColor;
    for(var childIndex = 0; childIndex < currentTableCell.childNodes.length; childIndex++) {
      var currentChildNode = currentTableCell.childNodes[childIndex];
      attachEventHandler(currentChildNode, "onfocus", function(e) {
        (e.srcElement || e.target).parentNode.style.backgroundColor = "red";
      });
      attachEventHandler(currentChildNode, "onblur", function(e) {
        (e.srcElement || e.target).parentNode.style.backgroundColor = originalBackgroundColor;
      });
    }
  }
});

我们可能需要清理这里的东西,但是我很快就将其联系在一起。即使每个单元中有多个事物,此方法也有效。

如果我们使用了一个库来协助我们完成这项工作,这将容易得多,不用说了,尽管我喜欢使用jQuery和MochiKit,但还有其他一些也可以使用。

从我开始写这个答案到我发布它的时间之间,有人发布了代码,该代码可以显示我们将如何在jQuery中执行类似的操作,简而言之!尽管我喜欢图书馆,但我知道有些人不能或者不会使用图书馆,在这种情况下,我的代码可以完成这项工作。