0
  $('#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在没有结果且用户按下回车时才返回。

编辑:我正在研究从源方法访问事件。有没有办法让我在源方法中访问它?

4

2 回答 2

0

您可以将字符串“无结果”或类似的内容存储在回调函数中的变量中,他没有结果,并在用户按下回车时检查该字符串,并且什么都不发回而不是“无结果”

于 2012-04-16T09:57:18.283 回答
0

您的答案的几个部分:

  1. 我看不到通过该source选项执行此操作的任何方法,因为source它与任何事件无关。

  2. 然而,该search选项是与autocompletesearch事件相关联的,它的回调函数可以在eventui对象中传递以进行检查。但是有一个问题:根据我的测试和搜索,它忽略了大多数“元”按键事件(例如shift, enter, return)。

这使您有两个选择:

  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: ""}])
            }
          });
        }
    

现在,我个人在使用这种方法时遇到了麻烦。但我认为这与我的测试环境有关,而不是实际逻辑。可能有一种方法可以进一步简化这一点,但基本思想是search选项的回调返回 true 或 false 并基于此触发自动完成,再加上enter不作为事件触发的限制,因此必须在其他地方捕获它。

让我知道这是否有效。

于 2012-04-16T11:42:32.303 回答