カスタムformat
とparse
ハンドラーを作成し、keypress イベントをオーバーライドして、ユーザーが 16 進数を入力できるようにすることで、これを解決しました。
// 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);