我有以下插件,虽然我希望它能够应用于多个元素,但我不希望为每个元素创建一个新对话框。
但是在dialog.open回调中或单击按钮时,我希望能够访问被单击的元素并打开对话框。
如果我想创建多个对话框,我想我可以将this.each(function () {...}
放在init
方法中,然后this
将是单独点击的元素,但如前所述,我只会一个对话框。
EDIT。我修改了代码,以便它完成我需要它做的事情。使用data
似乎有点像我一样。有没有更合适的方法呢?
这是如何完成的?
(function($){
var defaults = {};
var methods = {
init : function (options) {
var settings = $.extend({}, defaults, options);
var dialog = $('<div/>').dialog({
open: function( event, ui ) {
console.log(dialog.data('elementThatWasClicked'));
},
buttons: [
{
text: 'click',
click: function() {console.log(dialog.data('elementThatWasClicked'));}
}
]
});
return this.each(function () {
var $this=$(this);
$this.click(function(){dialog.data('elementThatWasClicked',$this).dialog('open')});
});
}
};
$.fn.test = function(method) {
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));
$(function(){
$('.bla').test();
});