我对JavaScript知之甚少,但尽管如此,我还是想在我的wordpress博客上拼凑一些东西。它不起作用,我不知道如何解决它,嘿,这就是StackOverflow的用途,对吧?

首先,错误信息是:

Error: element.dispatchEvent is not a function
Source File: http://.../wp-includes/js/prototype.js?ver=1.6
Line: 3936

它发生在页面加载上。我的页面加载处理程序如此注册:

Event.observe(window, 'load', show_dates_as_local_time);

如果我禁用其他一些插件,错误消失了,而且这个(加上谷歌搜索)让我得出结论,这是原型和jQuery之间的冲突(其他一些插件使用它)。

其次,我正在遵循wordpress推荐的使用 wp_enqeue_script 从JavaScript添加依赖关系到Prototype库,如下所示:

add_action( 'wp_print_scripts', 'depo_theme_add_javascript' );

function depo_theme_add_javascript() {
    wp_enqueue_script('friendly_dates', 'javascript/friendly_dates.js', array('prototype'));
}

现在我也知道jQuery和Prototype之间存在一些潜在的冲突,这些冲突是使用jQuery noConflicts 方法解决的。我试过从各个地方打电话,但没有好处。我不认为这是问题,因为a) noConflict 函数仅与 $ 变量有关,它似乎不是这里的问题,和b)我会期待 wordpress为我排序,因为它可以......

最后,使用Venkman调试器我确定错误消息中引用的元素确实是 HTMLDocument ,但也缺少 dispatchEvent 。鉴于它是一种标准的DOM方法,不确定如何发生这种情况?

有帮助吗?

解决方案 4

感谢所有建议。最后我认为Kent的解释是最接近的,基本上相当于“Prototype is broken”。 (对不起,如果我错误地总结了你:)

至于 jQuery.noConflict 选项 - 我在问题中已经提到了这一点。当运行此方法时,会有所不同,而我对此几乎没有控制权。正如我所说,我尝试在几个不同的地方(特别是页面标题和我的脚本文件)运行它,没有任何效果。因此,就像我们都喜欢它一样,“只需使用 noConflict ”是这个问题的答案,至少在没有其他信息的情况下。

此外, jQuery.noConflict 似乎是关于 $ 变量,并且错误点周围的代码不处理该变量一点都不当然,它们可能是间接相关的,我没有追踪它。

所以基本上我最后用jQuery而不是Prototype重写了脚本,它实际上有自己的问题。无论如何,我已经在我的博客上发布了整个战争故事,如果你有兴趣。

其他提示

许多图书馆都有一个令人讨厌的伎俩,我非常喜欢它,看起来原型就是其中之一。

Mootools这样做,如果我是对的,它涉及在基本类上重载许多原型,猴子修补它们。

同样,当mootools和jQuery出现时,我同样遇到了奇怪的行为,通常是jQuery死亡,因为它调用了一些对象方法,这种对象方法已被Mootools以某种方式重载/猴子修补。

另外,神奇的是,从脚本使用列表中取出mootools导致所有运行得更快,我得出结论是由于较少的对象污染。

现在我可能错了,但我从我的经验中得出结论,这些库只是不喜欢彼此共存,并且看到mootools代码在我看来如何降低正常事情的速度,我sucked并将所有基于mootools的代码移植到jQuery(我向你保证这是一个耗时的交易),结果是代码 fast 没有奇怪的错误那是无法解释的。

我建议您将迁移视为至少一个您的选项。

写作时还有一件事:

我倾向于将这种语法与我所有的jQuery驱动代码一起使用,以便在有人以某种方式打破'$'的情况下进行一些安全的封装。

运行时代码 这在执行之前等待document.ready:

 jQuery(function($){ 
      code_with_

许多图书馆都有一个令人讨厌的伎俩,我非常喜欢它,看起来原型就是其中之一。

Mootools这样做,如果我是对的,它涉及在基本类上重载许多原型,猴子修补它们。

同样,当mootools和jQuery出现时,我同样遇到了奇怪的行为,通常是jQuery死亡,因为它调用了一些对象方法,这种对象方法已被Mootools以某种方式重载/猴子修补。

另外,神奇的是,从脚本使用列表中取出mootools导致所有运行得更快,我得出结论是由于较少的对象污染。

现在我可能错了,但我从我的经验中得出结论,这些库只是不喜欢彼此共存,并且看到mootools代码在我看来如何降低正常事情的速度,我sucked并将所有基于mootools的代码移植到jQuery(我向你保证这是一个耗时的交易),结果是代码 fast 没有奇怪的错误那是无法解释的。

我建议您将迁移视为至少一个您的选项。

写作时还有一件事:

我倾向于将这种语法与我所有的jQuery驱动代码一起使用,以便在有人以某种方式打破'$'的情况下进行一些安全的封装。

运行时代码 这在执行之前等待document.ready:

(function($){ 
    code_with_

许多图书馆都有一个令人讨厌的伎俩,我非常喜欢它,看起来原型就是其中之一。

Mootools这样做,如果我是对的,它涉及在基本类上重载许多原型,猴子修补它们。

同样,当mootools和jQuery出现时,我同样遇到了奇怪的行为,通常是jQuery死亡,因为它调用了一些对象方法,这种对象方法已被Mootools以某种方式重载/猴子修补。

另外,神奇的是,从脚本使用列表中取出mootools导致所有运行得更快,我得出结论是由于较少的对象污染。

现在我可能错了,但我从我的经验中得出结论,这些库只是不喜欢彼此共存,并且看到mootools代码在我看来如何降低正常事情的速度,我sucked并将所有基于mootools的代码移植到jQuery(我向你保证这是一个耗时的交易),结果是代码 fast 没有奇怪的错误那是无法解释的。

我建议您将迁移视为至少一个您的选项。

写作时还有一件事:

我倾向于将这种语法与我所有的jQuery驱动代码一起使用,以便在有人以某种方式打破'$'的情况下进行一些安全的封装。

运行时代码 这在执行之前等待document.ready:

 jQuery(function($){ 
      code_with_

许多图书馆都有一个令人讨厌的伎俩,我非常喜欢它,看起来原型就是其中之一。

Mootools这样做,如果我是对的,它涉及在基本类上重载许多原型,猴子修补它们。

同样,当mootools和jQuery出现时,我同样遇到了奇怪的行为,通常是jQuery死亡,因为它调用了一些对象方法,这种对象方法已被Mootools以某种方式重载/猴子修补。

另外,神奇的是,从脚本使用列表中取出mootools导致所有运行得更快,我得出结论是由于较少的对象污染。

现在我可能错了,但我从我的经验中得出结论,这些库只是不喜欢彼此共存,并且看到mootools代码在我看来如何降低正常事情的速度,我sucked并将所有基于mootools的代码移植到jQuery(我向你保证这是一个耗时的交易),结果是代码 fast 没有奇怪的错误那是无法解释的。

我建议您将迁移视为至少一个您的选项。

写作时还有一件事:

我倾向于将这种语法与我所有的jQuery驱动代码一起使用,以便在有人以某种方式打破'$'的情况下进行一些安全的封装。

运行时代码 这在执行之前等待document.ready:

<*>

jQuery插件

<*>

使用这些将使人们更容易使用您正在编写的任何jQuery,以便能够在没有太多冲突问题的情况下使用它。

这基本上会让他们确保他们的代码没有做任何真正神奇的事情。

here; });

jQuery插件

<*>

使用这些将使人们更容易使用您正在编写的任何jQuery,以便能够在没有太多冲突问题的情况下使用它。

这基本上会让他们确保他们的代码没有做任何真正神奇的事情。

here; })(jQuery);

jQuery插件

<*>

使用这些将使人们更容易使用您正在编写的任何jQuery,以便能够在没有太多冲突问题的情况下使用它。

这基本上会让他们确保他们的代码没有做任何真正神奇的事情。

here; });

jQuery插件

<*>

使用这些将使人们更容易使用您正在编写的任何jQuery,以便能够在没有太多冲突问题的情况下使用它。

这基本上会让他们确保他们的代码没有做任何真正神奇的事情。

值得在JQuery网站上阅读有关将JQuery与其他库一起使用的文章。它不仅仅涉及noConflict选项。

我认为你应该搜索好,因为所有jQuery插件都有一个原型版本,所有原型插件都有一个jQuery版本。 如果你真的找不到你的样子并且你不能只使用一个库,那么看看这里

jQuery.noConflict();

但是,我认为为每个库加载超过15-20kb是没有意义的:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top