JavaScript Issue with Tabs and JS Smooth Scroll (Two Clicks) issue tabs jira,session issue with multi tabs in a

I searched on stackoverflow a bit and couldn't find an exact answer to this problem.

I have some tabs on my webpage. I want when a user clicks a tab to place an active tag on the tab the user picked and then scroll to the first anchor (anchors placed before the first paragraph usually).

So far, it is working with the code below, with the exception that the user must click the tab twice to make it the active tab and then to scroll. Is there a way so that on ONE click, the tab selected is marked as active and it scrolls to the anchor on the tab? I am a bit new to JS so I apologize if this is an easy answer. I appreciate all help and if you want an example of the tabs and having to click twice, please visit my website.

JS Tabs

$(document).ready(function () {
$("ul#tabs li").click(function (e) {
    if (!$(this).hasClass("active")) {
        var tabNum = $(this).index();
        var nthChild = tabNum + 1;
        $("ul#tabs li.active").removeClass("active");
        $(this).addClass("active");
        $("ul#tab li.active").removeClass("active");
        $("ul#tab li:nth-child(" + nthChild + ")").addClass("active");
    }
});
});

JS Smooth Scroll

;
(function ($) {
var h = $.scrollTo = function (a, b, c) {
    $(window).scrollTo(a, b, c)
};
h.defaults = {
    axis: 'xy',
    duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
    limit: true
};
h.window = function (a) {
    return $(window)._scrollable()
};
$.fn._scrollable = function () {
    return this.map(function () {
        var a = this,
            isWin = !a.nodeName || $.inArray(a.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) != -1;
        if (!isWin) return a;
        var b = (a.contentWindow || a).document || a.ownerDocument || a;
        return /webkit/i.test(navigator.userAgent) || b.compatMode == 'BackCompat' ? b.body : b.documentElement
    })
};
$.fn.scrollTo = function (e, f, g) {
    if (typeof f == 'object') {
        g = f;
        f = 0
    }
    if (typeof g == 'function') g = {
        onAfter: g
    };
    if (e == 'max') e = 9e9;
    g = $.extend({}, h.defaults, g);
    f = f || g.duration;
    g.queue = g.queue && g.axis.length > 1;
    if (g.queue) f /= 2;
    g.offset = both(g.offset);
    g.over = both(g.over);
    return this._scrollable().each(function () {
        if (e == null) return;
        var d = this,
            $elem = $(d),
            targ = e,
            toff, attr = {}, win = $elem.is('html,body');
        switch (typeof targ) {
            case 'number':
            case 'string':
                if (/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
                    targ = both(targ);
                    break
                }
                targ = $(targ, this);
                if (!targ.length) return;
            case 'object':
                if (targ.is || targ.style) toff = (targ = $(targ)).offset()
        }
        $.each(g.axis.split(''), function (i, a) {
            var b = a == 'x' ? 'Left' : 'Top',
                pos = b.toLowerCase(),
                key = 'scroll' + b,
                old = d[key],
                max = h.max(d, a);
            if (toff) {
                attr[key] = toff[pos] + (win ? 0 : old - $elem.offset()[pos]);
                if (g.margin) {
                    attr[key] -= parseInt(targ.css('margin' + b)) || 0;
                    attr[key] -= parseInt(targ.css('border' + b + 'Width')) || 0
                }
                attr[key] += g.offset[pos] || 0;
                if (g.over[pos]) attr[key] += targ[a == 'x' ? 'width' : 'height']() * g.over[pos]
            } else {
                var c = targ[pos];
                attr[key] = c.slice && c.slice(-1) == '%' ? parseFloat(c) / 100 * max : c
            }
            if (g.limit && /^\d+$/.test(attr[key])) attr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);
            if (!i && g.queue) {
                if (old != attr[key]) animate(g.onAfterFirst);
                delete attr[key]
            }
        });
        animate(g.onAfter);

        function animate(a) {
            $elem.animate(attr, f, g.easing, a && function () {
                a.call(this, e, g)
            })
        }
    }).end()
};
h.max = function (a, b) {
    var c = b == 'x' ? 'Width' : 'Height',
        scroll = 'scroll' + c;
    if (!$(a).is('html,body')) return a[scroll] - $(a)[c.toLowerCase()]();
    var d = 'client' + c,
        html = a.ownerDocument.documentElement,
        body = a.ownerDocument.body;
    return Math.max(html[scroll], body[scroll]) - Math.min(html[d], body[d])
};

function both(a) {
    return typeof a == 'object' ? a : {
        top: a,
        left: a
    }
}
    })(jQuery);

    ;
    (function (b) {
function g(a, e, d) {
    var h = e.hash.slice(1),
        f = document.getElementById(h) || document.getElementsByName(h)[0];
    if (f) {
        a && a.preventDefault();
        var c = b(d.target);
        if (!(d.lock && c.is(":animated") || d.onBefore && !1 === d.onBefore(a, f, c))) {
            d.stop && c._scrollable().stop(!0);
            if (d.hash) {
                var a = f.id == h ? "id" : "name",
                    g = b("<a> </a>").attr(a, h).css({
                        position: "absolute",
                        top: b(window).scrollTop(),
                        left: b(window).scrollLeft()
                    });
                f[a] = "";
                b("body").prepend(g);
                location = e.hash;
                g.remove();
                f[a] = h
            }
            c.scrollTo(f, d).trigger("notify.serialScroll", [f])
        }
    }
}
var i = location.href.replace(/#.*/, ""),
    c = b.localScroll = function (a) {
        b("body").localScroll(a)
    };
c.defaults = {
    duration: 1E3,
    axis: "y",
    event: "click",
    stop: !0,
    target: window,
    reset: !0
};
c.hash = function (a) {
    if (location.hash) {
        a = b.extend({}, c.defaults, a);
        a.hash = !1;
        if (a.reset) {
            var e = a.duration;
            delete a.duration;
            b(a.target).scrollTo(0, a);
            a.duration = e
        }
        g(0, location, a)
    }
};
b.fn.localScroll = function (a) {
    function e() {
        return !!this.href && !! this.hash && this.href.replace(this.hash, "") == i && (!a.filter || b(this).is(a.filter))
    }
    a = b.extend({}, c.defaults, a);
    return a.lazy ? this.bind(a.event, function (d) {
        var c = b([d.target, d.target.parentNode]).filter(e)[0];
        c && g(d, c, a)
    }) : this.find("a,area").filter(e).bind(a.event, function (b) {
        g(b, this, a)
    }).end().end()
}
    })(jQuery);

     // Initialize all .smoothScroll links
    jQuery(function ($) {
$.localScroll({
    filter: '.smoothScroll'
});
     });

HTML

<ul id="tabs">
<li class="active"><a target='_blank' href="#features" class="smoothScroll">FEATURES</a></li>
<li><a target='_blank' href="#specs" class="smoothScroll">SPECIFICATIONS</a></li>
<li><a target='_blank' href="#config" class="smoothScroll">COMPARE CONFIGURATIONS</a></li>
</ul>

<ul id="tab">
<li class="active">
    <a name="features"></a>Content 1
</li>
<li>
    <a name="specs"></a>Content 2
</li>
  <li>
    <a name="config"></a>Content 3
</li>

Answer:1

I have a redux container which I want to mount in my test case. It has a component which is using react-router link. Mounting the container was throwing me history not defined error, after reading ...

I have a redux container which I want to mount in my test case. It has a component which is using react-router link. Mounting the container was throwing me history not defined error, after reading ...

I'm implementing Immutable.js in a set of React components with props containing objects, where Immutable has not been used before. While I was rewriting all { someProp.someValue } to { someProp.get("...

I'm implementing Immutable.js in a set of React components with props containing objects, where Immutable has not been used before. While I was rewriting all { someProp.someValue } to { someProp.get("...

  1. immutable javascript to object
  2. immutable in javascript
  3. immutable in javascript w3schools

Previously, I was able to reroute user (e.g. on successful login) using browser history: import { browserHistory } from 'react-router' browserHistory.replace('/home') In the new react-router I am ...

Previously, I was able to reroute user (e.g. on successful login) using browser history: import { browserHistory } from 'react-router' browserHistory.replace('/home') In the new react-router I am ...

return fetch(`{SERVICE API URL}`, { method: 'GET', headers: { 'userName': "username", 'password': "password", 'content-type': 'application/json' } }) .then(response => ...

return fetch(`{SERVICE API URL}`, { method: 'GET', headers: { 'userName': "username", 'password': "password", 'content-type': 'application/json' } }) .then(response => ...

  1. react redux redirect unauthorized