我正在 Perl 中向我们的网站添加一个新表单(不是我的选择)。表单会自动生成大量 html,以创建一致的外观。我的问题在于遗留系统在整个页面(包括加载时)中使用原型(prototype)来处理各种事情。不过我想使用 jQuery,主要是 jQuery UI 中的日期选择器。我可以通过使用 jQuery.noConflict(); 来避免冲突。但由于 jQuery 日期选择器 javascript 中的一行代码,我仍然收到错误。
inst.dpDiv.zIndex($(input).zIndex()+1);
看看它如何仍然包含 $ 符号,该原型(prototype)尝试处理但不能。有人能为我提供解决方案吗?我正在使用 jQuery 1.5 和 jQuery UI 1.8.6。
总之:我无法删除prototype.js,我更喜欢使用 jQuery UI datepicker,而 jQuery UI datepicker 不处理 jQuery.noConflict()。
谢谢
编辑 仅当我尝试单击按钮以显示日期选择器时才会发生这种情况。 来自 Firebug :
$(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);
最佳答案
<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 日期选择器也执行相同的操作。确保按上述顺序包含库,首先是原型(prototype)。
关于jQuery UI 和原型(prototype)冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4999559/