0

我在使用一些 javascript 时遇到了一些困难。这段代码似乎在 Firefox 和 Chrome 中正常工作(如果搜索词长度小于 2 个字符,则会显示错误消息),但对于我来说,我无法弄清楚为什么这不会在 IE8 中呈现错误消息.

我曾尝试更改以下内容:(请参阅:Internet Explorer 8 中的 jQuery 问题

认为这可能是 jquery 的细微差别,但我开始认为代码可能有问题,或者它可能必须有一些 IE8 特定的逻辑,但我没有想法。JQuery 实际上适用于其他方法,只是这一段代码似乎没有在 IE 上呈现错误消息。

$(document).ready(function() {
$('#countrySelectionSubmitButton').on('click',function(){   
    $.cookie("locale","en_US");
});

$('#countrySelectionCancelButton').on('click',function(){
    alert($.cookie("locale"));
});

$('#countrySelectionDisplayLocale').text($.cookie("locale"));


var showError = false;
if ($( "#mainSearch" ).length > 0) {
    $( "#mainSearch" ).autocomplete({
        minLength: 0,
        source: function(request, response) {
            var term = $("#mainSearch").val();
            if ( term.length < 2 || term === $("#mainSearch").attr('title')) {
                response([SiteSearch.ErrorMessage]);
                if ( !showError) {
                    $( "#mainSearch" ).autocomplete('close');
                }
                showError = false;
            } else {
                if (term.length >= 3) {
                    $( "#mainSearch" ).autocomplete('enable');
                    $.ajax({
                        url: SiteSearch.LookAheadURL +"?term=" + $('#mainSearch').val() + "&countryCode=" + SiteSearch.CountryCode,
                        type: 'GET',
                        //dataType: 'jsonp',
                        //jsonp: 'callback', 
                        //jsonpCallback: 'autocomplete_callback',
                        error: function(xhr, status, error) {
                            throw new Error ("Autocomplete Service Error");
                        },
                        success: function(data) {
                            //console.log('ajax success');
                            var dataset = [];

                             $.each(data.suggestions, function(i,v) {
                                dataset.push($('<div/>').html(v.value).text()); // Original
                              });
                             response(dataset);
                        }
                    });
                }
            }
        },
        select: function (event, ui) {
            if (ui.item.value === SiteSearch.ErrorMessage) {
                event.preventDefault();
            } else {
                $(this).val(ui.item.value);
                $('#sitesearchform').submit();
            }
        }// Point of the list (DDL ErrorMessage being created / populated) IE doesn't render correctly.
    }).data("autocomplete")._renderItem = function(ul, item) {
        var re = new RegExp("(" + RegExp.escape(this.term) + ")", 'gi') ;
        var match = item.label;
        if (item.value !== SiteSearch.ErrorMessage) {
            match = item.label.replace(re, "<span class='autocompleteMatch'>$1</span>");
        }
        return $( "<li></li>" )
            .data("item.autocomplete", item)
            .append( "<a>" + match + "</a>" )
            .appendTo(ul);
    };
} else {
    throw new Error("Could not find $('#mainSearch')");
}      
$("#sitesearchform").submit(function(){
    var term = $("#mainSearch").val();
    if ( term.length < 2 || term === $("#mainSearch").attr('title')) {
        showError = true;            
        $( "#mainSearch" ).autocomplete('search');
        return false;
    }
    return true;
});

编辑:我还注释掉了 console.log 行

任何想法或想法将不胜感激。谢谢大家。

  • RR
4

1 回答 1

0

实际上,我最终修改了该方法以显示放置在 if 标记中的错误消息。

$("#sitesearchform").submit(function(){
var term = $("#mainSearch").val();
if ( term.length < 2 || term === $("#mainSearch").attr('title')) {
    showError = true;            
    $( "#mainSearch" ).autocomplete('search');
    $('#headerSearch > ul').show();
    return false;
}
return true;
});
于 2013-11-08T17:46:01.983 回答