【问题标题】:Javascript not working when adding another script添加另一个脚本时Javascript不起作用
【发布时间】:2011-10-06 17:11:51
【问题描述】:

好的,请原谅我的无知。我是 javascript 的新手,所以所有的帮助都很受欢迎。我一直在尝试实施这些解决方案,但它不起作用。这是我修改后的代码:

    <script type="text/javascript">
    jQuery.noConflict() // return `$` to it's previous "owner"
    (function($){ // in here you're assured that `$ == jQuery`
    $(document).ready(function(){  
    $('#slider1').tinycarousel()
    $('a.fancybox').fancybox()
    $('textarea, select').uniform()
    $('#slider').nivoSlider ({ pauseTime: 6000, effect: 'sliceDown'})
    })
    })(jQuery)
    </script>

当我这样做时,以上所有操作都会停止工作。

另外,我还有其他说法

    function $(id) {
    return document.getElementById(id);
}

我不确定我是否理解如何处理它,因为如果我把它从它的元素上取下来,它就会停止工作(它是一个双滑块)

再次感谢


我是 javascript 新手,所以我很抱歉 :0)

我在一个网站上使用这个 javascript:

    <script type="text/javascript">        
    $(document).ready(function(){  
        $('#slider1').tinycarousel();
        $('a.fancybox').fancybox();
        $('textarea, select').uniform();
        $('#slider').nivoSlider ({ pauseTime: 6000, effect: 'sliceDown'});
    });
    </script>

还有另一个脚本在开头包含此内容,这使其他所有内容都停止工作。一旦我删除它,一切都会再次运行。有没有办法把这些结合起来?还是他们需要分开?

    function $(id) {
        return document.getElementById(id);
    }

提前谢谢...

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用noConflict 释放$ 并使用jQuery() 代替$() 进行jQuery 操作:

    <script type="text/javascript" src="other_lib.js"></script>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
        $.noConflict();
        // Now $('x') uses the custom $ function.
    </script>
    

    【讨论】:

      【解决方案2】:

      问题是你已经声明了一个名为 $ 的函数,它现在覆盖了由 jquery 创建的 jquery 引用。

      因此,当您执行 $('#slider1').tinycarousel(); 时,您现在期望在您的函数返回的对象上定义一个方法 tinycarousel

      如果您仍想继续使用 jquery 和您的功能,您将不得不使用

      jQuery("something").tinycarousel()
      

      【讨论】:

      • 还添加 $.noConflict();正如 mu 所建议的那样,您可以明确删除查询创建的 $ 引用。
      【解决方案3】:

      最好不要直接使用$ 函数来“保护”您的代码免受此类问题的影响,而是创建一个您明确定义$ = jQuery 的新范围:

      jQuery.noConflict() // return `$` to it's previous "owner"
      (function($){ // in here you're assured that `$ == jQuery`
          $(document).ready(function(){  
              $('#slider1').tinycarousel()
              $('a.fancybox').fancybox()
              $('textarea, select').uniform()
              $('#slider').nivoSlider ({ pauseTime: 6000, effect: 'sliceDown'})
          })
      })(jQuery)
      

      或者,jQuery 将自身传递给 DOMReady 短格式:

      jQuery.noConflict()
      
      jQuery(function($){
              $('#slider1').tinycarousel()
              $('a.fancybox').fancybox()
              $('textarea, select').uniform()
              $('#slider').nivoSlider ({ pauseTime: 6000, effect: 'sliceDown'})
      })
      

      将此作为标准做法,您将在未来避免此问题。

      【讨论】:

      • 再次感谢大家的所有回答他们真的很感激。
      【解决方案4】:

      您可能应该删除第二个脚本,因为 jQuery 本身包含 ID 选择器,它将使用 id 作为要求从 dom 中选择元素。

      删除这个

      function $(id) {
      return document.getElementById(id);
      }
      

      从现在开始执行此操作以使用 ID 进行选择

      $(document).ready(function(){
      
      
      $("#myCarousel").fadeIn();
      
      });
      

      【讨论】:

      • 这可能会使整个第二个脚本变得毫无用处,而且就我们所知,它可能和 jQuery 一样长而复杂。然而,jQuery 有美元安全的选项(不记得它是如何完成的,但它很简单)。
      • LOL ... 为什么他的脚本会覆盖 JQuery?无论如何,这应该可以解决问题。如果您在网页标题中包含 jquery(即 )。
      • @Alxandr 没有必要重新发明 ID 选择器你同意吗? jQuery 也将提供可链接性。 #script2 不会
      • 您没有解决问题,您提出的建议可能在评论中。
      • 来自 script#2 的函数 $(id) 返回一个 DOM 元素。 jQuery 的$(...) 函数返回一个jQuery 集合对象。这些不是一回事,所以不能用 jQuery 的 $ 函数替换 script#2 的 $ 函数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多