【问题标题】:How can I use the arrow keys in Jquery如何在 Jquery 中使用箭头键
【发布时间】:2011-09-12 11:12:45
【问题描述】:

我正在尝试用这个来模仿 Google 建议列表:

function el(tid) {
    return document.getElementById(tid);
}

function addScript(u) {
    var head = document.getElementsByTagName('head')[0],
        sc2 = document.createElement('script');
    sc2.src = u;
    head.appendChild(sc2);
    setTimeout(function () {
        head.removeChild(sc2);
        sc2 = null;
    }, 600);
} //end addScript()

function suggest(data) {
    var sel = el("test");
    sel.innerHTML = '';
    for (x = 0; x < data[1].length; x++) {
        sel.innerHTML += '<li class="uli" >' + data[1][x][0] + '</li>';
    }
}


el("inp").onkeyup = function () {
    addScript("http://www.google.nl/complete/search?callback=suggest&q=" + this.value);
};

问题是我希望能够使用箭头键进入建议列表,其次我想在输入字段中显示“当前”建议值。所以我用 Jquery 尝试了这样的事情:

$("#inp").live("keydown", function (e) {


    var curr = $('#test').find('.current');
    if (e.keyCode == 40) {
        if (curr.length) {
            $(curr).attr('class', 'uli');
            curr = $(curr).next();
        }
        if (curr.length) {
            curr.attr('class', 'uli current');
        } else {
            $('#center li:first-child').attr('class', 'uli current');

        }
    }
    if (e.keyCode == 38) {
        if (curr.length) {
            $(curr).attr('class', 'uli');
            curr = $(curr).prev();
        }
        if (curr.length) {
            curr.attr('class', 'uli current');
        } else {
            $('#center li:last-child').attr('class', 'uli current');
        }
    }







    $("#inp").live("keydown", function (e) {
        var search_terms = $('li.current').text();

        if (e.keyCode == 40) {
            $('#inp').val(search_terms);
        }
        if (e.keyCode == 38) {
            $('#inp').val(search_terms);

        }

它不起作用,因为(我认为..)前面的代码立即请求了“当前”建议。 我把所有东西都放在这里了:JS Bin

【问题讨论】:

  • 所以我让它像这样使用 onkeypress 工作:el("inp").onkeypress=function(){ addScript("http://www.google.nl/complete/search?callback=suggest&amp;q="+this.value); } 但现在它在第一次按键时没有响应,而是从第二次按键开始。我能解决这个问题吗?
  • 哦,不,我刚刚发现退格键不能与按键一起使用,所以没关系...

标签: javascript jquery input google-suggest


【解决方案1】:

为什么要重新造轮子?

jQuery UI Autocomplete

或者看看其他plugins

您的代码的问题是您需要在调用以获取值时取消箭头按键。

el("inp").onkeyup = function () {
    //if not the arrow keys, fetch the list
    if( ... ){
        addScript("http://www.google.nl/complete/search?callback=suggest&q=" + this.value);
    }
}

当您使用 jQuery 时,el("inp") 又是什么?我期待看到$("foo").keyup( function(){} );

【讨论】:

  • 我想我必须使用 ui 库,我想避免使用它,因为它太大了。但谢谢你的参考。我看到有一个如何将它与 xml 文件一起使用的示例,这应该可以解决问题。但是我的服务器上没有xml,所以这可能是一个问题......如果我的“简单”(小代码)方法不起作用,我一定会调查它,看看它是否可以解决我的问题(当然除了你的答案)
  • 我知道,我一直在寻找一种方法来取消箭头键,但互联网上没有任何参考...所以我真的不知道如何做到这一点。
  • 我曾经在 Jquery 中写过代码,但是行为并没有改变,代码做了同样的事情,只是看起来不同
  • 取消箭头?你只是说如果它不是箭头,而不是调用脚本。哈哈。与您使用箭头移动选择的操作相反。 ;)
  • “如果不是箭”怎么说?陈述 IF 比陈述 IF NOT 容易得多;)
猜你喜欢
  • 2019-09-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多