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

发布于 2024-12-11 18:50:24 字数 1823 浏览 0 评论 0原文

因此,我试图让一些 JavaScript 代码正常工作,以按页面上的日期过滤结果列表。

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

$(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,因为其他过滤器使用相同的变量。

因此,用户可以立即按顺序、流派和日期进行过滤,并最终得到以“/order=distance/genres=GenreX/dates=today”结尾的 currentURL。

最奇怪的部分是在我使用 split 方法之前由于“console.log(currentURL)”行而发生的情况。我把它放在那里是为了测试它使用的 currentURL 值,当我观察控制台时,这段代码运行得很好。

但如果我关闭控制台,它就会再次损坏!因此,如果我注意确保它没有搞砸,它就不会;如果我不看它,它就会行为不端。

有人有什么想法吗?

So I'm trying to get some javascript code working that will filter a list of results by date on the page.

It works perfectly in FF on both Linux and Mac, Chrome works on mac, but I'm getting a very strange result on Chrome and Chromium on Linux (Ubuntu 10.10). The following is the relevant code:

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

The split() on currentURL doesn't seem to be working in Chrome on Linux.

So if the url I'm building ought to be: '/order=vote/genres=/dates=today'

I'm actually getting perhaps: '/order=vote/genres=/dates=alldates=today'.

I have currentURL outside the function because other filters use the same variable.

So a user can filter by order, genres, and dates at once, and end up with a currentURL ending of '/order=distance/genres=GenreX/dates=today'.

The weirdest part is what happens due to the 'console.log(currentURL)' line before I use the split method. I put it in there to test what currentURL value it was using, and when I watch the console, this code works perfectly.

But if I close the console, it goes back to being broken! So if I watch to make sure its not messing up, it doesn't, if I don't watch it, it misbehaves.

Anyone have any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

末骤雨初歇 2024-12-18 18:50:25

尝试将 console.log() 包装在这样的检查中:

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

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

Try wrapping your console.log() in a check like this:

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

This will make sure the code is not secretly breaking when you don't have your console open. What might be happening is when the console is open the console.log works because console is defined but when it is closed it might be trying to do a .log on undefined but you would never know because your console is not open. Awesome Catch22.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文