0

我的 JS 文件中有这段代码。如果我删除 if else 循环,那么我可以将 hello 作为警报,否则不会。

我在萤火虫控制台中也没有任何错误

基本上在那些循环中,我只是检查 url 是否包含几个关键字,以便可以将 css 更改为选中

$(document).ready(function(){ 
    var userPage = /child\/(.+)/.exec(location.href)[1];        
    if( userPage.indexOf('show') != -1 )
        {$('.profile').addClass('selected');}           
    if( userPage.indexOf('workbook') != -1 )
    {
        $('.selected').removeClass('selected');
        $('.workbook').addClass('selected');
    }
    if( userPage.indexOf('gallery') != -1 )
    {
        $('.selected').removeClass('selected');
        $('.gallery').addClass('selected');
    }
    if( userPage.indexOf('mylist') != -1 )
    {
        $('.selected').removeClass('selected');
        $('.mylist').addClass('selected');
    }

    if( userPage.indexOf('Photos') != -1 )
    {
        $('.selected').removeClass('selected');
        $('.photos').addClass('selected');
    }

    if( userPage.indexOf('profile/list') != -1 )
    {
        $('.selected').removeClass('selected');
        $('.list').addClass('selected');
    }                   
    alert("hillo");
4

2 回答 2

2

您设置警报的方式不在任何 if 语句中,因此无论如何它都应该发出警报。如果没有警报,您的脚本有错误,我发现至少有两个:

您假设 url 包含 string child/,如果它不包含您的脚本将停止并且无法工作,接下来您假设该输出exec()是一个具有至少两个值的数组,选择该数组的第二个值,如果由于某种原因,您的 url 不包含child/该数组中不会有第二个值,并且脚本会停止,但是它已经在exec().

第二个错误是document.ready函数没有关闭,那可能只是一个错字。

另一方面,您应该想办法更动态地执行此操作。您正在使用与要检查的 url 字符串相同的类,因此在大多数情况下,您可以直接在选择器中使用它,将您的函数缩减为几行,例如:

$(document).ready(function() {
    var url = 'http://somesite.com/child/gallery'; //just a test url

    var userPage = url.indexOf('child/') != -1 ? /child\/(.+)/.exec(url)[1] : null;

    if (userPage) {
        console.log('has child in url');
        $('.selected').removeClass('selected');
        $('.'+userPage).addClass('selected');

    }else{
        console.log('not ok');
    }
});​
于 2012-08-09T05:14:30.667 回答
0

它在代码的第一行返回 null。

var userPage = /child/(.+)/.exec(location.href)[1];

并且您必须收到此错误“:无法读取 null 的属性 'indexOf'”

最好先检查 url 是否有孩子然后继续。

于 2012-08-09T05:47:59.150 回答