2011-08-19 66 views
0

我正在使用一个WordPress模板,它在主页上有一个jQuery轮播,并且在类别页面上有一些其他的jQuery好东西(切换和滑动条),它们都是单独工作的。我想复制所有类别页面上的滑块,但是当我添加它时,它会在两个方面中断jQuery。有人可以给我一个关于如何让他们与对方打好关系的建议吗?下面是2的代码片段:一页上有多个jQuery脚本?

<script type="text/javascript"> 
// <![CDATA[ 
    /* featured listings slider */ 
    jQuery(document).ready(function($) { 
     $('.slider').jCarouselLite({ 
     btnNext: '.next', 
     btnPrev: '.prev', 
     visible: 5, 
     hoverPause: true, 
     auto: 2800, 
     speed: 1100, 
     easing: 'easeOutQuint' // for different types of easing, see easing.js 
     }); 
    }); 
// ]]> 
</script> 

<script type="text/javascript"> 
// <![CDATA[ 
// toggles the refine search field values 
jQuery(document).ready(function($) { 
    $('div.handle').click(function() { 
     $(this).next('div.element').animate({ 
      height: ['toggle', 'swing'], 
      opacity: 'toggle' }, 200 
     ); 

     $(this).toggleClass('close', 'open'); 
     return false; 
    }); 
    <?php foreach ($_POST as $field => $val) : ?> 
    $('.<?php echo $field; ?> div.handle').toggleClass('close', 'open'); 
    $('.<?php echo $field; ?> div.element').show(); 
    <?php endforeach; ?> 

}); 
// ]]> 
</script> 

...和

<script type="text/javascript"> 
// <![CDATA[ 
    jQuery(document).ready(function($) { 
     $('#dist-slider').slider({ 
      range: 'min', 
      min: 0, 
      max: 3000, 
      value: <?php echo esc_js(isset($_POST['distance']) ? intval($_POST['distance']) : '50'); ?>, 
      step: 5, 
      slide: function(event, ui) { 
       $('#distance').val(ui.value + ' <?php echo $distance_unit; ?>'); 
      } 
     }); 
     $('#distance').val($('#dist-slider').slider('value') + ' <?php echo $distance_unit; ?>'); 
    }); 
// ]]> 
</script> 

...,最后一个

<script type="text/javascript"> 
// <![CDATA[ 
    jQuery(document).ready(function($) { 
     $('#slider-range').slider({ 
      range: true, 
      min: <?php echo esc_js(intval($cp_min_price)); ?>, 
      max: <?php echo esc_js(intval($cp_max_price)); ?>, 
      step: 1, 
      values: [ <?php echo esc_js("{$amount[0]}, {$amount[1]}"); ?> ], 
      slide: function(event, ui) { 
      <?php switch ($cp_curr_symbol_pos) { 
       case 'left' : 
        ?>$('#amount').val('<?php echo $curr_symbol; ?>' + ui.values[0] + ' - <?php echo $curr_symbol; ?>' + ui.values[1]);<?php   
        break; 
       case 'left_space' : 
       ?>$('#amount').val('<?php echo $curr_symbol; ?> ' + ui.values[0] + ' - <?php echo $curr_symbol; ?> ' + ui.values[1]);<?php 
        break; 
       case 'right' : 
       ?>$('#amount').val(ui.values[0] + '<?php echo $curr_symbol; ?> - ' + ui.values[1] + '<?php echo $curr_symbol; ?>');<?php 
        break; 
       case 'right_space' : 
       ?>$('#amount').val(ui.values[0] + ' <?php echo $curr_symbol; ?> - ' + ui.values[1] + ' <?php echo $curr_symbol; ?>');<?php 
        break; 
      } ?> 
      } 
     }); 
     <?php switch ($cp_curr_symbol_pos) { 
      case 'left' : 
       ?>$('#amount').val('<?php echo $curr_symbol; ?>' + $('#slider-range').slider('values', 0) + ' - <?php echo $curr_symbol; ?>' + $('#slider-range').slider('values', 1));<?php  
       break; 
      case 'left_space' : 
      ?>$('#amount').val('<?php echo $curr_symbol; ?> ' + $('#slider-range').slider('values', 0) + ' - <?php echo $curr_symbol; ?> ' + $('#slider-range').slider('values', 1));<?php 
       break; 
      case 'right' : 
      ?>$('#amount').val($('#slider-range').slider('values', 0) + '<?php echo $curr_symbol; ?> - ' + $('#slider-range').slider('values', 1) + '<?php echo $curr_symbol; ?>');<?php 
       break; 
      case 'right_space' : 
      ?>$('#amount').val($('#slider-range').slider('values', 0) + ' <?php echo $curr_symbol; ?> - ' + $('#slider-range').slider('values', 1) + ' <?php echo $curr_symbol; ?>');<?php 
       break; 
      } ?> 

    }); 
// ]]> 
</script> 

过去三年所有一起工作很好,但当我在同一页面上添加第一个时,他们全部打破。我尝试将jQuery(document).ready(function($) {更改为$(document).ready(function() {,将第二行$更改为jQuery,但这并未解决任何问题。我也尝试将'.slider'更改为'.somethingslider',因为我在下面看到.slider的另一个实例,但是这不起作用。任何帮助深表感谢!

+1

如果你有任何具体的错误,它会很方便知道它们是什么 - 例如,如果你打开错误控制台/ Firebug/Dragonfly/Developer Tools等,并寻找JavaScript错误。 – Fenton

+2

你确定你已经在你的页面中包含了“jCarouselLite”插件js吗? – ShankarSangoli

+0

由于脚本的顺序,它可能会被搞乱。 – Mrchief

回答

2

删除$来自function的所有ready方法。但是它不会有任何区别,因为$指向主要jQuery对象本身。

改变这一切准备好处理

jQuery(document).ready(function($) { 

通过

jQuery(document).ready(function() { 

并确保您已包括jCarouselLite插件JS到您的网页,那么它应该工作的罚款。

1

首先,您可以将所有四个jQuery(document).ready(function($) {的内容放在一起..不会有所作为。我不得不想象在第一个脚本中存在问题。这些对应的DOM元素是什么?你可以发布更多?

0

的主题是使用enqueue_script函数调用jCarouselLite,但它有一个if语句包裹它,导致它只能在主页显示:

if (get_option($app_abbr.'_enable_featured') == 'yes' && is_home()) { 

我只是去掉了&&is_home()并带回最底层的3个脚本的功能。然而,旋转木马仍然无法正常工作,所以根据@ mblase75的建议,我将课程改为ID并且瞧,它工作正常!这是我修改后的第一个代码:

<script type="text/javascript"> 
// <![CDATA[ 
    /* featured listings slider */ 
    jQuery(document).ready(function($) { 
     $('#myfirstslider').jCarouselLite({ 
      btnNext: '.next', 
      btnPrev: '.prev', 
      visible: 5, 
      hoverPause: true, 
      auto: 2800, 
      speed: 1100, 
      easing: 'easeOutQuint' // for different types of easing, see easing.js 
     }); 
    }); 
// ]]> 
</script> 

我唯一需要做的其他更改是我的样式表反映了上面的新ID和类更改。其他3个脚本被留下。感谢大家的帮助!我是每个人,但想在这里给出一个简洁的答案。