我正在使用 ajax-autocompleter,效果很好。 我的目标是在现有项目的编辑功能或未找到项目的创建功能之间重定向。
我为每个 li 插入一个特定的 id,因此我可以将它用于带有 afterUpdateElement 选项的编辑功能。
但是如果没有找到结果,列表是空的,我找不到任何方法告诉 afterUpdateElement 脚本没有找到结果。 实际上,没有调用 afterUpdateElement,因为没有选择。所以 afterUpdateElement 没用……
我正在考虑测试 ajax 请求发送的完整值。 但是我没有找到如何捕获它......
最佳答案
所以,我终于找到了一种方法来检查是否选择了结果(在 Gwyohm 的巨大帮助下):
- 首先,我们设置了一个隐藏字段,它将记录是否选择了结果(真/假)。默认情况下,它设置为 FALSE。
- afterUpdateElement 仅在选择后使用。所以我们使用这个 aferUpdateElement 将我们的隐藏字段变为 TRUE。
如果用户更改搜索字段值,对于未选择的全新值,不使用 afterUpdateElement,我们的隐藏值仍设置为 TRUE。 该问题的解决方案是聆听按下的键。如果按下某个键,则隐藏字段会变回 FALSE。这适用于所有键,甚至是实际用于进行选择的 Enter 键。所以这是一个我们应该从按键监听器中删除的异常。 所以,最后让我们看看我们的额外功能:
$(id-of-text-field).observe("keyup", function(e) {
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
if (keycode!=13) {$(id-of-hidden-field).value="FALSE";
}
}.bindAsEventListener($(id-of-text-field)));
然后我们可以使用隐藏字段来知道是否应该编辑或创建文本值...
注意:使用此解决方案时,如果用户键入与现有值匹配的值而未选择它,它将被视为新值,如果您将此值添加到数据库,将导致重复条目。 (但这对我来说没问题,因为我正在处理名字,两个不同的人可能有相同的名字......)
关于ajax - scriptaculous ajax 自动完成空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/657839/