2013-06-20 3 views
2

Мне интересно, как циклически перемещаться по значениям в массиве при нажатии? Когда отображается последнее значение массива, следующий клик должен снова отобразить первое значение массива.Цикл через массив по щелчку

Я думаю, что я близок, однако, когда я добираюсь до последнего значения массива, я должен щелкнуть дважды, прежде чем снова отобразит первое значение.

Вот мой JavaScript:

var myArray = ["red", "yellow", "green"]; 
var myIndex = 1; 
var print = document.getElementById('print'); 

print.innerHTML = myArray[0]; //Print first value of array right away. 

function nextElement() { 
    if (myIndex < myArray.length) { 
    print.innerHTML = myArray[myIndex]; 
    myIndex++; 
    } 
    else { 
    myIndex = 0; 
    } 
}; 

Вот мой HTML:

<p>The color is <span id="print"></span>.</p> 

<a id="click" href="#" onclick="nextElement();">Click</a> 

Вот скрипку, если это полезно:

http://jsfiddle.net/jBJ3B/

ответ

3

Вы могли бы использовать по модулю оператора следующим образом:

function nextElement() { 
    print.innerHTML = myArray[myIndex]; 
    myIndex = (myIndex+1)%(myArray.length); 
    } 
}; 

См: http://jsfiddle.net/jBJ3B/3/

Еще более крайность (как zdyn написал):

function nextElement() { 
    print.innerHTML = myArray[myIndex++%myArray.length]; 
}; 

См: http://jsfiddle.net/jBJ3B/5/

+0

Спасибо. Я предполагаю, что меня бросили, так как myArray.length возвращает значение 3, но последняя позиция myArray - 2. Спасибо! – Mdd

2

В краткой, как я мог бы получить:

function nextElement() { 
    print.innerHTML = myArray[myIndex++ % myArray.length] 
} 
+0

Спасибо! Это действительно здорово. – Mdd

1

var print = document.getElementById ('print');

Почему вы назначаете переменную этому? почему бы не просто написать

document.getElementById ('печати') innerHTML = туАггау [0]. // Печатать первое значение массива сразу. document.getElementById ('print'). Style.color = myArray [0]; // Установите цвет печати идентификатора.

+0

Потому что, поскольку мне нужно только один раз набрать 'document.getElementById ('print')' once. Я думаю, что присвоение его переменной также кэширует ссылку на элемент DOM, поэтому его не нужно искать агай. – Mdd

Смежные вопросы