检查插件是不是已在 jQuery 中初始化?

Posted

技术标签:

【中文标题】检查插件是不是已在 jQuery 中初始化?【英文标题】:Checking to see if a plugin has been initialized in jQuery?检查插件是否已在 jQuery 中初始化? 【发布时间】:2016-09-21 18:11:29 【问题描述】:

我正在使用select2 jQuery 插件(V4),据我所知,他们没有onInitialized 事件;但我需要在初始化之后运行一些代码

初始化我的意思是它已经完成并且所有与之关联的元素现在都准备好了。

我看到了this question,但似乎没有一个答案能解决不断检查直到可用的问题;比如如果你第一次检查它不存在,那么你需要运行的代码就不会运行。

我曾想过将setInterval 与上述类似的方法一起使用,但不确定是否有更好的方法?

【问题讨论】:

只是检查您所说的“初始化”是什么意思:您想在使用$('select').select2(); 调用它之前检查 Select2 是否已下载并注册为 jQuery 函数?或者你想在做其他事情之前检查$('select').select2(); 是否完整? @Lesley 抱歉,我的意思是完成。我已经更新了我的问题。 您链接到的问题是关于检查插件是否已下载并注册为 jQuery 函数。如果你想在调用 select2() 完成后做某事,我的第一个想法是:为什么不把你想做的事情的代码放在调用 Select2 之后呢? $('#my-select').select2(); console.log('This should happen after select2() is done'); @Lesley 虽然你在 after 调用 select2 之后给它命令,因为 javascript 在默认情况下是同步的而不是异步的,那么这不意味着 select2后面运行代码不一定就执行完了? 这取决于 Select2 在幕后所做的事情......我想它可能会在它真正完成之前说return,然后由于一些异步回调或其他原因而进一步工作。您是否有表明这种情况的情况? 【参考方案1】:

您可以异步的唯一方法是在获取远程数据时,这样您就可以在该 ajax 中注入回调。

如果您有多个 ajax 调用,请使用 deferred:

var deffered1 = $.Deferred();

successerror 之后的 ajax 调用中,使用以下代码来解决这些调用。

complete:function()
    deffered1.resolve()

并订阅事件:

$.when(deffered1, deffered2).done(function() 
    // your initialized actions
)

【讨论】:

【参考方案2】:

如果您的页面上有超过 1 个 select 元素需要转换为 select2 dropdown,那么您可以使用以下内容:Multi Select version

如果您在页面上只有一个选择,则可以使用以下内容: Single Select option:

希望对你有帮助。

【讨论】:

以上是关于检查插件是不是已在 jQuery 中初始化?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 数据表:测试数据表插件是不是已初始化

如何检查 `let` 变量是不是已在 ES6 上声明?

Jquery mobile listview - 检查初始化是不是完成

如何使用 Datatables Jquery 插件销毁表并使用新的更新数据重新初始化同一个表

如何在 Ktor 内部检查 Netty 是不是实际启动?

测试 JQuery 工具提示是不是已初始化