jquery:突出显示插件崩溃浏览器?

时间:2011-03-28 22:38:51

标签: javascript jquery crash highlight

嘿伙计们, 大多数人可能都是简单的问题。我无法弄清楚原因。 我在输入搜索框时正在执行ajax请求。我总是得到的结果是无序列表。我只显示当前与搜索框中的字符串匹配的列表项。我将class.matched应​​用于他们。我删除了所有没有类匹配项的项目。

此外,我使用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请求当前被触发并且输入中的文本再次设置为空时浏览器崩溃。

知道为什么会这样吗?这可能只是我遇到的一个逻辑问题。我已经在检查输入是否为空。因此,当输入中的文本再次被删除时,实际上甚至不应该触发高光线。

任何想法?

1 个答案:

答案 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());
            }