我试着总结一下你需要做的事情。如果您逐步完成每个部分,实施起来应该不是什么大问题。
使下拉列表不可见。
创建一个隐藏<select>
场通过POST传递(也因为非JS用户)
您可以创建国家
数组 var countries = [
{ name: "Russian", flag: "flag_ru.gif" },
{ name: "USA", flag: "flag_en.gif" },
{ name: "Germany", flag: "flag_de.gif" },
{ name: "China", flag: "flag_ch.gif" }
];
事件侦听器文本<input>
字段
// function keydown(e)
e = e || window.event;
switch (e.keyCode)
// 38: up
// 40: down
对每一个/减键:
3.1。跟踪活动元素(通过箭头键选择),添加一个特殊的类如active
。
3.2。更改<input>
字段旁边的标记。
3.3。更改隐藏的<select>
字段。
附加:进行选择圆形。如果最后一个激活时按下了向下键,则跳转到第一个。向上键和第一个元素的情况相同。
Extra2:Clean清除标记,并与演示文稿(CSS)分开。
Extra3:你应该让整个表单访问没有鼠标,所以箭头键将不仅显示了下拉菜单中,但实际上你可以与他们进行导航。要关闭下拉菜单,可以使用esc
按钮。这里是概念证明:
function handleArrowKeys(e) {
// capture the event
e = e || window.event;
// collect link elements
var dropdown = byId("dropdown");
var elements = byTag("tr", dropdown);
var len = elements.length - 1;
var i = selectedIndex;
// handle event
switch (e.keyCode) {
case 38: // up
if (i <= 0) { // overflow
selectedIndex = len;
removeClass(elements[i], "active");
addClass(elements[len], "active");
} else {
removeClass(elements[i], "active");
addClass(elements[i-1], "active");
selectedIndex -= 1;
}
// update <select>
break;
case 40: // down
if (i >= len) { // overflow
selectedIndex = 0;
removeClass(elements[i], "active");
addClass(elements[0], "active");
} else {
removeClass(elements[i], "active");
addClass(elements[i+1], "active");
selectedIndex += 1;
}
// update <select>
break;
case 27: // esc
hide("dropdown");
break;
default: return true;
}
return false;
}
你对此并不认真,是吗?这需要数周时间才能完成。 – aefxx 2010-11-13 23:14:58
你有没有成功解决这个问题?你还需要帮助吗? – jcolebrand 2010-12-14 03:40:49