我有一个基于定制的ajax [div]动态下拉列表。

我有一个[输入]框; onkeyup ,运行Ajax搜索,返回div的结果,并使用innerHTML退回。 这些div一切都具有亮点onmouseover所以,典型的成功的搜索产生以下结构(原谅半码):

[input]
 [div id=results] //this gets overwritten contantly by my AJAX function
  [div id=result1 onmouseover=highlight onclick=input.value=result1]
  [div id=result2 onmouseover=highlight onclick=input.value=result2]
  [div id=result2 onmouseover=highlight onclick=input.value=result2]
 [/div]

有用。

但是,我忽略了常规HTML元素背后的重要功能。 我不能在“选项”之间键盘向下或向上。

我知道javascript处理键盘事件但是; 我一直没能找到一个好的指南。 (当然,后续问题将最终成为:我可以使用<ENTER>来触发onclick事件吗?)

===============>>#1 票数:6 已采纳

您需要做的是将事件侦听器附加到具有id="results"div 您可以通过在创建div时将onkeyuponkeydown等属性添加到div来执行此操作,也可以使用JavaScript附加这些属性。

我的建议是你使用像YUIjQueryPrototype等AJAX库有两个原因:

  1. 听起来你正在尝试创建一个自动完成控件,这是大多数AJAX库应该提供的。 如果您可以使用现有组件,您将节省大量时间。
  2. 即使您不想使用库提供的控件,所有库都提供了有助于隐藏不同浏览器提供的事件API之间差异的事件库。

忘记addEvent,使用Yahoo!的Event Utility可以很好地总结一下事件库应该为您提供的内容。 我很确定jQuery,Prototype等提供的事件库。 人。 提供类似的功能。

如果那篇文章结束了,请先阅读本文档然后重新阅读原文(我发现在使用事件库之后这篇文章更有意义)。

其他几件事:

  • 使用JavaScript可以比在HTML中编写onkeyup等属性提供更多的控制。 除非你想做一些非常简单的事情,否则我会使用JavaScript。
  • 如果您编写自己的代码来处理键盘事件,那么一个好的密钥代码引用非常方便。

===============>>#2 票数:0

在我的脑海中,我认为您需要在JavaScript中维护某种形式的数据结构,以反映当前下拉列表中的项目。 您还需要对当前活动/所选项目的引用。

每次触发keyupkeydown ,更新对数据结构中的active / selected项的引用。 要在UI上提供突出显示信息,请根据项目是否处于活动状态/已选择,添加或删除通过CSS设置样式的类名称。

此外,这不是一个大问题,但innerHTML并不是真正的标准(查看createTextNode()createElement()appendChild()以获取创建数据的标准方法)。 您可能还希望在JavaScript中查看附加事件处理程序,而不是在HTML属性中执行此操作。

  ask by mauriciopastrana translate from so

未解决问题?本站智能推荐: