gpt4 book ai didi

javascript - jQuery 点击事件触发两次

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:51 26 4
gpt4 key购买 nike

我正在开发的内容覆盖脚本有问题。似乎我的关闭事件触发了两次,但第一次(或第二次,取决于您点击的打开链接)返回“未定义”。

您可以在 JSFiddle 上找到精简的工作示例:http://jsfiddle.net/UhSLy/2/

如果您单击 1。点击然后点击2。点击它首先提醒undefined,然后是Dummy

当我删除一个打开链接时,一切正常。但我必须有多个链接,因为它们会打开不同的叠加层。

导致问题的原因是什么,我该如何避免?

编辑: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);

最佳答案

$('#close').click(function() {
self.close();
});

您将两个对象 close() 方法绑定(bind)到关闭处理程序。基本上,当您单击关闭按钮时,它会运行两个函数,一个用于每个覆盖对象。因为一个覆盖对象不存在,它返回 undefined

您可以通过以下方式解决此问题:

close: function () {
if(this.overlay != undefined){ // Skips over the undefined overlays
alert(this.overlay);
}
}

演示: http://jsfiddle.net/UhSLy/9/

关于javascript - jQuery 点击事件触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com