代码之家  ›  专栏  ›  技术社区  ›  Justin Ethier

jquery-ui-以十六进制形式输入数字的插件?

  •  3
  • Justin Ethier  · 技术社区  · 14 年前

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

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

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

    事先谢谢。

    更新

    我忽略了提到我使用的自旋体控件。我为困惑道歉。

    4 回复  |  直到 12 年前
        1
  •  1
  •   Quasipickle    14 年前

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

        2
  •  1
  •   Justin Ethier    14 年前

    认为 您可能仍然可以使用jquery ui微调器来执行此操作。我没有测试任何东西,但我会考虑两个可能的选择。

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

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

        3
  •  1
  •   F. Hurgle    12 年前

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

    它正在使用jquery小部件工厂,并且正在使用jquery 1.9 spinner小部件。

        4
  •  0
  •   Justin Ethier    14 年前

    最后通过编写自定义 format parse 处理程序,以及重写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);