jQuery自动完成仅在按下“Enter”时显示“No Results”

时间:2012-04-16 09:52:07

标签: jquery autocomplete

  $('#term').catcomplete({
    delay: 0,
    minLength: 2,
    source: function(request, response){
      $.post('/search/super_search', {'term': $('#term').val()}, function(data){
        if (data.length > 0) {
          response(data);
        } else  {
          response([{label: 'No Results', category:"", href:""}, {label: 'Please try your search again.', category: "", href: ""}])
        }
      });
    }
}

我目前有上面的代码。当没有结果发回时,这只导致No results。但是,我需要做的是只在没有结果和用户按下回车时返回No results

编辑:我正在考虑从源方法访问该事件。我有办法在源方法中访问它吗?

2 个答案:

答案 0 :(得分:0)

你可以在回调函数的变量中存储字符串'无结果'或类似的东西,但是没有结果,并在用户按下回车时检查该字符串,并且不发回任何内容而不是'无结果'< / p>

答案 1 :(得分:0)

答案的几个部分:

  1. 我认为没有办法通过source选项执行此操作,因为source与任何事件无关。

  2. 然而,search选项与autocompletesearch事件绑定,并且它的回调函数可以在eventui对象中传递检查。但有一个问题:从我的测试和搜索中,它忽略了大多数“元”按键事件(例如shiftenterreturn)。

  3. 这为您提供了两个选项:

    1. 让您的远程脚本测试以查看term字符串中的最后一个字符是否为换行符。这可能有效,也可能无效,具体取决于浏览器是否捕获13按键并将其传递。

    2. 让外部事件处理程序在单独的函数中侦听keypress,并设置一个标志,以便为自动完成的search选项提供批准。类似的东西:

      var getResults = false;
      
      $("#term").keypress(function(event) {
          getResults = (event.which == 13);
      });
      
        $('#term').catcomplete({
          delay: 0,
          minLength: 2,
          search: function(event, ui) {
                return getResults;
          },
          source: function(request, response){
            $.post('/search/super_search', {'term': $('#term').val()}, function(data){
              if (data.length > 0) {
                response(data);
              } else  {
                response([{label: 'No Results', category:"", href:""}, {label: 'Please try your search again.', category: "", href: ""}])
              }
            });
          }
      
    3. 现在,我个人在使用这种方法时遇到了麻烦。但我认为它与我的测试环境有关,而不是实际的逻辑。可能有一种方法可以进一步简化这一点,但基本思想是search选项的回调返回true或false,并且自动完成基于此触发,并结合enter未触发的限制一个事件,所以必须在其他地方捕获。

      如果有效,请告诉我。