jQuery扩展函数未初始化

时间:2010-06-19 11:41:33

标签: jquery

在Firebug控制台中工作,但不能在文件中工作。

谷歌浏览器 - 未捕获的TypeError:对象#没有方法'listAttributes'

Firefox - $(“。div4”)。listAttributes不是函数

<script src='/jquery.js'></script>
<script src='jquery.listAttributes.js'></script>

<div class='div4' style='color:red;'>
</div>

<script>
$(".div4").listAttributes();
 </script>

jquery.listAttributes.js:

if(jQuery) {
    jQuery(document).ready(function() {
        jQuery.fn.listAttributes = function(prefix) {
            var list = [];
            $(this).each(function() {
                console.info(this);
                var attributes = [];
                for(var key in this.attributes) {
                    if(!isNaN(key)) {
                        if(!prefix || this.attributes[key].name.substr(0,prefix.length) == prefix) {
                            attributes.push(this.attributes[key].name);
                        }
                    }
                }
                list.push(attributes);
            });
            return (list.length > 1 ? list : list[0]);
        }
    });
}

我的错误在哪里?

2 个答案:

答案 0 :(得分:4)

此代码:

$(".div4").listAttributes();

document.ready之前运行,但您的插件未定义直到 document.ready,只需删除jQuery(document).ready(function() { });包装器你的插件:)


另一个注意事项,对插件的调用应该在document.ready处理程序中,如下所示:

$(function() {
  $(".div4").listAttributes();
});

这可确保.div4元素位于DOM中并准备就绪。

答案 1 :(得分:1)

您正在脚本中调用$(".div4").listAttributes();内联(因此,当浏览器分析<script>元素时调用它),但您要在jQuery.fn.listAttributes事件中分配ready,在浏览器完成解析整个文档之后才会存在。