【问题标题】:If I call function inside document ready it will not work, but if I call it on an event it works just fine [closed]如果我在准备好的文档中调用函数,它将不起作用,但是如果我在事件中调用它,它就可以正常工作[关闭]
【发布时间】:2013-04-06 22:14:37
【问题描述】:

我有一个 java 脚本函数 my_func(),我想在页面加载时调用它。这是我会得到的奇怪行为:如果我在文档中调用该函数准备就绪,它将不起作用:

function my_func(){
//do something
}
$(document).ready(function(){
   my_func();   
});

但如果我在某个事件上调用它,它就可以正常工作:

function my_func(){
//do something
}
$(document).ready(function(){
   $('#myId').click( function(){
       my_func();
    });   
});

有人知道吗?怎么在文档里面直接调用ready?

【问题讨论】:

  • 这个函数有什么作用?
  • my_func 定义在哪里?
  • 您可能正在使用:my_func = function() {... 而不是 function my_func() {...。有区别。
  • no 该函数未在另一个函数中定义。请查看已编辑的问题
  • @Amin:我们确实需要看一下函数的内容,那么;从您向我们展示的内容来看,它应该可以正常工作。

标签: javascript jquery


【解决方案1】:

您的问题是当 DOM 的其余部分已加载时,dijit.form.TextBox 尚未加载。您需要更改您的 my_func 代码以包含对 require 的调用:

function my_func() {
    require(['dijit/form/TextBox'], function(TextBox) {
        // ...
        var newBox = new TextBox();
        // ...
    });
}

您需要为每个 Dojo 课程执行此操作。比如你还需要dijit.form.Button:

function my_func() {
    require(['dijit/form/Button', 'dijit/form/TextBox'], function(Button, TextBox) {
        // ...
    });
}

有点遗憾,它是如此冗长,但这就是它的方式。有关require 的更多信息,请访问Dojo's documentation

【讨论】:

  • 这实际上解决了它! :D 非常感谢。我认为如果我在 html 标头中添加一个要求就足够了,但看起来这还不够!无论如何再次感谢...
  • @Amin:以前你可以在顶部使用dojo.require,它会同步加载你需要的任何模块,但这会使页面无响应,所以在较新的版本中它一直替换为这个异步的require,不幸的是,它需要对现有代码进行一些更改。
【解决方案2】:

问题在于没有$(document).ready() 中放置函数,见下文:

工作小提琴:

http://jsfiddle.net/whFNj/1/

$(document).ready(function(){
   my_func();   
});

function my_func(){
$("#black").css("background", "black");
}

相反,可能是您的函数正在代码中的其他地方创建,并且在 dom 准备好时尚未初始化。

【讨论】:

  • 感谢您的回答,我知道像这样的简单功能可以正常工作。我无法在范围之外定义函数,因为正如我所说,我可以在 $().click() 内部调用它,它会正常工作。我的问题就是这样,可能是什么情况下我不能在就绪函数中调用这个函数,而我可以在就绪函数内部的函数中调用它!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2021-11-29
  • 2018-08-10
相关资源
最近更新 更多