对于我的键盘电源键脚本,我为每个请求实现了一项功能,以启用up
/down
箭头键以将焦点放在表示电子邮件的表格上的复选框(上一行中的复选框,下一行中的复选框)(显然就像旧的雅虎经典邮件一样,尽管在他们停止允许访问之前我不知道该功能)。此功能非常有效,但有一个例外:当我按住向上箭头键(而不是轻按,轻按轻按)时,它最终会在到达顶部复选框时锁定 Firefox;我越是按住它,它就越有可能 KO 浏览器,我将不得不手动终止该过程。
尽管涉及全局变量的任何内容都必须使用option
该类,但我对各种方法持开放态度。
框架被明确禁止,我们谈论的是真实的代码和性能。
选项类,除非您的方法需要全局变量,否则不是必需的...
var option = new function() {this.name = '';}
这是处理各种按键事件的函数......
function keyPressed(evt)
{
var e = evt || event;
var key = e.which || e.keyCode;
if (powerKeysEnabled)
{
switch (key)
{
case 38://Up Arrow
if (e.target.nodeName.toLowerCase()=='a' && e.target.previousSibling && e.target.previousSibling.nodeName.toLowerCase()=='input' && e.target.previousSibling.type=='checkbox' && e.target.parentNode.parentNode.nodeName.toLowerCase()=='tr')
{
var t;
if (e.target.parentNode.parentNode.parentNode.parentNode.nodeName.toLowerCase()=='table') {t = e.target.parentNode.parentNode.parentNode.parentNode;}
else if (e.target.parentNode.parentNode.parentNode.nodeName.toLowerCase()=='table') {t = e.target.parentNode.parentNode.parentNode;}
var tr = t.getElementsByTagName('tr');
for (var i=0; i<tr.length; i++)
{
if (tr[i]===e.target.parentNode.parentNode)
{
i--;
if (tr[i])
{
var a = tr[i].getElementsByTagName('input');
if (a[0] && a[0].type=='checkbox')
{
a[0].focus();
break;
}
else
{
i--;
if (tr[i])
{
var b = tr[i].getElementsByTagName('input');
if (b[0] && b[0].type=='checkbox')
{
b[0].focus();
break;
}
}
}
}
}
}
}
break;
}
}
}
任何对脚本如何工作感兴趣的人都应该意识到我将 XHTML 用作application/xhtml+xml
并且对正确的代码非常清楚。还应该注意的是,我用锚替换不可自定义的输入复选框元素并隐藏复选框(通过 CSS position
,not display
)并用锚元素直观地替换每个复选框。请注意,在脚本解释 XHTML 的方式中,空格在一定程度上很重要,不要为了他人而编辑。这是一个适用于...的示例 XHTML 表。
<table summary="This table displays emails from the currently choosen folder.">
<colgroup style="width: 5%;"></colgroup>
<colgroup style="width: 20%;"></colgroup>
<colgroup style="width: 50%;"></colgroup>
<colgroup style="width: 25%;"></colgroup>
<colgroup style="width: 5%;"></colgroup>
<thead><tr><td colspan="5"><span>Delete, move, other email features...</span></td></tr><tr><td><input type="checkbox" value="" /></td><td> </td><td> </td><td> </td><td> </td></tr></thead>
<tfoot><tr><td></td><td> </td><td> </td><td> </td><td> /td></tr></tfoot>
<tbody>
<tr id="mail_inbox_208_row"><td><input type="checkbox" value="" /></td><td> </td><td> </td><td> </td><td> </td></tr>
<tr id="mail_inbox_207_row"><td><input type="checkbox" value="" /></td><td> </td><td> </td><td> </td><td> </td></tr>
</tbody>
</table>