【问题标题】:Is it possible to add a suffix to a jQuery mask?是否可以为 jQuery 掩码添加后缀?
【发布时间】:2015-09-03 19:35:31
【问题描述】:

我正在使用 Igor Escobar 的 jQuery 掩码插件 (https://github.com/igorescobar/jQuery-Mask-Plugin),我正在尝试向掩码添加后缀以在输入值的末尾显示 % 符号。

我正在构建的应用程序是针对巴西用户的,那么我必须使用这种数字格式:000.000,00。其中,(逗号)是小数点分隔符,.(点)是千位分隔符。

我编写了以下代码来应用掩码,但尚未在其末尾附加 % 符号。

$('.mask-decimal').each(function () {
    var $self = $(this);
    var precision = parseInt($self.data('precision'), 10) || 2;
    var mask = '#.##0,' + (new Array(precision + 1).join('0'));
    $self.mask(mask, {
        reverse : true,
        maxlength : false
    });
    $self.on('keyup', function () {
        var val = this.value;
        if (val) {
            if (val.length <= precision) {
                while (val.length < precision) {
                    val = '0' + val;
                }
                val = '0,' + val;
            } else {
                var parts = val.split(',');
                parts[0] = parts[0].replace(/^0+/, '');
                if (parts[0].length === 0) {
                    parts[0] = '0';
                }
                val = parts.join(',');
            }
            this.value = val;
        }
    });
});

这个面具效果很好。

我试图做的是在掩码的末尾添加百分号,然后在我的 keyup 处理程序的开头删除它,最后在返回值之前再次附加它。我基本上改变了这些行:

var mask = '#.##0,' + (new Array(precision + 1).join('0')) + '%';

var val = this.value.replace('%', '');

this.value = val + '%';

更改后,我可以在字段中输入一个值,但我无法使用退格键清除/更改它。如果我足够快,我可以选择整个内容并将其删除,但对于普通用户来说,这是一个糟糕的解决方案。之所以会发生这种情况,是因为光标始终停留在输入的末尾,并且 keyup 事件被触发得非常快。

考虑到这一点,有没有办法将光标移动到输入中的特定位置?是否有人可以看到另一种方法来更改我的功能,以便用户可以使用退格键清除输入内容?

【问题讨论】:

    标签: javascript jquery jquery-mask


    【解决方案1】:

    如果这是用于输入字段并且% 符号仅用于装饰,您可以在输入上方放置一个包含该符号的跨度。因为它纯粹是一个展示品,对吧?或者你可以在输入后有标志。

    如果用户不应该能够编辑它,那么绝对没有必要在输入中包含它。对于用户和您的逻辑来说,这都是违反直觉的。

    在这里,我将标志放在标签内,以便单击它会激活输入字段。

    label, input {
      font-size:18px;
      font-family:sans-serif;
    }
    
    label {
      margin-left:-24px;
    }
    
    input {
      text-align:right;
      padding-right:24px;
    }
    <input type="text" id="number" value="123">
    <label for="number">%</label>

    【讨论】:

    • 感谢您的回答 Jan。实际上,我正在使用 Bootstrap,因此我可以为此使用输入插件。我只是想知道是否可以按照项目所有者的要求将% 符号附加到输入值。如果没有其他答案出现,我会按照你的建议去做。
    • 当然有可能,你已经做到了。但是你有x个问题,因为它是个坏主意。你的产品负责人应该告诉你他们想要实现什么,而不是你应该如何去做。他们缺乏做出此类决定的技术知识。
    • @GustavoStraube 请参阅meta.stackexchange.com/questions/66377/what-is-the-xy-problem 如果这是您的项目管理设置(项目经理告诉您做什么,而不是他们想要的),如果我是您,我会要求修改该流程。我不能强调这一点,项目所有者(通常)在技术上没有资格以这种方式提出请求,它肯定会确保质量较低的产品。为了您和您的客户,修改您的决策过程。
    • 感谢您的建议。顺便说一句,我按照您的回答添加了值(百分比)类型的视觉指示,而不是更改掩码。
    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多