函数仅在alert()放入内部时运行

时间:2012-08-12 05:39:36

标签: jquery jquery-ui

为什么当我在jquery块内部发出警报时,它会以其他方式运行,它不会显示任何输出?

  <script type="text/javascript">
(function map() {
var test = document.createElement('script'); 
    test.type = 'text/javascript'; 
    test.async = true;
test.src = 'myjsfile.js';
var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(test, s);
});
  </script>

我正在尝试创建一个插件,脚本调用myjsfile.js并将执行其中的函数,只有在我在上面的代码中添加alert()。

2 个答案:

答案 0 :(得分:2)

我不确定你是想尝试创建一个稍后执行的函数还是一个自执行函数。

如果您正在尝试执行自执行功能,请使用以下语法:

(function () {
    alert("hello");
})();

如果您正在尝试创建一个函数以供以后执行:

function myfunction() {
    alert("hello");
}

myfunction();// This is the "later" execution

希望这有帮助!

答案 1 :(得分:1)

如果您显示的代码是文档中的第一个脚本标记,我可能会发现这可能会导致问题:

var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(test, s);

为什么不将它直接贴在头部或身体上?在我看来,更直接。

(document.getElementsByTagName('head')[0]
 || document.getElementsByTagName('body')[0]).appendChild(test);

此外,您可能无法获得任何输出,因为您实际上并未调用您的函数。试试这个:

<script type="text/javascript">
    (function map() {
        // Your code here
    })(); // Add () to call your function

    // Or, just call it the old fashioned way when you're done.
    map();
</script>

另外需要注意的是,map已经是jQuery中的一个函数,所以要小心你的名字空间以及你如何调用你的函数。