views:

698

answers:

3

I implemented the Coda Slider tutorial successfully that is located here: http://jqueryfordesigners.com/coda-slider-effect/

The slider works great but I am getting a javascript error that I am not sure how to fix. The error says:

'0.offsetWidth' is null or not an object
coda-slider.js, line 19 character 3

Not sure how to fix it. Anyone have any ideas? Here is my js and css (don't think I need to upload the HTML but let me know if that helps).

JS (coda-slider.js)

// when the DOM is ready...
$(document).ready(function () {

var $panels = $('#slider .scrollContainer > div');
var $container = $('#slider .scrollContainer');

// if false, we'll float all the panels left and fix the width 
// of the container
var horizontal = true;

// float the panels left if we're going horizontal
if (horizontal) {
  $panels.css({
    'float' : 'left',
    'position' : 'relative' // IE fix to ensure overflow is hidden
  });

  // calculate a new width for the container (so it holds all panels)
  $container.css('width', $panels[0].offsetWidth * $panels.length); <------line 19
}

// collect the scroll object, at the same time apply the hidden overflow
// to remove the default scrollbars that will appear
var $scroll = $('#slider .scroll').css('overflow', 'hidden');

// apply our left + right buttons
$scroll
  .before('<img class="scrollButtons left" src="/images/layout/navigation/scroll_left.png" />')
  .after('<img class="scrollButtons right" src="/images/layout/navigation/scroll_right.png" />');

// handle nav selection
function selectNav() {
  $(this)
    .parents('ul:first')
      .find('a')
        .removeClass('selected')
      .end()
    .end()
    .addClass('selected');
}

$('#slider .navigation').find('a').click(selectNav);

// go find the navigation link that has this target and select the nav
function trigger(data) {
  var el = $('#slider .navigation').find('a[href$="' + data.id + '"]').get(0);
  selectNav.call(el);
}

if (window.location.hash) {
  trigger({ id : window.location.hash.substr(1) });
} else {
  $('ul.navigation a:first').click();
}

// offset is used to move to *exactly* the right place, since I'm using
// padding on my example, I need to subtract the amount of padding to
// the offset.  Try removing this to get a good idea of the effect
var offset = parseInt((horizontal ? 
  $container.css('paddingTop') : 
  $container.css('paddingLeft')) 
  || 0) * -1;


var scrollOptions = {
  target: $scroll, // the element that has the overflow

  // can be a selector which will be relative to the target
  items: $panels,

  navigation: '.navigation a',

  // selectors are NOT relative to document, i.e. make sure they're unique
  prev: 'img.left', 
  next: 'img.right',

  // allow the scroll effect to run both directions
  axis: 'xy',

  onAfter: trigger, // our final callback

  offset: offset,

  // duration of the sliding effect
  duration: 500,

  // easing - can be used with the easing plugin: 
  // http://gsgd.co.uk/sandbox/jquery/easing/
  easing: 'swing'
};

// apply serialScroll to the slider - we chose this plugin because it 
// supports// the indexed next and previous scroll along with hooking 
// in to our navigation.
$('#slider').serialScroll(scrollOptions);

// now apply localScroll to hook any other arbitrary links to trigger 
// the effect
$.localScroll(scrollOptions);

// finally, if the URL has a hash, move the slider in to position, 
// setting the duration to 1 because I don't want it to scroll in the
// very first page load.  We don't always need this, but it ensures
// the positioning is absolutely spot on when the pages loads.
scrollOptions.duration = 1;
$.localScroll.hash(scrollOptions);

});

CSS

#slider {
  margin-left: 35px;
  position: relative;
  width: 875px;

}

.scroll {
  position: relative;
  width: 875px;
  height: 268px;
  overflow: auto; /* fix for IE to respect overflow */
  background: #FFFFFF scroll 0;
}

.scrollContainer div.panel {
  position: relative;
  height: 210px;
  width: 875px; /* change to 560px if not using JS to remove rh.scroll */
}

.scrollButtons {
  position: absolute;
  top: 115px;
  cursor: pointer;
}

.scrollButtons.left {
  left: -20px;
}

.scrollButtons.right {
  right: -20px;
}
A: 

Figured it out. Stupid error on my part. I was including the coda-slider.js in the head that was delivered with every page and therefore every page that did not have the slider was displaying the error. Just took it out to include only on the page where the slider was displayed and fixed.

bgadoci
A: 

Hello, I'm having the same problem with the NewsMagazine theme by Themelabs.

All their commenting is turned off so i can ask them for a solution. Typical.

Anyway, i was wondering how you solved this problem?

In the header i see the following js for coder slider

<script type="text/javascript" src="http://domain.com/nail-fungus/wp-content/themes/nail-fungus-theme/scripts/jquery.js"&gt;&lt;/script&gt;
<script type="text/javascript" src="http://domain.com/nail-fungus/wp-content/themes/nail-fungus-theme/scripts/custom.js"&gt;&lt;/script&gt;
<script type="text/javascript" src="http://domain.com/nail-fungus/wp-content/themes/nail-fungus-theme/scripts/jquery-1.3.2.min.js"&gt;
</script>

<script type="text/javascript" src="http://domain.com/nail-fungus/wp-content/themes/nail-fungus-theme/scripts/jquery.easing.1.3.js"&gt;
</script>
<script type="text/javascript" src="http://domain.com/nail-fungus/wp-content/themes/nail-fungus-theme/scripts/coda-slider-condensed.js"&gt;
</script>

When the index.php page loads under IE7 it gives me the same error your reporting.

If i remove the JS no error is noted. This means that i have to load the above code on the index page only but not the others.

How were you able to solve this issue? header.php for wordpress loads on every page. If i place the above code in a function and call it only from index.php template the coder slider doesnt do anything but there is no error.

I need to load the above code only in the header and only on index.php.

This is for a wordpress blog.

Thanks

June
A: 

I am calling coda-slider.js in the header of all my pages, but I get the following JS error in FF3:

$panels[0] is undefined

This error is referring to line #20 in the coda-slider.js file which is:

$container.css('width', $panels[0].offsetWidth * $panels.length);

This error ONLY occurs on pages that do not have the coda slider. I know a quick fix is not to include the coda-slider.js file on pages that don't use it, but what if I don't have that option? The CMS I use is not flexible, so the coda-slider.js is called on every web page.

Anyone have a workaround for this that doesn't involve removing coda-slider.js from the header?

Thanks.

John