2011-02-15 96 views
2

我正在Perl中添加一个新的表单到我们的网站(不是我的选择)。自动生成很多HTML以便创建一致的外观。我的问题出现在遗产整个页面(包括负载)的各种事物使用原型的地方。不过,我想使用jQuery,主要是jQuery UI中的日期选择器。我可以通过使用jQuery.noConflict();来避免冲突。但我仍然得到一个错误,因为在jQuery日期选择器JavaScript中的一行代码。jQuery UI和原型冲突

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不改变的问题。

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

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

jQuery UI将一切将`jQuery`重新映射到`$`的函数内部,所以使用`$`是安全的。你确定这个错误不是来自别的地方吗?我只是用datepicker下载了一个自定义UI版本来检查(版本1.8.9)。 – 2011-02-15 03:17:51

+0

哪个先走?你的原型声明或你的jQuery?你可以做的是首先做所有的jQuery的东西(没有冲突),然后把美元语法归还原型。 – corroded 2011-02-15 03:18:45

回答

2

感谢所有的回复。我不能最终找出如何解决冲突。所以我从表单中删除了jQuery UI datepicker。再次感谢。

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首先。

2

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

  1. 取代(的$ - 函数使用jQuery)在日期选择器库,并添加jQuery.noConflict()

  2. 更换$ - 函数的原型$$$(或其他名称)和所有它的实例

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

0

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

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

2

有同样的问题。只需加载原型后的jQuery库,然后添加nOConflict。使用原型和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", 
      }); 
     }); 
2

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

$ = jQuery; 

这有效地重新分配$回到jQuery的。

希望它能为您节省一些我在做这个简单发现时所经历的痛苦。