1

当我在jquery库中加载时,我的原型代码不再起作用,即使 jquery 是要加载的第一个库。

页面的 html 看起来有点像这样:

<head>
...
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/effects.js"></script>
<script type="text/javascript" src="/js/prototip.js"></script>
<script type="text/javascript" src="/js/dragdrop.js"></script>
<script type="text/javascript" src="/js/default.js"></script>
<script type="text/javascript" src="/js/limitfocus.js"></script>
...
</head>

<body>

<input type="radio" name="useOtherAddress" id="useOtherAddress_y" value="y" onclick="selectAddress()">
<input type="radio" name="useOtherAddress" id="useOtherAddress_n" value="y" onclick="selectAddress()">

<div id="myAddress" style="display: none;">
...
</div>

<script type="text/javascript">
  // the piece of protptype code no longer working 
  function selectAddress () {
    var t = $('myAddress');
    if ($('useOtherAddress_n').checked) {
      Effect.Appear(t);
      return;
    }
    t.hide();
  }
</script>

有人有什么想法吗?这一页:

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

建议首先加载 jquery 应该使一切方便-花花公子。但它不是:[

4

3 回答 3

4

您需要调用jQuery.noConflict(),如下所示:

jQuery.noConflict(); //or possibly $j = jQuery.noConflict();
function selectAddress () {

然后最后加载 jQuery (但在它的插件之前),以便jQuery.noConflict()将 jQuery 恢复$到以前的值(原型)。

于 2010-10-08T02:11:36.473 回答
2

如果您完全可以提供帮助-您显示的代码没有显示出任何迫切需要同时使用这两个库的必要性-作为一般策略,同时使用 jQuery 和 Prototype 应该是最后的手段或临时解决方法,例如在切换时构架。

即使你让这些框架一起运行,在 DOM 处理中也存在许多微妙的陷阱,这样以后可能会咬你一口,产生无法追踪的错误。

真的,真的最好只使用一个 JS 框架。

于 2010-10-08T02:13:01.690 回答
1

+1 作为一般策略,同时使用 jQuery 和 Prototype 应该是最后的手段或临时解决方法,例如在切换框架时。

我的猜测是您正在使用带有 $ 变量的 jQuery 或使用会导致冲突的函数!

当您想使用 jQuery 时使用 usejQuery而不是$like jQuery(#id).click();。在 jQuery $中只是 . 的别名jQuery,因此所有功能无需使用 $. 如果我们需要在 with 旁边使用 prtotype ,如果你想同时使用 $ ,你可以通过调用返回jQuery控制权, 你可以这样做。就是这样:$prototype$.noConflict()

...

<script type="text/javascript" src="/js/effects.js"></script>
<script type="text/javascript" src="/js/prototip.js"></script>
<script type="text/javascript" src="/js/dragdrop.js"></script>
<script type="text/javascript" src="/js/default.js"></script>
<script type="text/javascript" src="/js/limitfocus.js"></script>

<script type="text/javascript" src="/js/jquery.min.js"></script>
...
</head>

<body>

<input type="radio" name="useOtherAddress" id="useOtherAddress_y" value="y" onclick="selectAddress()">
<input type="radio" name="useOtherAddress" id="useOtherAddress_n" value="y" onclick="selectAddress()">

<div id="myAddress" style="display: none;">
...
</div>

<script type="text/javascript">
  // the piece of protptype code no longer working 
$.noConflict();
  jQuery(document).ready(function($) {
    //jquery with $

  });
//prototype with $
  function selectAddress () {
    var t = $('myAddress');
    if ($('useOtherAddress_n').checked) {
      Effect.Appear(t);
      return;
    }
    t.hide();
  }
</script>
于 2010-10-08T02:58:47.340 回答