jQuery: остановить уменьшение значения текстового поля, если значение равно 0

Что я имею:

У меня есть текстовое поле только для чтения и две ссылки. Первая ссылка увеличивает значение текстового поля на 1, тогда как вторая ссылка уменьшает значение на 1.

Что мне нужно:

Мне нужно, чтобы значение текстового поля перестало уменьшаться на нуле (мне не нужны отрицательные числа).

Мой код:

jQuery:

jQuery(".increment").on('click',function(){
    jQuery(this).next(".amount input").val(parseInt(jQuery(this).next(".amount input").val())+1);
});

jQuery(".decrement").on('click',function(){
    jQuery(this).prev(".amount input").val(parseInt(jQuery(this).prev(".amount input").val())-1);
});

Примечание. .next и .prev используются, поскольку у меня несколько текстовых полей.

HTML:

<!--This block of code is occurs more than once.-->
<td class="amount">
    <a href="#" class="increment"></a>
    <input type="text" readonly="readonly" value="0" />
    <a href="#" class="decrement"></a>
</td>

Свободное предположение:

...что касается декрементации...

// open onclick code here

    if (jQuery(this).prev(".amount input").val != "0"){

        // decrement code here

    }

// close onclick code here

Ресурсы:

Мой рабочий код основан на этом ответе Stack Overflow: https://stackoverflow.com/a/12209831/835950

... в котором для удобства существует скрипка: http://jsfiddle.net/iMaverick/S3PLG/ 2/


person Dominor Novus    schedule 22.04.2013    source источник


Ответы (2)


Демо

$("#down").on('click',function(){
    var value = (parseInt($("#incdec input").val() , 10) - 1);
    $("#incdec input").val((value-1) < 0 ? 0 :(value -1));
});
person PSL    schedule 22.04.2013
comment
Спасибо за решение. Это легко работает, когда я интегрирую .next и .prev. - person Dominor Novus; 22.04.2013
comment
Укажите систему счисления для parseInt. - person Blender; 22.04.2013
comment
Спасибо, я забыл об этом .. Это действительно черт .. Спасибо, что указали. - person PSL; 22.04.2013

Почти:

$(document).ready(function() {
    var $textbox = $("#incdec input");

    $("#up").click(function(){
        var value = parseInt($textbox.val(), 10);

        $textbox.val(value + 1);
    });

    $("#down").click(function(){
        var value = parseInt($textbox.val(), 10);

        if (value > 0) {
            $textbox.val(value - 1);
        }
    });
});

HTML5 также включает элемент <input type="number">:

<input type="number" min="0" value="1" />
person Blender    schedule 22.04.2013
comment
Спасибо за решение. Хотя структура условия соответствует тому, что я пытался сделать, мне не удается реализовать ваш код, когда я интегрирую .next и .prev, как указано в примере в моем вопросе. Я также не уверен, что представляет собой 10 после запятой. Сначала я рассматривал решение HTML5, но вместо этого выбрал ручное решение, которое позволяет мне лучше контролировать дизайн. - person Dominor Novus; 22.04.2013
comment
@DominorNovus: 10 — это база 10. Если вы не укажете базу, parseInt() может выбирать все, что захочет. Что касается вашей проблемы, вам нужно будет предоставить больше контекста. Как выглядит ваш фактический HTML? - person Blender; 22.04.2013
comment
Это понятно. Я не стал подчеркивать, почему я использую .next и .prev. Я отредактировал свой вопрос, чтобы предоставить запрошенный контекст. Пожалуйста, обратитесь к разделу Мой код:, в частности, к примечанию и разметке. Вы можете просмотреть рабочий код, который мне удалось получить из ответа PSCoder, здесь: pastebin.com/WneuWRrn - person Dominor Novus; 22.04.2013
comment
@DominorNovus: Втискивать столько кода в одну строку — плохая идея. - person Blender; 22.04.2013
comment
Вы имеете в виду мое использование .next/.prev вместо написания отдельной функции для каждого текстового поля или вы имеете в виду решение PSCoder? - person Dominor Novus; 22.04.2013
comment
Каковы лучшие альтернативы? 1) Использование .prev/.nav трудно обойти, учитывая, что у меня есть сотни (буквальные сотни) текстовых полей. Написание функции для каждого кажется излишним, если вы не предлагаете другое средство. 2) Что касается условия проверки на ноль, я рад разбить код на несколько строк в соответствии с вашим примером, за исключением того, что мне не удается заставить его работать с .next и .prev. - person Dominor Novus; 22.04.2013
comment
@DominorNovus :: кажется, я опоздал, чтобы ответить на ваш вопрос :) - person AdityaParab; 23.04.2013
comment
@Maverick :: Не беспокойтесь, вы предоставили мне исходную основу для увеличения/уменьшения значения текстового поля. - person Dominor Novus; 25.04.2013