jQuery UI和Prototype冲突

时间:2011-02-15 03:11:56

标签: jquery prototypejs conflict

我在Perl的网站上添加了一个新表单(不是我的选择)。有很多html自动生成表单来创建一致的外观。我的问题在于遗产在整个页面中使用原型进行各种操作(包括加载)。但是我想使用jQuery,主要是来自jQuery UI的日期选择器。我可以通过使用jQuery.noConflict();来避免冲突。但是我仍然得到一个错误,因为jQuery日期选择器javascript中有一行代码。

inst.dpDiv.zIndex($(input).zIndex()+1);

看看它是如何仍然包含$符号,原型试图处理但不能。有没有人对我有任何解决方案?我正在使用jQuery 1.5和jQuery UI 1.8.6。

总结:我无法删除prototype.js,我更喜欢使用jQuery UI datepicker和jQuery UI datepicker不处理jQuery.noConflict()。

由于

修改 这只发生在我尝试单击按钮以显示日期选择器时。 来自萤火虫:

$(input).zIndex is not a function
inst.dpDiv.zIndex($(input).zIndex()+1);
datepicker.js (line 651)

编辑编辑 更新到jQuery UI 1.8.9不会改变问题。

编辑编辑 单击按钮以显示日期选择器时会发生此问题。所以在加载时,datepicker设置得很好。更改脚本的顺序不起作用,以下代码的任何变体都不起作用。

(function($) { 
  $(function() {
    // more code using $ as alias to jQuery
  });
})(jQuery);

6 个答案:

答案 0 :(得分:4)

<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    jQuery.noConflict();
    jQuery(function ($) {
        // your code here
        // $ is the jQuery object
    });
</script>

jQuery会将自己传递给内部函数。只需指定$作为参数,函数内的$将引用jQuery对象。 jQuery UI datepicker也是如此。确保按上述顺序包含库,首先是Prototype。

答案 1 :(得分:2)

我不认为有任何优雅的解决方案。我认为你有两种选择 - 它们都涉及搜索/替换,如果你精通perl,这应该不是什么大问题。

  1. 用datepicker库中的jquery()替换$ -function并添加jQuery.noConflict()

  2. 用$$$(或其他名称)替换原型中的$ -function及其所有实例

  3. 如果您正在删除原型,第二个选项可能是您最好的选择。它不那么突兀 - 但它又取决于原型中的代码量。我有兴趣看看是否有人有任何其他想法。

答案 2 :(得分:2)

感谢所有回复。我最终无法弄清楚如何解决冲突。所以我从表单中删除了jQuery UI datepicker。再次感谢。

答案 3 :(得分:2)

有同样的问题。只需在原型后加载jquery库,然后添加nOConflict。使用prototype和jquery的示例:

<script src="prototype.js" type="text/javascript"></script>
        <script src="scriptaculous.js" type="text/javascript"></script>

        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
        <script>

        $.noConflict();
        jQuery(document).ready(function($) {
            $( ".date" ).datepicker({
                        dateFormat: "dd-mm-yy",
                        altFormat: "yy-mm-dd 00:00:00",
                        altField: "#date",
            });
        });

答案 4 :(得分:2)

我有一个问题,我在jQuery库中加载,但动态加载prototype.js;当我来使用jQuery.noConflict()时,它并没有解决我遇到的问题。 $ .noConflict()也不能作为prototype.js不知道如何处理这个,所以我发现工作的修复是:

$ = jQuery;

这有效地将$重新分配给jQuery。

希望它能帮助你解决我在制作这个简单发现时所经历的痛苦。

答案 5 :(得分:0)

我不认为你的问题是由图书馆冲突引起的。我有同样的问题,我只运行jQuery而不是任何其他库。 datepicker需要运行jQuery UI核心JS文件(在datepicker文件头中编写)。确保在datepicker文件之前添加它,一切都应该没问题。

你显然仍然需要jQuery.noConflict()来确保两个库不冲突。