简体   繁体   English

jQuery-从插件外部访问变量

[英]Jquery - Access variable from outside the plugin

I got a simple plugin as below: 我有一个简单的插件,如下所示:

$.fn.ajaxSubmit = function(options){
    var submisable = true;
}

I want to able to change/access the variable myvar from outside the plugin, by doing something like below: 我想要通过以下操作来从插件外部更改/访问变量myvar:

$(function(){
    $('form').ajaxSubmit();
    $('div').click(function(){
        submisable =false;
    });
});

You can also create methods to access the variables that are inside a plug in: 您还可以创建方法来访问插件中的变量:

$.fn.ajaxSubmit = function(options){
    var submisable = true;

    $.fn.ajaxSubmit.setSubmissable = function(val){
       submisable = val;
    }

}

Then you can call it like this. 然后,您可以这样称呼它。

$('form').ajaxSubmit();
$('form').ajaxSubmit.setSubmissable(false);

This solution is not straight forward, but follows the jquery plugin guidelines. 这个解决方案不是直接的,但是遵循jquery插件指南。

(function($) {
    var myVar = "Hi";
    var methods = {
        init: function(option) {
            return this.each(function() {
                $(this).data("test", myVar);
            });
        },
        showMessage: function() {
            return this.each(function() {
                alert($(this).data("test"));
            });
        },
        setVar: function(msg) {

            return this.each(function() {
                $(this).data("test", msg);
            });
        },
        doSomething: function() { 
            //perform your action here
        }
    }

    $.fn.Test = 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 {
            $.error('Method ' + method + ' does not exist on jQuery.Test');
        }
    };
})(jQuery);

$("form").Test("init");
$("#getCol").click(function() {
    $("form").Test("setVar", "Hello World").Test("showMessage");

});

Are you thinking to access them as properties? 您是否正在考虑将它们作为属性访问? Something like: 就像是:


$.fn.ajaxSubmit = function(options) {
    var defaults = {},
    o = $.extend({}, defaults, options);
    var _myvar = 'blue'

this.myvar = new function(){
  return _myvar;
}
this.setmyvar = function(_input){
  _myvar = _input
}

return this.each(function() {           

    if (_myvar == 'blue') {
        alert('hi');
    }
    if (_myvar == 'red') {
        alert('bye');
    }
});

}

And set like: 并设置为:

this.setmyvar('red');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM