我正在使用Richfaces 3.3.3的JSF 1.2应用程序中工作。因此,我坚持使用jQuery 1.3.2。为了使其更加复杂,$
变量似乎未被使用,因为它在组件javascript函数或<script>
标记内不起作用。我认为它甚至没有设定。每当调用jQuery时,它都以jQuery(...)
完成。这在大多数时候都很好用,但现在我发现自己需要一个特定组件的更高版本的jQuery,而且我似乎无法在不破坏的情况下导入它。
有问题的页面扩展了许多页面共享的模板。扩展此模板的所有内容都嵌套在<a4j:form>
中。我不能对它做出重大改变。关于我能做的最好的事情是在主模板的<ui:insert>
中添加<head>
。然后我可以在其他页面中使用<ui:define>
将新的jQuery版本放到头部。这几乎可以工作,但它打破了一些Richfaces组件,特别是页面上的一些客户端切换<rich:tab>
元素(它们在点击时什么都不做,没有鼠标悬停样式),并且我在控制台中收到大量的javascript错误。其他javascript / jQuery函数工作得很好。 jQuery.noConflict()
没有帮助。我不确定其他组件是否在幕后使用$
。
这是我正在做的事情的粗略概念:
<ui:define name="jQueryOverride"> //Inserted in the <head> of the main template
<script type="text/javascript">
var $132 = jQuery;
</script>
<script type="text/javascript" src="../jquery-1.8.2.min.js" />
<script type="text/javascript">
var jqry = $;
jQuery = $ = $132;
</script>
</ui:define>
当我添加一些console.log()
语句来检查jQuery版本时,所有内容都会检出。 1.3.2设置为$
和jQuery
,而jqry
设置为1.8.2。日志语句显示在控制台中的错误之前。
我不确定如何解决这个问题,因为看起来这些页面上的JSF实现有点不同寻常,而使用第二版jQuery的常用方法似乎无法正常工作。