从 jQuery 插件获取变量

get variable from a jQuery Plugin

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

所以这是我的简化插件:

(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.logreturn我undefined

如何在外部获取该变量?

谢谢

您可以将它存储在您围绕插件创建的封闭范围内,并通过另一个函数公开它。当然它需要一些重构,但这是总体思路:

(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();

第 console.log($.fn.myPlugin.textSend);

使用testfield.textSend。现在它已通过 myplugin 成为选择器的属性。

您需要像这样确保返回 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>

希望能让你走上正轨。

更新 尝试新代码。