2012-04-16 32 views
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当没有resuls和当用户按enter键。jQuery自动完成功能仅在按下Enter键时才显示`No Results`

编辑:我正在寻找从源方法访问事件。有没有办法让我在源代码中访问它?

+0

它是完整的还是自动完成的? – Tuscan 2012-04-16 09:56:59

+0

它是'catcomplete'。 – 2012-04-16 09:59:19

+0

用户还没有“提交”他们的搜索的关注,但他们可能仍然有更多的输入时,他们得到“没有结果”?因为技术上“没有结果”没有错,只要它继续在每个按键上重新搜索,用户不应该过于灰心。也许更好的解决方案是根据不同的最小输入量输出2个输出消息。因此,如果它低于6,他们会得到“什么都没有......”,但6或更高的“没有结果”。我这样说并不是为了劝阻你的意图,而是建议替代品,以减少不同的键盘,输入等问题。 – Anthony 2012-04-16 10:09:26

回答

0

几部分答案:

  1. 我看不到任何方式通过source选项来做到这一点,因为source是不依赖于任何事件。

  2. search选项,但是,被拴在autocompletesearch事件,它的回调函数可以在eventui对象进行检查通过。但有一个问题:从我的测试和搜索中,它忽略了大部分“meta”按键事件(如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不会触发的限制作为事件,因此必须捕获别处。

让我知道这是否有效。

+0

我已经这样做了,但我手动输出'div'到自动完成显示的位置 – 2012-04-16 11:55:01

0

你可以在你的回调函数中存储字符串'no results'或类似的东西,他没有结果,并且当用户按下回车时检查该字符串,并且不发回任何回应而不是'没有结果'

+0

我知道什么时候我没有结果。问题出在用户按下回车键时。从源头上,我可以知道是否有结果,但我无法确定用户是否从那里按下输入。我需要知道用户是否按下了“Enter”,什么时候没有结果。 – 2012-04-16 10:02:44

+0

@ThorpeObazee - 通过“按回车”你的意思是用户是“完成打字”的权利? – Anthony 2012-04-16 10:11:57

+0

@Anthony我的意思是真的按下返回键,键码'13' – 2012-04-16 10:15:54

相关问题