jQuery 插件可由控制台触发,但不能由函数触发 - 为啥会这样?

Posted

技术标签:

【中文标题】jQuery 插件可由控制台触发,但不能由函数触发 - 为啥会这样?【英文标题】:jQuery Plugins triggerable by Console, but not by function - why that?jQuery 插件可由控制台触发,但不能由函数触发 - 为什么会这样? 【发布时间】:2012-07-17 17:31:30 【问题描述】:

我有一个神秘的 JS 问题:我用一个函数激活不同的 jQuery 插件。它是这样称呼的:

<script>
postAjaxCalls();
</script>

那么,对应的函数是这样的:

function postAjaxCalls() 
    jQuery("[title]").tooltip(); 
    alert("this works great, tooltip not!");
    jQuery("select").selectbox();
 

当我重新加载页面时,除了工具提示插件之外一切正常。现在,如果我在 JS 控制台中触发完全相同的代码,插件就会被激活:

jQuery("[title]").tooltip(); 

为什么?为什么通过控制台激活时可以工作,而通过函数激活时不能工作?

干杯!

【问题讨论】:

尝试将其放入文档中。准备就绪 查看对 codeparadox 的评论:无论如何都要得到它.. ?! 【参考方案1】:

$(document).ready(function() .. ) 中尝试您的代码,简称$(function() .. ),以便在 DOM 准备好后执行您的代码。

jQuery(document).ready(function() 

  function postAjaxCalls() 
    jQuery("[title]").tooltip(); 
    alert("this works great, tooltip not!");
    jQuery("select").selectbox();
   
  postAjaxCalls();

);

简而言之或

jQuery(function() 

  function postAjaxCalls() 
    jQuery("[title]").tooltip(); 
    alert("this works great, tooltip not!");
    jQuery("select").selectbox();
   
  postAjaxCalls();

);

【讨论】:

这很矛盾:我在另一个项目中也遇到了这个问题。我使用了您的建议(jQuery(function() ..)),但在我执行 $('.datepicker').datepicker(); 之前它仍然不起作用在控制台中!?【参考方案2】:

您可能在 DOM 准备好之前调用了postAjaxCalls。当你从控制台调用它时,DOM 就准备好了,所以它可以工作了。

试试这个:

$(function()
    postAjaxCalls();
);

【讨论】:

以上是关于jQuery 插件可由控制台触发,但不能由函数触发 - 为啥会这样?的主要内容,如果未能解决你的问题,请参考以下文章

如何知道何时触发 JQuery 函数?

由 Datatables 插件和 jQuery 1.11.3 触发的“Uncaught TypeError: Cannot use 'in' operator to search 'length' i

jQuery Shapeshift 插件

jQuery插件不触发更正keydown或空闲事件

软触发和硬触发的区别

jQuery的ajaxFileUpload上传文件插件刷新一次才能再次调用触发change