jquery元素点击事件只允许一次?迷茫的

发布于 2024-10-21 16:42:47 字数 696 浏览 0 评论 0原文

一个元素的点击事件,它只起作用一次。假设该值为 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;
        }
    });

谢谢

One a click event of an element, it only works once. Say the value is 2 it will increase/decrease/reset only once.

How to I reset the event so the user can keep clicking on the element increasing the value of the value .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;
        }
    });

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北恋 2024-10-28 16:42:47

JavaScript巧妙(阅读:这是一个坏主意)重载了+运算符来表示算术加法和字符串连接。

如果其中一个操作数看起来像字符串,它将进行字符串连接。你的值看起来像一个字符串,所以它就是这样做的。

我已经使用 parseInt(val, 10) 来尝试获取整数,或者如果我们返回类似 NaN (不是数字)。 parseInt() 的第二个参数是基数。如果没有这个,输入为 072 的数字将以八进制(基数 8)格式读取,可能不是您想要的。

$('.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;
        }
});

jsFiddle

更新

右键单击事件,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

JavaScript cleverly (read: it was a bad idea) overloaded the + operator to mean arithmetic addition and string concatenation.

If one of the operands looks like a string, it will do string concatenation. Your value looks like a string, so it does that.

I have used parseInt(val, 10) to try and get the integer, or get 0 if we get back something like NaN (not a number). The second argument to parseInt() is the radix. Without that, a number entered as 072 will be read in octal (base 8) format and probably not what yo want.

$('.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;
        }
});

jsFiddle.

Update

The right click event, case 3, would not work for me with Chrome, so I binded it to the contextmenu event and it worked...

$('.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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文