Ага, вроде заработало
|
А как исключить ввод строчных английских символов?
да и исключить все символы кроме допустимых для HEX почему то pattern="[A-F\d]" не отрабатывает? |
казалось бы простая задача на словах )...
<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> function HEX(s, h) { const select = document.getElementById(s) const hex = document.getElementById(h) function update() { !(parseInt(hex.value, 16).toString(16) === hex.value.toLowerCase()) && !!hex.value && (hex.value = hex.oldValue || '') var [min, max] = select.options[select.options.selectedIndex].dataset.minMax.split('-') var [lmin, lmax] = select.options[select.options.selectedIndex].dataset.lenMinMax.split('-') !(hex.value.toString(16).length <= lmax) && (hex.value = hex.oldValue || '') parseInt(hex.value, 16) >= parseInt(min, 16) && parseInt(hex.value, 16) <= parseInt(max, 16) ? hex.classList.contains('invalid') && hex.classList.remove('invalid') : !hex.classList.contains('invalid') && hex.classList.add('invalid') hex.oldValue = hex.value } select.addEventListener('change', update) hex.addEventListener('input', update) update() } const controller = new HEX('CanFrame_Type', 'Can_ID') </script> |
Маленькие латинские ABCDEF всё равно воспринимает, но подумав я понял что и так хорошо. СПАСИБО
Кстати тестил на старом айфоне, там скрипт не работает(( подскажите как указать атрибут download через JS <a id="LastLog1"></a> <script> var LastLog_r = "3"; LastLog1.href = "logs/lam"+(LastLog_r-2)+".log"; LastLog1.textContent = "lam"+(LastLog_r-2)+".log"; //LastLog1.setAttribute('download','download'); </script> Чтобы по нажатию происходило скачивание |
Цитата:
<a id="lastLog">download</a><script> lastLog.href = URL.createObjectURL(new Blob(["ваши данные для скачивания"], { type: "text/plain" })); lastLog.download = "lam.log"; </script> UPD Вот ещё вариант поля для ввода HEX с границами диапазона, динамически меняющимися от выбора <select> <style> html { font: 120% monospace } select, input { font: inherit } .invalid { color: red } </style> Есть вот такой select <select name="CanFrame_Type" id="CanFrame_Type"> <option value="0-7FF">Std</option> <option value="800-FFFFFFFF">Ext</option> </select> и поле для ввода НЕХ <input id="Can_ID" name="Can_ID" class="max1"> <script> function HEX(...ids) { const [select, hex] = ids.map(id => document.getElementById(id)); function update() { const [valid, value] = select.value .split("-") .map(v => [parseInt(v, 16), v.length]) .reduce(([min], [max, maxLength]) => { const value = hex.value.replace(/[^\da-f]/gi, "").slice(0, maxLength); const number = parseInt(value, 16); return [ min <= number && number <= max, value ] }); hex.classList.toggle("invalid", !valid); hex.value = value; } addEventListener("input", ({ target }) => [select, hex].includes(target) && update()); update(); } new HEX("CanFrame_Type", "Can_ID"); </script> UPD2 Цитата:
UPD3 Цитата:
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script> |
Как исключить все символы кроме допустимых для HEX. Тут можно что угодно вводить !"№;sgфф?
|
Цитата:
|
Цитата:
файл открывается браузером, но не скачивается |
Конкретно ваш вариант не устанавливает атрибут download(он был закомментирован)
<a id="LastLog1"></a> <script> var LastLog_r = "3"; LastLog1.href = "logs/lam"+(LastLog_r-2)+".log"; LastLog1.textContent = "lam"+(LastLog_r-2)+".log"; LastLog1.setAttribute('download','download'); </script> |
Цитата:
|
Часовой пояс GMT +3, время: 10:38. |