gpt4 book ai didi

使用 "live"的 jQuery 插件模式

转载 作者:行者123 更新时间:2023-12-01 00:20:36 26 4
gpt4 key购买 nike

我有很多关于编写面向对象的 javascript 代码和开发 jQuery 插件的文章,到目前为止一切顺利,我了解它们是如何工作的,并且我可以创建自己的插件。

但是,所有文章都存在一个问题(即使有官方插件创作指南 - http://docs.jquery.com/Plugins/Authoring) - 这些所有模式都不支持“实时”。

让我们以这个模式为例 - http://www.virgentech.com/blog/2009/10/building-object-oriented-jquery-plugin.html

$.fn.myplugin = function(options)
{
return this.each(function()
{
var element = $(this);

// Return early if this element already has a plugin instance
if (element.data('myplugin')) return;

// pass options to plugin constructor
var myplugin = new MyPlugin(this, options);

// Store plugin object in this element's data
element.data('myplugin', myplugin);
});
};

将在每个 jQuery 匹配对象上创建新的“MyPlugin”实例。

如何更改它(如果可能)以便它可以在将来添加的元素上工作?

谢谢

最佳答案

我经常在我的插件中成功地使用 live 作为自定义选项。下面是一个向单击的元素添加警报的简单示例:

$.fn.clickAlert = function(settings) {
settings = $.extend({live: false}, settings);

function clickAlertFn() {
alert('Clicked!');
}

if (settings.live) {
return this.live('click', clickAlertFn);
} else {
return this.click(clickAlertFn);
}
};

// this will only work on existing `a` elements with class foo
$('a.foo').clickAlert();

// this will work on existing and future `a` elements with class bar
$('a.bar').clickAlert({live: true});

在此示例中,任何可以与 $('...').live('click', ...') 正常工作的内容都可以与 $('...').clickAlert({live: true });

另外一件事,大多数插件设计都让你做这样的事情:

$.fn.foo = function() {
return $(this).each(function() {
// code in here...
});
}

不幸的是,在 each 循环中使用 live 是行不通的。

关于使用 "live"的 jQuery 插件模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519423/

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