0

I am trying to "navigate" correctly inside an array of functions by a "foward" and a "back" buttons with jQuery. I am having trouble with the back button which is navigating incorrectly.

var functions = [ function0, function1, function2, function3, function4, function5 ];
var index = 0;

$("#forward").click(function() {
    functions[Math.abs(index % functions.length)]();
    index++;
});

$("#back").click(function() {
    functions[Math.abs(index % functions.length)]();
    index--;
});

Here is the complete code:

https://jsfiddle.net/sa13yrtf/2/

3 Answers 3

2

you should change your index in the right order.

 $("#forward").click(function(){
       if(index < functions.length){
         index++;
         functions[Math.abs(index % functions.length)]();
       }
    });

$("#back").click(function(){
     if(index > 1){
       index--;
       functions[Math.abs(index % functions.length)]();
     }
});
Sign up to request clarification or add additional context in comments.

Comments

2

Check the updated fiddle

$("#forward").click(function(){
  index = index == functions.length - 1 ? 0: index + 1; //number incremented before calling the function and in incremental fashion
  functions[Math.abs(index % functions.length)]();
});

$("#back").click(function(){
   index = index ? index - 1 : functions.length-1 ; //number decremented before calling the function and in incremental fashion
   functions[Math.abs(index % functions.length)]();
});

Comments

1

Here is an object-oriented approach. The Navigator class keeps track of the index for you.

function Navigator(fnArr, fwdSelector, bakSelector) {
  this.fnArr = fnArr || [];
  this.index = 0;
  $(fwdSelector).click($.proxy(this.forward, this));
  $(bakSelector).click($.proxy(this.reverse, this));
}
Navigator.prototype = {
  rotate : function(direction) {
    this.executeFn(Math.abs((this.index += direction) % this.fnArr.length));
  },
  forward : function() {
    if (this.index < this.fnArr.length - 1) { this.rotate(+1); }
  },
  reverse : function() {
    if (this.index > 0) { this.rotate(-1); }
  },
  executeFn : function(index) {
    this.fnArr[index || 0]();
  }
};

var fnArr = [
  function function0() { $('p').text('0'); },
  function function1() { $('p').text('1'); },
  function function2() { $('p').text('2'); },
  function function3() { $('p').text('3'); },
  function function4() { $('p').text('4'); },
  function function5() { $('p').text('5'); }
];
var nav = new Navigator(fnArr, '#forward', '#back');
nav.executeFn();
.pure-button-primary { font-weight: bold; }
p { width: 2.8em; text-align: center; font-weight: bold; font-size: 2em; margin: 0.25em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/pure/0.6.0/buttons-min.css" rel="stylesheet"/>

<div class="pure-button pure-button-primary" id="back">&#60;&#60;</div>
<div class="pure-button pure-button-primary" id="forward">&#62;&#62;</div>
<p></p>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.