Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2020, 11:22
Новичок на форуме
Отправить личное сообщение для Dmitrij_Kh Посмотреть профиль Найти все сообщения от Dmitrij_Kh
 
Регистрация: 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('Транслит отменен');
}
};
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2020, 11:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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.
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2020, 13:19
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 24.01.2020, 22:52
Новичок на форуме
Отправить личное сообщение для Dmitrij_Kh Посмотреть профиль Найти все сообщения от Dmitrij_Kh
 
Регистрация: 23.01.2020
Сообщений: 3


Спасибо, как раз то что нужно. Учту замечания, только зарегился на сайте, мало опыта. В дальнейшем буду исправляться).
Ответить с цитированием
  #5 (permalink)  
Старый 24.01.2020, 22:57
Новичок на форуме
Отправить личное сообщение для Dmitrij_Kh Посмотреть профиль Найти все сообщения от Dmitrij_Kh
 
Регистрация: 23.01.2020
Сообщений: 3

Спасибо за помощь
Спасибо, как раз то что нужно. Учту замечания и впредь буду внимательнее.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена цвета в body при нажатии div id 3uk Элементы интерфейса 2 20.08.2017 11:27
Смена картинок при нажатии Antonjrjr Элементы интерфейса 0 29.05.2017 11:57
При нажатии на ник он появляется в форме ответа frolgp Элементы интерфейса 8 25.01.2016 17:52
Как пометить чекбокс при нажатии на кнопку? vasyakrn Элементы интерфейса 5 03.04.2015 12:10
SyntaxHighlighter подсветка при нажатии faraday Общие вопросы Javascript 3 31.03.2012 23:43