3

我是 JavaScript 和 jQuery 的新手。在尝试使用我下载的几个 jQuery 插件失败后,我检查了 $.fn,发现在调用文档就绪处理程序时,添加到其中的任何内容都丢失了。它在诸如 onclick 之类的事件处理程序中也会失败。

<script type="text/javascript" src="~/Scripts/jquery-1.7.1.min.js"></script>
<script>
    jQuery.fn.myPlugin = function () { alert("success"); };

    //works fine - alerts with "success"
    $(document).myPlugin();

    $(function () {
        //Uncaught TypeError: Object [object Object] has no method 'myPlugin'
        $(document).myPlugin();
    });
</script>

如果我在文档就绪处理程序中移动插件的定义,那么之后一切正常(包括事件处理程序)。这就是它应该做的吗?我在网上找到的一切都清楚地表明并非如此。我正在使用 Chrome 及其内置的开发人员工具。谢谢。

4

1 回答 1

0

是的,你是对的。文档就绪回调在那里,以便您知道您的所有 DOM 元素和 jQuery 何时可以使用。实际代码不必在回调中,但您应该只在所有元素都准备好使用后才初始化插件。

例如,on('click')处理程序必须在文档就绪回调中,但它执行的函数不必是 -

$("#button").on('click',function(){
  btnClickHandler(); // this can be defined outside the ready callback.
});

所以你看,代码本身不需要用 ready 回调封装,但是执行插件的代码应该在那里,因为只有这样你才知道你的文档已经准备好被操作......

将代码放在文档就绪回调中总是一个好主意。您还可以在不同的文件中有多个文档就绪回调——一旦您的 DOM 准备好,每个回调都会被调用。如果有多个准备好的回调,您将它们写入页面的顺序将决定首先执行的内容。始终首先引用 jQuery,以便执行您的就绪回调。

于 2012-09-02T06:52:59.397 回答