【问题标题】:Issue with Keypress (Post QUERY incomplete)按键问题(后查询不完整)
【发布时间】:2014-10-14 22:10:41
【问题描述】:

我正在使用 jQuery 开发一个自动完成的建议表单,我的问题是 KEYPRESS 发送带有不完整查询的 POST 请求(将 -1 字符剩余到实际查询)。

这里是 jQuery 代码:

    $(function(){

      search = $(".left");
      search_input = $(".left input.text");
      search_input.click(function(){
            $(".left form").append("<div class=\"search-capa admitido\"></div>");
            search_capa = $(".search-capa");
            result_search_capa = $(".search-capa");

      })


      $(".left value.text").keypress(function(){
              value = $(".left input.text").val();
              value = value.replace(" ","+");
              console.log(value);
              getConec(value);
      })

      function getConec(kery){
            $.post("suggest.php",{q:kery},function(data){
                  result_search_capa.html(data);
                  var li = $('.search-capa a');
                  var liSelected;
                  moveoption()
            })
      }
      function moveoption(){
                  $(document).keydown(function(e){
                      if(e.which === 40){
                          if(liSelected){
                              liSelected.removeClass('selected');
                              next = liSelected.next();
                              if(next.length > 0){
                                  liSelected = next.addClass('selected');
                                  $('.left input.text').val(liSelected.text());

                              }else{
                                  liSelected = li.eq(0).addClass('selected');
                                  $('.left input.text').val(liSelected.text());
                              }
                          }else{
                              liSelected = li.eq(0).addClass('selected');
                              $('.left input.text').val(liSelected.text());
                          }
                      }else if(e.which === 38){
                          if(liSelected){
                              liSelected.removeClass('selected');
                              next = liSelected.prev();
                              if(next.length > 0){
                                  liSelected = next.addClass('selected');
                                  $('.left input.text').val(liSelected.text());
                              }else{
                                  liSelected = li.last().addClass('selected');
                                  $('.left input.text').val(liSelected.text());
                              }
                          }else{
                              liSelected = li.last().addClass('selected');
                              $('.left input.text').val(liSelected.text());

                          }
                      }
                  });
      }

})

如果我搜索“Web developer”,POST 请求会发送“Web developer”(最后一个字符总是丢失)。为什么?有什么建议吗?

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    keypress 事件在按下的键传递到输入 (demo) 之前触发。而是尝试这样的事情:(demo)

    $('.left value.text').on('keyup', function() {
        var value = $(".left value.text").val();
        value = value.replace(" ","+");
        getConec(value);
    });
    

    【讨论】:

    • 谢谢,在我的情况下 $('.left .text').on('keypress', function() { 它工作得很好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多