我想使用jQuery.fn.extend在我的视图中注册一个函数。所以我在我的Asp MVC3应用程序的_Layoyt.cshtml文件中定义了它。以下是该代码。
<script type="text/javascript">
$.fn.extend({
tagBox :function(options) { }
});
</script>
在我看来,我使用以下代码来调用方法
$(document).ready(function () {
$('.tags').tagBox({ maxTagCount: 5, initialTags: [] });
});
但是当我用chrome检查页面时,我看到了一个错误
未捕获TypeError:对象[object Object]没有方法'tagBox' d.extend._Deferred.f.resolveWithjquery-1.5.1.min.js:19 d.extend.readyjquery-1.5.1.min.js:19 c.addEventListener.A
我在这里做错了什么?
答案 0 :(得分:1)
我认为您已经混淆了$.fn.extend
或简称$.extend
的用途。这些用于将一个对象的值覆盖到另一个对象,并确保为该属性定义了值。我认为你正在寻找的是一个jquery插件。这是一个壳。
(function($){
var _defaults = {
your:"defaults",
you:"Want to extend"
};
$.fn.tagBox = function(options){
var _opts = $.extend({}, _defaults, options);
return this.each(function(){
});
};
})(jQuery);
当我第一次开始学习如何编写它们时,This article教会了我很多基础知识,我经常回到这个例子作为基础。
答案 1 :(得分:1)
除了locrizak的优秀答案之外,如果您的代码仍无效,这些脚本会以什么顺序出现在呈现的HTML中?
如果在加载jquery lib之前声明$.fn.extend(
,它将无效。此外,如果在声明函数扩展名之前在视图中执行$('.tags').tagBox({ maxTagCount: 5, initialTags: [] });
,则它将不起作用。脚本必须按如下顺序排序:
如果这没有帮助,请尝试将呈现的HTML发布到浏览器,以便我们检查并帮助您找出问题所在。