Voici le tableau que je teste mon code sur:
<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>
Voici le code qui a fonctionné:
// 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;
});
}
}
});
Il y a probablement des choses ici, vous pouvez nettoyer, mais je fouetté cela ensemble rapidement. Cela fonctionne même s'il y a plusieurs choses dans chaque cellule. Ce serait beaucoup plus facile, cela devrait aller de soi, si vous utilisiez une bibliothèque pour vous aider dans ce travail - jQuery et MochiKit sont les deux que je préfère, bien qu'il y en ait d'autres qui fonctionnent aussi bien.
Entre le moment où je commence à écrire cette réponse et le temps je l'ai posté, quelqu'un a posté un code qui montre comment vous feriez quelque chose comme ça dans jQuery - comme vous pouvez le voir, beaucoup plus courte! Bien que j'aime les bibliothèques, je sais que certaines personnes ne peuvent ou ne veulent pas utiliser une bibliothèque - dans ce cas, mon code devrait faire l'affaire.
Ce serait une manière douloureuse de le faire et ne suit pas les règles du JavaScript discret. Si ce n'est pas un problème pour quelqu'un, alors bon, mais je m'abstiens sûrement de ces types de solutions. –