#javascript
#javascript
Вопрос:
Я работаю над получением конечного значения из функции, у меня есть две интерактивные кнопки, одна — предыдущая, а другая — следующая. при нажатии на оба я получаю количество показов слайдов. чтобы получить этот результат, я использую следующие коды. это работает лучше, но пока я не поверю в это, для этого может быть однострочное решение..
может ли кто-нибудь исправить этот код, чтобы свести к минимуму?
var tdLength = 7;
var num = 0;
$('a.buttons').click(function(){
num = ($(this).attr('id') == "next-arrow") ? num =1 : num -=1;
num = ( num > tdLength) ? 1 : num;
num = (num < 1) ? tdLength : num;
alert(num);
})
заранее спасибо..
Ответ №1:
Мой снимок:
var num = 0;
function add(amount) {
num = (num tdLength - 1 amount) % tdLength 1
alert(num);
}
$('#next-arrow').click(function(){add(1)});
$('#prev-arrow').click(function(){add(-1)});
Злой:
num = (num tdLength - 1 amount) % tdLength 1
Всегда выдает значение в [1..tdLength]
(включительно) для разумных amount
значений. Добавлено @Jon ответ.
Комментарии:
1. Я получаю значения, увеличивая и уменьшая значения на
1
. в случае, если мне потребуются значения по2
или3
как обращаться? пример: 2,4,6,8 или 3,6,9, например?
Ответ №2:
Одна из идей заключается в том, что вы можете заменить это
num = (num > tdLength) ? 1 : num;
num = (num < 1) ? tdLength : num;
со строкой ниже, которая также гарантированно даст результат в интервале [0 .. (tdLength-1)]
:
num = (num tdLength) % tdLength;
Разница здесь в том, что ваш код использует индекс, основанный на 1, в то время как% приводит к индексам, основанным на 0.
Вы также можете сократить первую строку:
num = ($(this).attr('id') == "next-arrow") ? num =1 : num -=1;
Поскольку вы контролируете ситуацию, добавьте data-skip
(или аналогичный) атрибут к своим ссылкам (например <a id="prev-arrow" data-skip="-1">...</a>
), который позволит вам сделать это вместо:
num = parseInt($(this).data('skip'));
Итак, все это вместе дает:
var tdLength = 7;
var num = 0; // "first" is preselected
$('a.buttons').click(function(){
num = (num parseInt($(this).data('skip')) tdLength) % tdLength;
alert(num);
})
Комментарии:
1.
num = $(this).data('skip');
собираюсь выполнить конкатенацию строк