Настройка транскрипта в форме, при нажатии на чекбокс, не отключается.
Здравсвуйте, есть вопрос. Нужно сделать транкрипцию в поле формы, автоматом меняются буквы с кирилицы на латиницу. При нажатии на чекбокс (отключить транскрипцию), отключаем, и обратно. Транслитерация работает, не разберусь как прописать чекбокс. Такой код:
<label for="trChek" id ="translit_no">Отменить транслитерацию</label> <input id="trChek" type="checkbox" onchange="checkboxTr()"> <input type="text" id="translit"> let input = document.getElementById('translit'); //Функция производящая транскрипцию, вызываем позже через чекбокс. // input.addEventListener('input', function() { // this.value = textTransform(this.value); // }); const trim = string => { //Удаляем пробел вначале строки и ненужные символы string = string.replace(/(^\s+)|'|"|<|>|\!|\||@|#|$|%|^|\^|\$|\\|\/|&|\*|\(\)|\|\/|;|\+|№|,|\?|:|{|}|\[|\]/g, ""); return string; }; const textTransform = text => { let arrru = [ 'Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ', 'Ж','ж','А','а','Б','б','В','в','Г','г', 'Д','д','Е','е','Ё','ё','З','з','И','и', 'Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т', 'У','у','Ф','ф','Х','х','Ц','ц','Ы','ы', 'Ь','ь','Ъ','ъ','Э','э', ' ' ]; let arren = [ 'Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh', 'Zh','zh','A','a','B','b','V','v','G','g','D','d', 'E','e','YO','yo','Z','z','I','i','J','j','K','k', 'L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F ','f','H','h','C','c','Y','y','','','','','E', 'e', '' ]; for(let i=0; i<arrru.length; i++){ let reg = new RegExp(arrru[i], "g"); text = text.replace(reg, arren[i]); } return text = trim(text).toUpperCase(); }; // Проверка чекбокса на нажатие let checkbox; checkbox = document.getElementById('trChek'); function checkboxTr() { if (!checkbox.checked) { input.addEventListener('input', function() { this.value = textTransform(this.value); }); console.log('транслит включен'); } else { console.log('Транслит отменен'); } }; |
Dmitrij_Kh,
// Проверка чекбокса на нажатие let checkbox; checkbox = document.getElementById('trChek'); input.addEventListener('input', function() { checkbox.checked || (this.value = textTransform(this.value)); }); Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Dmitrij_Kh, вы не сможете в данном случае транслитерированный текст восстановить обратно, поскольку у вас: 1) происходит удаление символов, 2) некоторые транслитерированные символы имеют одинаковое значение. Вам лучше смотреть на эту проблему так — есть текст-источник, и есть преобразованный текст.
<form onsubmit="return false;" oninput="_translate(this);"> <input type="text" name="text" /> <label> <input name="transliterate" type="checkbox" checked /> Транслитерация </label> <output name="transliterated-text"></output> </form> <script> const purgeText = string => string.replace(/(^\s+)|'|"|<|>|\!|\||@|#|$|%|^|\^|\$|\\|\/|&|\*|\(\)|\|\/|;|\+|№|,|\?|:|{|}|\[|\]/g, ""); const textTransform = originalText => { let arrCyr = "Я,я,Ю,ю,Ч,ч,Ш,ш,Щ,щ,Ж,ж,А,а,Б,б,В,в,Г,г,Д,д,Е,е,Ё,ё,З,з,И,и,Й,й,К,к,Л,л,М,м,Н,н,О,о,П,п,Р,р,С,с,Т,т,У,у,Ф,ф,Х,х,Ц,ц,Ы,ы,Ь,ь,Ъ,ъ,Э,э, ".split(","); let arrLat = "Ya,ya,Yu,yu,Ch,ch,Sh,sh,Sh,sh,Zh,zh,A,a,B,b,V,v,G,g,D,d,E,e,YO,yo,Z,z,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,R,r,S,s,T,t,U,u,F ,f,H,h,C,c,Y,y,,,,,E,e,".split(","); let text = originalText; for (let i = 0; i < arrCyr.length; i++) text = text.replace(new RegExp(arrCyr[i], "g"), arrLat[i]); return purgeText(text).toUpperCase(); }; function _translate(form) { const text = form.elements.text.value; const sholdBeTransliterated = form.elements.transliterate.checked; const output = form.elements["transliterated-text"]; output.value = sholdBeTransliterated ? textTransform(text) : text; } </script> <style> form { display: grid; max-width: 30em; } form output { border-top: thin dashed #789; padding-top: 1em; margin-top: 1em; } </style> |
:thanks:
Спасибо, как раз то что нужно. Учту замечания, только зарегился на сайте, мало опыта. В дальнейшем буду исправляться). |
Спасибо за помощь
Спасибо, как раз то что нужно. Учту замечания и впредь буду внимательнее.
|
Часовой пояс GMT +3, время: 22:21. |