2013-02-08 84 views
0


例如我有jQuery插件,我调用一个init方法,像这样一些atrributes:如何更改jQuery插件的属性

jQuery(document).ready(function($) { 
    $('#someid').somePlugin({ 
          animation : 'fadeIn', 
          speed : '1000', 
          easing : 'swing' 
         }); 
}); 

让我们假设我还有页面上的HTML链接。是否有可能以某种方式通过点击html链接来改变这个插件的init函数的属性值?
所以,通过点击链接我想改变速度属性,而不刷新页面。如果可能,实施这一行动的最佳方式是什么?

或者我应该先改变插件代码中的内容。 插件的代码:

(function($) { 
    $.fn.extend({ 
     somePlugin: function(options) { 

      var defaults = { 
       speed : 500, 
       animation : 'fadeIn', 
       easing : false 
      } 

      var options = $.extend(defaults, options); 
      var speed = options.speed; 
      var easing = options.easing; 
      var animation = options.animation; 

      return this.each(function() { 
       var obj = $(this); 
       //some action here 
      }); 
     } 
    }); 
})(jQuery); 
+1

这完全取决于插件的写法!传递一个新对象或传递字符串,就像你说的jQuery UI等等,如果插件不支持它,它也不起作用。 – adeneo 2013-02-08 22:28:41

+0

@adeneo,你应该将其作为答案发布,因为其他人不完整或者只是不正确。 – Sparky 2013-02-08 23:13:27

回答

-1

是的,你可以做这样的:

$('#someid').somePlugin('option', 'animation', 5000); 

此外,您可以一次通过更改多个选项:

$('#someid').somePlugin('option', {animation: 5000, otherOption: 'blah'}); 

我应该提到这只是适用于某些如果您使用“官方”jQuery插件。很多插件作者都坚持这种设计模式,但并非都是这样。另外,如果您使用jQuery UI Widget Factory开发插件,则可免费获得此功能。


编辑:由于OP正在创作他自己的插件,我们可以展示如何利用自定义插件来促进此功能的示例。直接从jQuery plugin authoring page取得:

(function($){ 
    var methods = { 
    init : function(options) { 
     //Extend options here with your 
     //defaults and init your plugin 
    }, 
    option: function(key, value){ 
     options[key] = value; 
    } 
    }; 

    $.fn.somePlugin = function(method) { 
    // Method calling logic 
    if (methods[method]) { 
     return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } else if (typeof method === 'object' || ! method) { 
     return methods.init.apply(this, arguments); 
    } else { 
     //some error that method doesnt exist 
    }  

    }; 

})(jQuery); 

$('div').somePlugin({someOption: true}); 
//..later 
$('div').somePlugin('option', 'someOption', false); 
+0

** Quote:** _“...只有**才能确定**如果您使用”**官方**“jQuery插件”_〜一个“官方”jQuery插件? [没有这种东西](http://docs.jquery.com/Plugins/Authoring)。 jQuery和jQueryUI开发团队成员JörnZaefferer编写的[jQuery Validate插件](http://bassistance.de/jquery-plugins/jquery-plugin-validation/)甚至没有这种能力:http ://jsfiddle.net/Lqpjy/ – Sparky 2013-02-08 22:57:55

+0

我想我应该说的官方“jQuery UI”插件?更好?仅仅因为某人是jQuuery开发团队的成员并且他们创建了一个插件,并不意味着该插件是“正式”的。这些是由jQuery UI团队官方支持和记录的插件:http://api.jqueryui.com/category/widgets/。 – joeltine 2013-02-08 22:58:12

+0

是的,一致认为,除非有某种认证过程,否则任何插件都不能成为“官方”。由于该问题不是专门针对jQueryUI,或者提到jQueryUI,所以您的观点是没有意义的。 – Sparky 2013-02-08 22:59:09