私のプロジェクトの1つをデバッグすると、別の開発者が$(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);