Отладка одного из моих проектов Я заметил, что другой разработчик изменил функцию $(document).ready()
, чтобы создать замыкание внутри себя.EG $(document).ready(function($) { });
Мне любопытно, как это сделать, а также как его использовать.
Примечание: При удалении $
из функции мой код снова работает.$(document).ready(function() { })
Оригинал / Фиксированный код
$(document).ready(function() {
var id = //pull session variable from asp session (yuck)
var img = $('.photoLink');
$('.photoLink').click(function() {
$(this).photoDialog({
id: id,
onClose: function() {
img.attr('src', img.attr('src') + '&rand=' + (new Date()).getTime()); //prevent caching of image
}
});
});
});
Модифицированный / неработающий код
$(document).ready(function($) {
var id = //pull session variable from asp session (yuck)
var img = $('.photoLink');
$('.photoLink').click(function() {
$(this).photoDialog({
id: id,
onClose: function() {
img.attr('src', img.attr('src') + '&rand=' + (new Date()).getTime()); //prevent caching of image
}
});
});
});
Модифицированный кодприведет к ошибкам в FireBug, утверждая, что пользовательская функция плагина, которую я вызывал, не существует.Я предполагаю, что это потому, что аргумент $
переопределяет или конфликтует с любой из функций jQuery, пытающихся его использовать.
Я действительно не понимаю, почему кто-то изменил это в текущем контекстеэто не имеет смысла, так как этот вызов плагина является единственным javascript на странице.
Может кто-нибудь объяснить мне, почему вы используете это и, возможно, пример его использования?
Править
Ниже приведен код для моего пользовательского плагина, я также изменил приведенные выше примеры, чтобы показать, как я его называю:
(function($) {
var link = $('<link>');
link.attr({
type: 'text/css',
rel: 'stylesheet',
href: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/themes/black-tie/jquery-ui.css'
}).appendTo('head');
var script = $('<script>');
script.attr({
type: 'text/javascript',
src: 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js'
}).appendTo('head');
$.fn.photoDialog = function(options) {
var defaults = {
autoOpen: false,
title: 'Photo Tool',
minHeight: 560,
minWidth: 540,
url: '/photo_form.aspx',
onClose: function(){}
};
var opts = $.extend(defaults, options);
return this.each(function() {
$this = $(this);
that =$(this);
var $dialog = $('<div>')
.html('<iframe src="' + opts.url + '?sn=' + opts.id + '" width="' + (opts.minWidth - 20) + '" height="' + (opts.minHeight - 20) + '" style="border: none;" scrolling="no"></iframe>')
.dialog({
autoOpen: opts.autoOpen,
title: opts.title,
minHeight: opts.minHeight,
minWidth: opts.minWidth,
modal: true,
close: function() {
opts.onClose.call(that);
}
});
$this.click(function() {
$dialog.dialog('open');
return false;
});
});
};
})(jQuery);