使用jQuery触发按键按下事件(keydown)

9

我已经完成了作业并检查了很多问题,但仍然找不到能够正常工作的东西。

我有一个搜索输入框。当用户点击示例时,我希望单词“doctor”逐字写入我的搜索输入框中。我早就可以通过更改$("#search").val()来实现这一点,但问题在于:当用户通常在搜索输入框中输入时,自动完成div会弹出。它是由keydown事件触发的。如果我只是改变输入的val属性,自动完成div就不会弹出,所以我需要以某种方式触发keydown事件,使其弹出。

我找到了这个解决方案:

$("#example").click(function() {    
    $("#search").focus();
    var e = jQuery.Event("keyup");
    e.keyCode = 50;                     
    $("#search").trigger(e);                    
});

但我无法使它正常工作。请问有什么想法吗?

以下是HTML代码:

<input type="text" id="search" />
Example: <span id="example">doctor</span>

我的标题说的是keydown事件,但显然只能通过keyup事件实现,所以在代码中我使用了keyup。无论如何,都对我不起作用。 - Nazar
我也尝试使用e.which而不是e.keyCode。但仍然没有任何变化。脚本在focus()事件之前都能正常工作。输入框获取焦点后,脚本似乎停止执行。 - Nazar
3个回答

9

我想我从您提供的链接中找到了适合我的答案,尽管我之前看过它,但我从未注意到一个评论。引用@Nadia Alramli的评论:
不,你误解了这个概念。这不是它应该工作的方式。触发器只会调用事件处理程序。它实际上不会打印键。如果您想模拟打印键的效果,则只需将键添加到输入值并同时触发事件即可。-Nadia Alramli 2009年5月7日0:21
- Nazar

0
如果您正在使用jQuery自动完成功能,强制按键并不能解决问题。您需要强制执行自动完成。您可能需要稍微延迟一下:
setTimeout(function()
{
    var CurrentVal = $("#example").val();
    $("#example").autocomplete( "search", CurrentVal )
},500);

0
更好的方法是在textChange事件上触发自动完成,而不是keyup/down。这样你就可以轻松地使用$("#search").val(),并且自动完成器将被触发。
额外的好处:如果你使用textChange,它还会在用户使用鼠标上下文菜单复制粘贴文本时触发自动完成(而不会在按Tab或箭头键时触发)。

谢谢回复!我一定会去查看这个。我不知道这样的事件是可能的。然而,我过滤了我的按键事件,所以如果按箭头键,它就不会触发自动完成。 - Nazar
我刚意识到无论如何都需要触发按键,因为当用户点击示例时,“doctor”这个单词将被输入,并且自动完成的下拉框会出现。然后我需要触发一次向下箭头按键和一次回车键,这样它就会跳转到自动完成下拉框中第一个建议的URL。这应该是一个演示。 - Nazar
当然可以,但如果是我,我会使用.textchange(autocomplete_handler)和单独的.keydown(arrows_and_enter_handler) - Jens Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接