3

我正在尝试在 Software AG webMethods 开发 IDE 中使用 jQuery 的控件。现在我正在从以下 URL 导入 jQuery 的脚本:

http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

当我运行 webMethods IDE 部署的页面时,在多个浏览器中出现以下错误(在两个蓝色箭头之间):

在此处输入图像描述

中间的错误是我得到的正常错误(即旁边带有蓝色箭头的错误),因为页面中的其他内容也在使用'$',当 jQuery 也使用它时,它会导致这个其他'$'用户感到困惑,因为这个其他'$'用户可以控制'$'符号..

为了确认这一点,这就是我所做的:

我编写了以下 javascript 代码(不用担心CAF.model.. 的内部使用。它的.id函数返回 jQuery 处理所需控件的客户端 ID)

alert($(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());

...并导致上图中显示的另一个“getAttribute”错误..

然后我尝试了:

jQuery.noConflict();
alert(jQuery(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());

而且没有错误..!

另外,如果我使用代码:

jQuery.noConflict();
alert($(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());

它导致底部蓝色箭头错误:因为使用'$'符号的其他实体无法弄清楚函数'val'是什么......

以上向我证实了错误是因为 jQuery 的脚本可能在那里使用 '$' 符号供自己使用..

现在尝试解决这个问题,我尝试在调用 jQuery 自己的脚本文件的脚本块之前添加另一个脚本块,并输入以下代码:

jQuery.noConflict();

这导致了第一个蓝色箭头错误:.. 'jQuery' 没有在文档的早期定义,这是有道理的..

所以基本上,我需要以某种方式告诉主 jQuery 脚本文件也不要使用“$”符号。我该怎么做?

4

3 回答 3

2

jQuery.noConflict();需要在加载 jQuery 后立即在脚本块中运行。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
    var jq = jQuery.noConflict();
</script>

上面的别名 jQueryjq代替$.

jQuery 的插件传入 jQuery 对象并在内部将其别名为$,但范围不是全局的,因此无需在插件中更改它。

于 2012-03-09T12:18:59.303 回答
0

你不应该担心 jQuery 的内部结构,它们在任何情况下都可以工作。

最后一条错误消息意味着您试图.val()在 DOM 元素上调用 jQuery 方法 ( ),而不是 jQuery 对象。

你已经知道了

$(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id)

导致错误,那么为什么要调用jQuery.noConflict()更改呢?

jQuery.noConflict()简单地“释放”$并分配回它以前拥有的值。

您要么必须在jQuery整个代码中使用,要么将其分配给不同的变量,例如:

var $j = jQuery.noConflict();
$j(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id);

事件处理程序还接收对 jQuery的ready引用作为第一个参数,因此您(并且应该)将所有 jQuery 代码放在那里:

jQuery(function($) { 
    // $ will refer to jQuery
});

但这不会让您访问该$函数之外引用的任何值。

于 2012-03-09T12:15:27.077 回答
0

一个很好的方法是使用自执行函数,如下所示:

(function ($) {

  // Your jQuery code here - just use $ as normal!
  $("#coolselector").cooljQueryPlugin();

})(jQuery);

将它放在您的代码中,就在结束正文标记之前,以加快页面加载。尽管使用 CAF 和 Prototype,您永远不会注意到加速 :)

于 2014-01-08T14:42:40.863 回答