開発中のコンテンツ オーバーレイ スクリプトに問題があります。クロージング イベントが 2 回発生するようですが、1 回目 (またはクリックした開始リンクによっては 2 回目) は「未定義」を返します。
JSFiddle で簡素化された作業例を見つけることができます: http://jsfiddle.net/UhSLy/2/
1.をクリックしてから2. をクリックすると、最初に未定義のアラートが表示され、次にDummyが表示されます。
オープニングリンクを1つ削除すると、すべて正常に動作します。ただし、異なるオーバーレイを開くため、複数のリンクが必要です。
問題の原因と回避方法を教えてください。
編集: JSFiddle のコードは次のとおりです。
;(function ($, window, document, undefined) {
"use strict";
var pluginName = 'contentOverlay',
defaults = {
property: 'value'
};
function Plugin(element, options) {
this.element = element;
this.$element = $(element);
this.options = $.extend({}, defaults, options);
this.init();
}
Plugin.prototype = {
/**
* Init
*/
init: function () {
var self = this;
// Bind opening method
this.$element.click(function() {
self.open();
});
// Bind closing method
$('#close').click(function() {
self.close();
});
},
/**
* Open
*/
open: function () {
this.overlay = 'Dummy';
},
/**
* Close
*/
close: function () {
alert(this.overlay); // <==== PROBLEM: fires twice. returns 'undefined' once
},
};
$.fn[pluginName] = function (options) {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName,
new Plugin(this, options));
}
});
}
$(function () {
$('.open').contentOverlay();
});
})(jQuery, window, document);
</p>