Chrome浏览器中的.split()字符串方法出现奇怪的javascript错误

时间:2011-10-24 17:31:39

标签: javascript jquery google-chrome

所以我试图让一些javascript代码工作,它将按页面上的日期过滤结果列表。

它在Linux和Mac上都可以在FF中完美运行,Chrome适用于Mac,但我在Linux上的Chrome和Chromium上获得了一个非常奇怪的结果(Ubuntu 10.10)。以下是相关代码:

$(document).ready(function() {
currentURL = window.location.pathname + "/order=vote/genres=/dates=";

$(".date").click(function() {
    var thisButton = $(this);
    if (thisButton.html() == 'Today') {
        var dateText = 'today';
    } else if (thisButton.html() == 'All') {
        var dateText = 'all';
    } else {
        var dateText = '';
    }

    console.log(currentURL);
    var splitURL = currentURL.split('dates=');
    var filterDateURL = splitURL[0] + 'dates=' + dateText;

    $.ajax({
        url: filterDateURL,
        success: function(response) {
            $("#show_container").html($("#show_container", response).html());
            $("#genre_filters").html($("#genre_filters", response).html());
            currentURL = filterDateURL;
            // add selected to this button, remove from other date filters
            thisButton
                .addClass('selected')
                .removeClass('unselected')
                .siblings("a")
                    .removeClass('selected')
                    .addClass('unselected');
        }
    });
    return false;
});
});

currentURL上的split()似乎在Linux上的Chrome中不起作用。

所以,如果我正在构建的网址应该是:'/ order = vote / genres = / dates = today'

我实际上也许得到:'/ order = vote / genres = / dates = alldates = today'。

我在函数外面有currentURL,因为其他过滤器使用相同的变量。

因此,用户可以一次按顺序,流派和日期进行过滤,最后得到currentURL结尾'/ order = distance / genres = GenreX / dates = today'。

最奇怪的部分是在使用split方法之前由于'console.log(currentURL)'行而发生的事情。我把它放在那里测试它正在使用的currentURL值,当我观察控制台时,这段代码完美无缺。

但是,如果我关闭控制台,它会再次被打破!因此,如果我注意确保它没有弄乱,那就不会,如果我不看,它会行为不端。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试在这样的支票中包装console.log():

if (console && console.log){
    console.log(currentURL);
}

这将确保在您没有打开控制台时代码不会秘密破解。可能发生的事情是当控制台打开时,console.log正常工作,因为控制台已定义但是当它关​​闭时,它可能正在尝试在未定义的情况下执行.log,但您永远不会知道,因为您的控制台未打开。真棒Catch22。