Показать сообщение отдельно
  #6 (permalink)  
Старый 01.11.2018, 12:39
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

brp80000, не понятно, как должно вести себя при {3,8}, например, для 0004...

<style>
  .invalid {
    color: red
  }
</style>

Есть вот такой select
<select name="CanFrame_Type" id="CanFrame_Type">
  <option value="Std" data-min-max="0-7FF" data-len-min-max="1-3">Std</option>
  <option value="Ext" data-min-max="800-FFFFFFFF" data-len-min-max="3-8">Ext</option>
</select>
Далее поле для ввода НЕХ
<input id="Can_ID" name="Can_ID" class="max1" />

<script>
  const select = document.getElementById('CanFrame_Type')
  const hex = document.getElementById('Can_ID')
  const update = (e) => {
    var [min, max] = select.options[select.options.selectedIndex].dataset.minMax.split('-')
    var [lmin, lmax] = select.options[select.options.selectedIndex].dataset.lenMinMax.split('-')
    var lvalid = hex.value.toString(16).length >= lmin && hex.value.toString(16).length <= lmax
    if (!lvalid && !hex.value.toString(16).length <= lmax) {
      hex.value = hex.value.substr(0, lmax)
    }
    var value = parseInt(hex.value, 16)
    if (value.toString(16) === hex.value.toLowerCase() && value >= parseInt(min, 16) && value <= parseInt(max, 16)) {
      hex.classList.contains('invalid') && hex.classList.remove('invalid')
    } else !isNaN(value) && !hex.classList.contains('invalid') && hex.classList.add('invalid')
  }
  select.addEventListener('change', update)
  hex.addEventListener('input', update)
</script>
Ответить с цитированием