Событие щелчка элемента jquery разрешено только один раз?confuddled - PullRequest
0 голосов
/ 15 марта 2011

Одно событие щелчка элемента, оно работает только один раз.Скажем, значение равно 2, оно будет увеличиваться / уменьшаться / сбрасываться только один раз.

Как сбросить событие, чтобы пользователь мог продолжать нажимать на элемент, увеличивая значение значения .item-selection-amount

$('.item-selection-amount').click(function(event) {
        var amount = $(this).val();
        switch (event.which) {
            case 1:
                //set new value +
                $(this).val(amount + 1);
                break;
            case 2:
                //set new value reset
                $(this).val(0);
                break;
            case 3:
                //set new value -
                if(amount > 0){ 
                    $(this).val(amount - 1);
                }
                break;
        }
    });

Спасибо

1 Ответ

3 голосов
/ 15 марта 2011

JavaScript умно (читай: это была плохая идея) перегрузил оператор + для обозначения арифметического сложения и конкатенации строк.

Если один из операндов выглядит как строка,это сделает конкатенацию строк.Ваше значение выглядит как строка, поэтому оно делает это.

Я использовал parseInt(val, 10), чтобы попытаться получить целое число, или получил 0, если мы вернем что-то вроде NaN (не число),Второй аргумент parseInt() - основа.Без этого число, введенное как 072, будет читаться в восьмеричном (базовое 8) формате и, вероятно, не так, как вы хотите.Обновление

Событие правого щелчка, case 3, не будет работать для меня с Chrome, поэтому я связал его с событием contextmenu, и оно сработало ...

$('.item-selection-amount').click(function(event) {
    var amount = parseInt($(this).val(), 10) || 0;
    switch (event.which) {
    case 1:
        //set new value +
        $(this).val(amount + 1);
        break;
    case 2:
        //set new value reset
        $(this).val(0);
        break;
    case 3:
        //set new value -
        if (amount > 0) {
            $(this).val(amount - 1);
        }
        break;
    }
}).bind('contextmenu', function(event) {
    event.preventDefault();
    var amount = parseInt($(this).val(), 10) || 0;
    if (amount > 0) {
        $(this).val(amount - 1);
    }
})

jsFiddle .

...