Вот "полный" код:
<div class="form-cntrl form-select">
<i class="fa fa-caret-down" aria-hidden="true"></i>
<span class="item-selected" data-id="1">Виоргоны</span>
<ul class="list hidden" >
<li class="item" data-id="1">Виоргоны</li>
<li class="item" data-id="2">Виофтаны</li>
</ul>
</div>
<input type="text" class="form-cntrl contentSlider form-control" placeholder="Номер: 01">
var contentSlider = $(contentForm).find('.contentSlider');
var itemSlctdId = $(itemSlctd).attr('data-id');
var replaceSliderValRelationInput = function(contentSlider, max, baseContentSliderVal) {
console.log('38. Замена значений слайдера и зависимых от него по вводу номера в input');
var focusInp = false;
function setSlide(ths){
var inpVal = $(ths).val();
flagSlideInput = true;
contentSliderVal = inpVal - 1 + baseContentSliderVal;
$(contentSliderBox).slider('value', contentSliderVal);
}
function analizToken (ths) {
console.log('44. Анализ числа в input');
console.log(' max', max);
var inpVal = $(ths).val();
if (inpVal[0] === undefined){
// console.log('45. Новое значение слайдера еще не задано 1');
return true;
}else if (inpVal[0] === '0'){
// console.log('first 0');
if (inpVal[1] === undefined){
// console.log('46. Новое значение слайдера еще не задано 2');
return true;
}else if (inpVal[1] === '0'){
// console.log('47. Значение слайдера задано с ошибкой 1');
return false;
}else if ((1 <= parseInt(inpVal[1])) && (parseInt(inpVal[1]) <= max)){
// console.log('48. Установка слайдера 1');
return true;
}
}else if ((1 <= parseInt(inpVal)) && (parseInt(inpVal) <= max)){
// console.log('49. Установка слайдера 2');
return true;
}
// console.log('50. Значение слайдера задано с ошибкой 2');
return false;
}
function removeChar(ths){
// console.log('43. Удаление последнего введенного символа слева от курсора');
$(ths).css({'background-color': '#FFE2BF'});
setTimeout(function(){
stateMashine(4, $(ths));
$(ths).css({'background-color': '#FFFCE3'});
}, 200);
}
function getCaretPosition(obj){
// console.log('42. Вычисление положения курсора');
var cursorPos = null;
if (document.selection){
var range = document.selection.createRange();
range.moveStart('textedit', -1);
cursorPos = range.text.length;
}else{
cursorPos = obj.selectionStart;
}
return cursorPos;
}
function setCaretPosition(obj, cursorPos){
// console.log('41. Установка положения курсора');
if (document.selection){
var range = document.selection.createRange();
range.moveEnd('textedit', cursorPos); // Проверить на осле
range.moveStart('textedit', cursorPos);
}else{
obj.selectionEnd = obj.selectionStart = cursorPos;
}
}
function stateMashine(evnt, ths, key){
console.log('39. stateMashine');
// console.trace();
var strVl = $(ths).val();
var strVlBuf = [];
var lngVl = strVl.length;
var idxPn = getCaretPosition($(ths).get(0)) - 1;
var strPl;
// console.log('lngVl', lngVl);
switch(evnt){
case 3:
// console.log('53. stateMashine 3 =======================================');
if (lngVl < 2){
strVlBuf[0] = strVl.substring(0, idxPn + 1);
strVlBuf[1] = strVl.substring(idxPn + 1);
$(ths).val(strVlBuf[0] + key + strVlBuf[1]);
setCaretPosition($(ths).get(0), idxPn + 2);
}else{
console.log('stop: 3');
setTimeout(function(){
strVlBuf[0] = strVl.substring(0, idxPn + 1);
strVlBuf[1] = strVl.substring(idxPn + 1);
$(ths).val(strVlBuf[0] + key + strVlBuf[1]);
setCaretPosition($(ths).get(0), idxPn + 2);
},0);
removeChar(ths);
}
break;
case 4:
// console.log('54. stateMashine 4');
if ((lngVl > 0) && (idxPn >= 0)){
strVlBuf[0] = strVl.substring(0, idxPn);
strVlBuf[1] = strVl.substring(idxPn + 1);
$(ths).val(strVlBuf[0] + strVlBuf[1]);
setCaretPosition($(ths).get(0), idxPn);
}else console.log('stop: 4');
break;
case 5:
// console.log('55. stateMashine 5');
if ((lngVl > 0) && (idxPn >= -1)){
strVlBuf[0] = strVl.substring(0, idxPn + 1);
strVlBuf[1] = strVl.substring(idxPn + 2);
$(ths).val(strVlBuf[0] + strVlBuf[1]);
setCaretPosition($(ths).get(0), idxPn + 1);
}else console.log('stop: 5');
break;
case 6:
// console.log('56. stateMashine 6');
if ((lngVl > 0) && (idxPn >= 0)){
setCaretPosition($(ths).get(0), idxPn);
}else console.log('stop: 6');
break;
case 7:
// console.log('57. stateMashine 7');
if ((lngVl > 0) && (idxPn < lngVl - 1)){
setCaretPosition($(ths).get(0), idxPn + 2);
}else console.log('stop: 7');
break;
case 8:
// console.log('58. stateMashine 8');
if ((lngVl > 0) && (idxPn >= 0)){
setCaretPosition($(ths).get(0), 0);
}else console.log('stop: 8');
break;
case 9:
// console.log('59. stateMashine 9');
if ((lngVl > 0) && (idxPn < lngVl - 1)){
setCaretPosition($(ths).get(0), lngVl);
}else console.log('stop: 9');
break;
default:
console.log('Exit default');
break;
}
}
function readKey(eventObject){
console.log('40. Чтение вводимых символов');
var key = eventObject.which;
var ths = eventObject.currentTarget;
// console.log(key);
eventObject.preventDefault();
if ((48 <= key) && (key <= 57 )){ stateMashine(3, $(ths), key - 48);
if (!analizToken(ths)) removeChar(ths);
else setSlide(ths);
}else if ((96 <= key) && (key <= 105)){ stateMashine(3, $(ths), key - 96);
if (!analizToken(ths)) removeChar(ths);
else setSlide(ths);
}else if (key === 8) { stateMashine(4, $(ths));
if (!analizToken(ths)) removeChar(ths);
else setSlide(ths);
}else if (key === 46) { stateMashine(5, $(ths));
if (!analizToken(ths)) removeChar(ths);
else setSlide(ths);
}else if((key === 37) || (key === 38)){ stateMashine(6, $(ths));
}else if((key === 39) || (key === 40)){ stateMashine(7, $(ths));
}else if((key === 33) || (key === 36)){ stateMashine(8, $(ths));
}else if((key === 34) || (key === 35)){ stateMashine(9, $(ths));
}
}
function setHandler(ths){
console.log('51. setHandler');
$(ths).keydown(readKey);
strPl = $(ths)
.attr('placeholder')
.split(' ');
strPl[0] = strPl[0].replace(':','');
$(ths).attr('placeholder', strPl[0]);
console.log('61.4 max', max, 'baseContentSliderVal', baseContentSliderVal);
// max = 3;
focusInp = true;
}
function removeHandler(ths){
console.log('52. removeHandler');
if (focusInp){
strPl = $(ths).attr('placeholder') + ': ';
$(ths).val('');
contentSliderVal = $(contentSliderBox).slider('value');
replaceInputsRelationSliderVal(contentSliderVal, strPl, contentSlider);
$(ths)
.unbind('keydown', readKey);
}
focusInp = false;
}
console.log('61.2 max', max, 'baseContentSliderVal', baseContentSliderVal);
$(contentSlider).focusin({max: max, baseContentSliderVal: baseContentSliderVal},function(eventObject){
console.log('61.3 max', eventObject.data.max, 'baseContentSliderVal', eventObject.data.baseContentSliderVal);
setHandler(this);
}).focusout(function(){
removeHandler(this);
});
};
function triggerSelect(contentSlider, itemSlctdId){
console.log('60. Инициализация replaceSliderValRelationInput');
setTimeout(function(){
itemSlctd = $(frmSlct).find('.item-selected');
itemSlctdId = $(itemSlctd).attr('data-id');
var max;
var baseContentSliderVal;
console.log('parseInt(itemSlctdId) ', parseInt(itemSlctdId));
switch(parseInt(itemSlctdId)){
case 1: max = 34; baseContentSliderVal = 0; break;
case 2: max = 10; baseContentSliderVal = 34; break;
case 3: max = 22; baseContentSliderVal = 0; break;
case 4: max = 5; baseContentSliderVal = 22; break;
case 5: max = 2; baseContentSliderVal = 27; break;
case 6: max = 3; baseContentSliderVal = 29; break;
case 7: max = 2; baseContentSliderVal = 32; break;
case 8: max = 10; baseContentSliderVal = 34; break;
default: console.log('Error!!!'); return 1;
}
console.log('61.1 max', max, 'baseContentSliderVal', baseContentSliderVal);
replaceSliderValRelationInput(contentSlider, max, baseContentSliderVal);
}, 0);
};
triggerSelect(contentSlider, itemSlctdId);