【问题标题】:JQuery Keyup not populating results until a space is executed在执行空格之前,JQuery Keyup 不会填充结果
【发布时间】:2013-06-02 02:21:42
【问题描述】:

我在搜索栏输入文本框中放置了以下 jQuery 代码:

$(document).ready(function(){
    $("#q").keyup(function(event){
      event.preventDefault();
      $.post("newsearch.php",{q:$("#q").val()}, function(data){
         $("#inboxHolder").html(data);          
      });
   });
});     

它有点小故障。结果填充正确,但例如在某些情况下,我必须在键入查询后执行空格才能填充结果。

任何反馈都将不胜感激。

【问题讨论】:

  • 不是你要问的,但你真的想要在 every keyup 事件上发布一个帖子吗?对于任何半熟练的打字员,每秒发五个帖子。稍微延迟构建更常见......
  • 如何使用这个添加延迟:api.jquery.com/delay
  • 不,jQuery 的.delay() 是关于延迟动画队列中的事情。您可以使用setTimeout(),也许是this answer 之类的东西(根据需要调整实际时间 - 我认为该链接中的 3000 毫秒有点长,但 800 毫秒之类的就可以了)。这种技术在发布前等待 x 毫秒,直到最后一次按键之后;在 x 毫秒内多次按键会在最后一个帖子之后生成一个帖子。
  • 你能帮我实现吗?这是我得到的,但它不起作用:pastebin.com/ACCZNZHC
  • 关于延迟,这里有一个版本应该可以工作:jsfiddle.net/ZH4Y7(你在错误的地方声明了var filterTimeout,在错误的地方声明了event.preventDefault()。我知道我最初的例子链接到在clearTimeout() 周围有一个if,但它不是必需的。)

标签: jquery events jquery-events keyup onkeyup


【解决方案1】:

我想你问的问题是jQuery - keydown / keypress /keyup ENTERKEY detection

试试keyup、keydown 和enter。

$(document).ready(function(){
    get_key_press();
});

function get_key_press()
{
    $("#q").keyup(function(e){ 
        handle_key_press(e);
    });
    $("#q").keydown(function(e){ 
        handle_key_press(e);
    });
}

function do_search(search_string)
{
    $.post("newsearch.php",{q:search_string}, function(data){
        $("#inboxHolder").html(data);
        can_search = true;
    });
}

//simple concurrency flag
var can_search = true;

function handle_key_press(e)
{
    if(can_search)
    {
        var code = e.which; // recommended to use e.which, it's normalized across browsers
        if(code==13)e.preventDefault();
        if(code==32||code==13||code==188||code==186)
        {
            can_search = false;
            do_search($("#q").val());
        }
    }
}

如果您在关注keycodes 的列表与e.which 相关,则可以参考此resource。

【讨论】:

  • “尝试并计算 keyup、keydown 和 enter。” - 好的,那么您的代码如何解释键 down?为什么输入很重要 - 您是否假设输入在表单内,在这种情况下,您需要阻止默认键 down 操作而不是默认键 up 如果你想停止默认的表单提交。
  • 我不是特别确定.. 但是根据用 C# 编写自动完成功能的经验,我注意到最好同时考虑两个键盘操作,以使输入更具响应性。但是感谢您的建议(还更新了答案以说明keydown)。
猜你喜欢
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
相关资源
最近更新 更多