jQuery.fn.extend,没有MVC3的方法

时间:2012-01-06 04:48:44

标签: jquery asp.net-mvc-3 jquery-ui

我想使用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

我在这里做错了什么?

2 个答案:

答案 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: [] });,则它将不起作用。脚本必须按如下顺序排序:

  1. 加载jQuery库
  2. 声明您的函数扩展名
  3. 使用/调用功能扩展
  4. 如果这没有帮助,请尝试将呈现的HTML发布到浏览器,以便我们检查并帮助您找出问题所在。