23.01.2020, 11:22
|
Новичок на форуме
|
|
Регистрация: 23.01.2020
Сообщений: 3
|
|
Настройка транскрипта в форме, при нажатии на чекбокс, не отключается.
Здравсвуйте, есть вопрос. Нужно сделать транкрипцию в поле формы, автоматом меняются буквы с кирилицы на латиницу. При нажатии на чекбокс (отключить транскрипцию), отключаем, и обратно. Транслитерация работает, не разберусь как прописать чекбокс. Такой код:
<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('Транслит отменен');
}
};
|
|
23.01.2020, 11:40
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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.
|
|
23.01.2020, 13:19
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
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>
Последний раз редактировалось Malleys, 23.01.2020 в 13:21.
|
|
24.01.2020, 22:52
|
Новичок на форуме
|
|
Регистрация: 23.01.2020
Сообщений: 3
|
|
Спасибо, как раз то что нужно. Учту замечания, только зарегился на сайте, мало опыта. В дальнейшем буду исправляться).
|
|
24.01.2020, 22:57
|
Новичок на форуме
|
|
Регистрация: 23.01.2020
Сообщений: 3
|
|
Спасибо за помощь
Спасибо, как раз то что нужно. Учту замечания и впредь буду внимательнее.
|
|
|
|