代码之家  ›  专栏  ›  技术社区  ›  Alastair

原型和jQuery和平共存?

  •  11
  • Alastair  · 技术社区  · 17 年前

    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);
    

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

    其次,我遵循wordpress推荐的使用方法 wp_enqeue_script 要将依赖项从我的JavaScript添加到原型库,请执行以下操作:

    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 认为 这是一个问题,因为 noConflict $ 变量,这似乎不是这里的问题,b)我会的 预料

    最后,使用Venkman调试器,我确定 element 错误消息中引用的确实是 HTMLDocument 但也确实缺少一个 dispatchEvent . 考虑到这是一个标准的DOM方法,不确定这是如何发生的?

    4 回复  |  直到 14 年前
        1
  •  11
  •   Kent Fredric    17 年前

    我非常喜欢许多库使用的一个讨厌的技巧,而prototype就是其中之一。

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

    每件事

    快速的 没有无法解释的奇怪错误。

    我建议你至少考虑迁移问题。 你的选择。

    我倾向于在所有jQuery驱动的代码中使用这种语法,以便在有人以某种方式破坏“$”时进行一些安全的封装。

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

     jQuery(function($){ 
          code_with_$_here; 
     }); 
    

    jQuery插件

    (function($){ 
        code_with_$_here; 
    })(jQuery); 
    

    使用 您碰巧编写的任何jQuery都能够使用它,而不会产生太多冲突问题。

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

        2
  •  6
  •   Soviut    17 年前

    Using JQuery With Other Libraries . 它处理的不仅仅是无冲突选项。

        3
  •  5
  •   Ionuț Staicu    17 年前

    我认为你应该好好搜索,因为所有jQuery插件都有一个原型版本,所有原型插件都有一个jQuery版本。 here

    jQuery.noConflict();
    

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

        4
  •  0
  •   Alastair    17 年前

    jQuery.noConflict 选项-我在问题中已经提到了这一点。这很重要 什么时候 noConflict ”“是吗

    此外 jQuery.noConflict 似乎 $

    war story on my blog ,如果你感兴趣的话。