使用带有prototype和noConflict的jslider时jQuery冲突

时间:2012-04-27 09:37:23

标签: prototypejs jquery jslider

尝试解决prototype.js和jQuery.js之间的$冲突,因为我需要使用需要jQuery库的jSlider。

我在jquery.js文件的末尾添加了jQuery.noConflict(),然后在jslider.js文件中我将$ ._ roundNumber更改为jQuery._roundNumber。然而,我仍然得到一个错误,说jQuery._roundNumber不是一个函数。请帮忙。

2 个答案:

答案 0 :(得分:0)

以下是集成原型和jquery的示例......可以检查一下您是否做了正确的事。?

<script src="prototype.js"></script>
<script src="effects.js"></script>
<script src="jquery.js"></script>



jQuery.noConflict();
     jQuery(document).ready(function($){
         jQuery("a").click(function(){
            Effect.Shake('shake_demo');
        });
    });





    <div id="shake_demo" style="width:150px; height:40px; background:#ccc; text-align:center;">
        <a href="#"  style="line-height:40px;">Click me to shake!</a>
    </div>

现在,为了对数字进行四舍五入,您可以使用此代码:

var txt=jQuery('#txtBox').val());
var amt = parseFloat(txt);
   alert(amt.toFixed(2);

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Number/toFixed

答案 1 :(得分:0)

固定。刚刚意识到jQuery.noConflict()无法正常工作的原因是因为jQuery已经在我当前页面中包含的模板页面中使用,所以问题有两个:

  1. '$()'这是默认的jQuery选择器与prototype.js冲突,Tapestry默认包含

  2. 当我在jquery.new.js文件的末尾添加了jQuery.noConflict()然后尝试使用'jQuery()'作为选择器它不起作用,因为不同版本的jquery(让我们调用这个jquery.old.js)已经包含在模板页面中(我在当前页面中包含了这个页面)。为了让jquery.old.js与prototype.js一起使用,之前的开发人员已经使用了jQuery.noConflict(),因此'jQuery()'选择器也已被采用。

  3. 修复:我在jquery.new.js文件的末尾添加了$ j2 = jQuery.noConflict()然后我在使用jSlider的新库中使用了'$ j2()'选择器我还修改了jSlider.js文件中的选择器。一切都运作良好。

    我将jquery.new.js和jquery.old.js文件留在项目中(而不是只使用一个)因为使用旧的jquery版本的模板页面遍布整个站点(我不是想要在更改之后测试整个站点)而我正在添加的新组件需要新版本的jquery(jquery.new.js)文件。是的,我知道最好在我的html页面顶部而不是在js库文件的末尾添加无冲突命令 - 在堆栈溢出更新后会更改:)

相关问题