Javascript更新导致悲伤

时间:2012-09-28 09:20:01

标签: javascript jquery

我无论如何都不是一个javascript开发人员,但是我遇到了JS问题。

如果有人可以帮我弄清楚问题会是什么样的惊人。

正在崩溃的脚本是:

        $('button').each(function()
            {
            var curr_title = $(this).attr('title');

            if(curr_title.length > 0)   $(this).button({ icons: { primary: curr_title } });
            else                        $(this).button();
            });

错误是

  

TypeError:无法读取未定义的属性“length”。

在以前的代码版本中,这根本没有问题。但唯一的变化是更新Jquery。

有谁知道这可能是问题吗?

再次。抱歉,如果我是愚蠢的。

3 个答案:

答案 0 :(得分:2)

此行返回的值为undefined(可能是因为它引用的按钮没有指定此类属性。)

var curr_title = $(this).attr('title');

jQuery改变了版本1.6中attr()的行为

  

从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。

因此if语句中的调用失败。要“修复”此功能,您只需添加undefined这样的支票:

if( (typeof curr_title != 'undefined') && (curr_title.length > 0)) {
   $(this).button({ icons: { primary: curr_title } });
} else {
   $(this).button();
}

答案 1 :(得分:0)

看起来你可能在标记中有一个没有“title”属性的按钮。对于此按钮(或按钮)curr_title未定义,因此在其上调用.length会引发异常

答案 2 :(得分:0)

$(this).attr('title');未定义,因此没有长度。您的按钮是否包含标题,如果您对该属性的测试存在,请尝试:

$('button').each(function()
            {
            var curr_title = $(this).attr('title');

            if(curr_title != undefined)  
                $(this).button({ icons: { primary: curr_title } });
            else                        
                $(this).button();
            });