2012-01-06 71 views
2

我想使用jQuery.fn.extend在我的视图中注册一个函数。所以我将它定义在我的Asp MVC3应用程序的_Layoyt.cshtml文件中。以下是该代码。jQuery.fn.extend,没有MVC3的方法

<script type="text/javascript"> 
    $.fn.extend({ 
      tagBox :function(options) { } 
     }); 
</script> 

在我看来,我用下面的代码来调用方法

$(document).ready(function() { 
     $('.tags').tagBox({ maxTagCount: 5, initialTags: [] }); 
    }); 

,但是当我检查网页铬我看到一个错误

Uncaught TypeError: Object [object Object] has no method 'tagBox' d.extend._Deferred.f.resolveWithjquery-1.5.1.min.js:19 d.extend.readyjquery-1.5.1.min.js:19 c.addEventListener.A

我在做什么错这里?

回答

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教了我很多的基础知识,当我第一次开始学习如何写他们,我经常回去的例子作为基础。

+0

感谢您的快速回复。在使用$ .fn.extend之前,我尝试了这一点,结果是一样的。这就是为什么我将我的代码更改为使用$ .fn.extend。我会阅读你提供的文章,然后再试一次。 – Jayanga 2012-01-06 05:18:37

+0

我再次尝试了这个错误仍然存​​在。我也尝试了一些不同版本的jQuery,但仍然无法正确调用该函数。 – Jayanga 2012-01-06 10:21:02

+0

你能提供一个js提琴或一个工作的例子吗? – locrizak 2012-01-06 14:46:11

1

除了locrizak的出色答案,如果你的代码仍然不工作,这些脚本按照什么顺序出现在呈现的HTML中?

如果$.fn.extend(是在加载jquery lib之前声明的,它将不起作用。另外,如果在声明函数扩展之前在视图中执行$('.tags').tagBox({ maxTagCount: 5, initialTags: [] });,则它将不起作用。这些脚本必须是有序的,像这样:

  1. 加载jQuery库
  2. 声明你的功能扩展
  3. 使用/调用功能扩展

如果这没有帮助,尝试张贴的HTML呈现给浏览器,以便我们可以检查并帮助您弄清楚发生了什么问题。