AlexB
AlexB

Reputation: 2174

Jquery plugin creates unwanted # in URL

I have a little piece of javascript to support couple of functions such as navigation on my jquery slider. Recently I have noticed that when you click on the navigation button it does what it suppose to do but also creates an extra character in URL "#". I have checked the script and found where and why it is being added, but how to fix it's not added when navigation is clicked, I have no idea. is there any chance that someone can help or at least point me to the right direction. Please see the full code below

var fadeTimer;
var slideSpeed = 8000;
jQuery(document).ready(function() {
// add nav buttons
var slideCount = jQuery('#fader ul li').length;

var randomnumber=Math.floor(Math.random()* slideCount);

for ($i = 0; $i < slideCount; $i++) {
jQuery('#faderNav').prepend('<a href="#"><\/a>');
}

jQuery('#faderNav a').eq(randomnumber).addClass('active');
jQuery('#fader ul li').eq(randomnumber-1).addClass('active');

var next = jQuery('#fader ul .active').next();
if (next.length > 0) {

} else {
var next = jQuery('#fader ul li:first');
}

jQuery('#fader ul .active').fadeOut().removeClass('active');
next.fadeIn().addClass('active');

// work out nav width
var navBtn = jQuery('#faderNav a');
var navBtnWidth = navBtn.outerWidth(true);
var navWidth = navBtn.length * navBtnWidth;
// set nav width
jQuery('#faderNav').width(navWidth);
// add negative margin to center the nav
var negMarg = navWidth / 2;
jQuery('#faderNav').css({'margin-left':'-'+negMarg+'px'});

// start timer

var fadeTimer = setInterval("faderTimer()", slideSpeed);


jQuery('#faderNav a').live('click',function() {
clearInterval(fadeTimer);
var index = jQuery(this).index('#faderNav a');
jQuery('#faderNav a').removeClass('active');
jQuery('#faderNav a').eq(index).addClass('active');
jQuery('#fader ul .active').fadeOut().removeClass('active');
jQuery('#fader ul li').eq(index).fadeIn('slow').addClass('active');
});
});


// FADE FUNCTION
function faderTimer() {
var next = jQuery('#fader ul .active').next();
if (next.length > 0) {

} else {
var next = jQuery('#fader ul li:first');
}

var navIndex = next.index('#fader ul li');
jQuery('#faderNav a').removeClass('active');
jQuery('#faderNav a').eq(navIndex).addClass('active');
jQuery('#fader ul .active').fadeOut().removeClass('active');
next.fadeIn('slow').addClass('active');

}

Upvotes: 0

Views: 114

Answers (3)

Jacob
Jacob

Reputation: 78840

Add a return false; to the end of your click handler. This will prevent the page from navigating to the href attribute's value.

Upvotes: 1

adeneo
adeneo

Reputation: 318212

A click on an anchor with href="#" will add the hashsign to the url.

Use preventDefault or return false:

jQuery(document).on('click', '#faderNav a', function(e) {
    e.preventDefault();
    clearInterval(fadeTimer);
    var index = jQuery(this).index('#faderNav a');
    jQuery('#faderNav a').removeClass('active');
                         .eq(index).addClass('active');
    jQuery('#fader ul .active').fadeOut().removeClass('active');
    jQuery('#fader ul li').eq(index).fadeIn('slow').addClass('active');
});

Upvotes: 1

Esailija
Esailija

Reputation: 140230

$(document).on("click", "a[href=#]", function(e) {
    e.preventDefault();
});

http://jsfiddle.net/RhNDB/show/

Upvotes: 1

Related Questions