此外,我使用jquery高亮插件突出显示列表中搜索框中的当前字符串。因此,listitem会突出显示搜索框中的确切字词。
function doSearch(keyCode) {
if ($('.s').val() !== '') {
jqXHR_Old = $.post( Searchmap.ajaxurl, data, function(response) {
$sr.html(response);
//add class to all results that match the current searchterm
var found = $('#searchresults ul li:icontains("' + $('.s').val() + '")');
found.addClass('matched');
//remove all remaining list-items
$('#searchresults ul li').not('.matched').remove();
//highlight current string in searchbox
$('#searchresults ul li.matched').highlight($('.s').val());
...
一切都很好,除了一个案例。每当输入字段删除其内容并再次为空时,浏览器就无法停止脚本。该错误是100%由插件引起的,或者此行:$('#searchresults ul li.matched').highlight($('.s').val());
...插件本身工作得很好。我一直在使用它。该插件甚至可以用于这种情况,只是在这种罕见的情况下,当ajax请求当前被触发并且输入中的文本再次设置为空时浏览器崩溃。
知道为什么会这样吗?这可能只是我遇到的一个逻辑问题。我已经在检查输入是否为空。因此,当输入中的文本再次被删除时,实际上甚至不应该触发高光线。
任何想法?
答案 0 :(得分:2)
突出显示仍然会发生,您的ajax调用是异步的,它会与您的其余代码一起运行。
你检查输入是否为空,然后关闭你的ajax。完成后,它将运行您传递的其余代码(此代码是回调函数)。所以你可以现在看到一个空字符串。
你可以尝试两件事。一种方法是存储您搜索的字符串,但这仍然是指向原始字符串的指针:
function doSearch(keyCode) {
var input = $('.s').val();
if (input !== '') {
jqXHR_Old = $.post( Searchmap.ajaxurl, data, function(response) {
$sr.html(response);
//add class to all results that match the current searchterm
var found = $('#searchresults ul li:icontains("' + input + '")');
found.addClass('matched');
//remove all remaining list-items
$('#searchresults ul li').not('.matched').remove();
//highlight current string in searchbox
$('#searchresults ul li.matched').highlight(input);
或者尝试用相同的逻辑包裹导致错误的行:
function doSearch(keyCode) {
if ($('.s').val() !== '') {
jqXHR_Old = $.post( Searchmap.ajaxurl, data, function(response) {
$sr.html(response);
//add class to all results that match the current searchterm
var found = $('#searchresults ul li:icontains("' + $('.s').val() + '")');
found.addClass('matched');
//remove all remaining list-items
$('#searchresults ul li').not('.matched').remove();
//highlight current string in searchbox
if ($('.s').val() !== '') {
$('#searchresults ul li.matched').highlight($('.s').val());
}