$('#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
。
编辑:我正在考虑从源方法访问该事件。我有办法在源方法中访问它吗?
答案 0 :(得分:0)
你可以在回调函数的变量中存储字符串'无结果'或类似的东西,但是没有结果,并在用户按下回车时检查该字符串,并且不发回任何内容而不是'无结果'< / p>
答案 1 :(得分:0)
答案的几个部分:
我认为没有办法通过source
选项执行此操作,因为source
与任何事件无关。
然而,search
选项与autocompletesearch
事件绑定,并且它的回调函数可以在event
和ui
对象中传递检查。但有一个问题:从我的测试和搜索中,它忽略了大多数“元”按键事件(例如shift
,enter
,return
)。
这为您提供了两个选项:
让您的远程脚本测试以查看term
字符串中的最后一个字符是否为换行符。这可能有效,也可能无效,具体取决于浏览器是否捕获13
按键并将其传递。
让外部事件处理程序在单独的函数中侦听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
未触发的限制一个事件,所以必须在其他地方捕获。
如果有效,请告诉我。