从jQuery插件获取变量

时间:2015-01-18 13:14:52

标签: javascript jquery jquery-plugins

我需要知道如何在插件外部获取插件变量,以便使用一些测试框架对其进行测试。

所以这是我的简化插件:

(function ($) {
    $.fn.extend({      
        myPlugin: function (argumentOptions) {
            var defaults = {
                image: 'img/default.png',
            };

            this.textSend = '';

            var options = $.extend(defaults, argumentOptions);
            var globalHere = this;

            return this.each(function () {
                obj.mouseup(function(e) {
                    globalHere.textSend = 'test';
                });
            });
        }
    });     
})(jQuery);

我需要插件外的变量this.textSend

我试过这样的方式:

$(document).ready(function(){

  var testfield = $('.txt');

  testfield.myPlugin({
      image:"../img/twitter.png"
  });

  testfield.focus();
  testfield.trigger($.Event( "mouseup"));
  console.log($.fn.myPlugin.textSend);
});

但是console.log会给我undefined

我怎样才能在外面获得该变量?

由于

3 个答案:

答案 0 :(得分:1)

您可以将其存储在您在插件周围创建的封闭范围内,并通过其他功能公开。当然它需要一些重构,但这是一般的想法:

(function ($) {
    var whateverNameYouWant; //here

    $.fn.extend({      
        myPlugin: function (argumentOptions) {
            var defaults = {
                image: 'img/default.png',
            };

            this.textSend = '';
            whateverNameYouWant = this.textSend; //here

            var options = $.extend(defaults, argumentOptions);
            var globalHere = this;

            return this.each(function () {
                obj.mouseup(function(e) {
                    globalHere.textSend = 'test';
                    whateverNameYouWant = this.textSend; //here
                });
            });
        }
    });     

    $.extend({
        getWhateverNameYouWant: function() {
            return whateverNameYouWant;
        }
    })
})(jQuery);



var value = $.getWhateverNameYouWant();

答案 1 :(得分:1)

您需要确保以这样的方式返回this



(function($) {
  $.fn.extend({
    myPlugin: function(argumentOptions) {
      var self = this;
      
      self.textSend = 'something';
      self.inc = 0;
      
      self.mouseup(function(e) {
        self.textSend = 'new thing #' + self.inc;
        self.inc++;
      });

      return self;
    }
  });
})(jQuery);

var instantiated = $('button').myPlugin({});
$('input').val(instantiated.textSend);

$('button').click(function(e) {
  $('input').val(instantiated.textSend);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<label>Current textSend:</label>
<input />
<br/>
<button>Change textSend</button>
&#13;
&#13;
&#13;

希望能让你走上正轨。

<强>更新 尝试新的代码。

答案 2 :(得分:0)

在line console.log($。fn.myPlugin.textSend);

使用testfield.textSend。现在它已成为选择通过myplugin的支持。