3

在最近的一个项目中,我需要一个十六进制掩码 (0x0 - 0xFF) 作为 HTML 表单上的输入字段之一。我知道我可以使用常规输入来获取十六进制值,然后我可以将其与其他表单提交验证一起验证。

但是,对于其他一些十进制字段,我使用ui.spinner.js (github)来允许用户点击向上/向下按钮来切换数字的值。最好有一个类似的控件来输入十六进制值。或者至少,一个比简单输入元素更“丰富”的控件。

有谁知道这样的插件是否存在?

提前致谢。

更新

我忽略了提及我正在使用的微调器控件。我为混乱道歉。

4

4 回答 4

1

我从来没有见过一个。不过,让微调器执行十六进制应该不会太难 - 要么制作一个以 0x00 - 0xFF 作为值的选择框,要么做一个 0 - 256 的常规微调器并在 spin() 事件中转换为十六进制。

于 2010-02-09T16:29:38.730 回答
1

认为您可能仍然可以使用 jQuery UI Spinner 来执行此操作。我没有测试任何东西,但我会看看两种可能的选择。

  1. 通过javascript创建一个UL,它的LI是0x00-0xff的列表。然后,使用$("#your_ul_id").spinner();

  2. 尝试使用 spin 事件处理程序通过转换为适当的十六进制来更改输出。

于 2010-02-09T16:35:18.357 回答
1

我最近有同样的要求,我写了以下插件来解决它:https ://github.com/bubasti/jQuery-Hex-Input

它使用 jQuery 小部件工厂并使用 jQuery 1.9 Spinner 小部件。

于 2013-01-13T23:26:15.200 回答
0

最终通过编写自定义formatparse处理程序以及覆盖 keypress 事件以使用户能够输入十六进制数字来解决此问题:

        // Functions for dealing with hex values in spinners
        var parseHex = function(val) {
                    var options = this;

                    if (options.group == '.')
                        val = val.replace('.', '');
                    if (options.point != '.')
                        val = val.replace(options.point, '.');
                    return parseFloat(parseInt(val, 16));
                },
            formatHex = function(num, places) {
                    var options = this,
                    regex = /(\d+)(\d{3})/,
                    result = ((isNaN(num) ? 0 : Math.abs(num)).toFixed(places)) + '';

                    for (result = result.replace('.', options.point); regex.test(result) && options.group; result=result.replace(regex, '$1'+options.group+'$2')) {};
                    return (num < 0 ? '-' : '') + options.prefix + parseInt(result).toString(16) + options.suffix;
                },
             keypressHex = function(e) {
                var ch = String.fromCharCode(e.charCode || e.keyCode)
                if (((ch >= '0') && (ch <= '9')) || ((ch >= 'a') && (ch <= 'f')))
                    return true;
                return false;
             };

        jQuery('#myinput')
            .spinner({
                min: 0,
                max: 255,
                prefix: '0x',
                format: formatHex,
                parse: parseHex});
        jQuery('#myinput').unbind('keypress.uispinner'); // Explicitly remove the controls keypress validation
        jQuery('#myinput').bind('keypress.uispinner', keypressHex);
于 2010-02-10T16:11:17.287 回答