Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2019, 17:44
Новичок на форуме
Отправить личное сообщение для golifox Посмотреть профиль Найти все сообщения от golifox
 
Регистрация: 17.06.2019
Сообщений: 7

Назначить кнопке обработчик на функцию
Задание: Создать веб-страницу для работы с текстом. Страница состоит из поля многострочного текстового ввода, флажков для выбора способа выделения (курсив, жирный, подчеркивание) и кнопки. После нажатия кнопки на страницу выводится введенный в поле текст, выделенный выбранным способом (например, жирным шрифтом). Ниже в таблице выводятся сведения о количестве цифр, символов, слов и предложений во введенном тексте. Словом считать набор символов, разделенный пробелами. Предложением считать набор символов с точкой на конце.

В JS я первый день, поэтому полазив по интернетам я кое что наклепал (т.к. есть опыт в плюсах), но не понимаю, почему кнопка не реагирует на обработчик. Т.е. если просто писать
onclick = alert("HELLO!")

все прекрасно сработает, а если функцию назначать, то фигушки. Что исправить, где копать?
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Обработка текста в web</title>
  <link href="styles.css" rel="stylesheet">
   <style>
   textarea { resize: none; }
  </style>
 </head>
 <body>
   
 
    <div class="content">
  <div class = "col">
        <div class = "block">
            <p>Введите текст</p>
            <textarea cols = "100" rows = "10" id="area1" name="text1" required placeholder="Введите текст для обработки, затем выберите стиль текста"> 
        </textarea> </div>
        
        <div class = "block">
        <p>Выберите параметры для нового текста:</p>
        <p><input type="radio" name="format" value = "bold"> <b>Жирный</b></p>
        <p><input type="radio" name="format" value = "italic"> <i>Наклонный</i></p>
        <p><input type="radio" name="format" value = "underline"> <ins>Подчеркнутый</ins></p>
        <p><button type "button" onclick = "foo()" value =  "Обработать текст"> Обработать текст</button> </p>      
        </div>
  </div>
  <div class = "col">
        <div class = "block">
            <p>Здесь появится обработанный текст</p>
            <textarea cols = "100" rows = "10" id="area2" name="text2" placeholder="Здесь появится обработанный текст"> </textarea></div>
        <div class = "block">
        <p>Количество слов в тексте: <textarea id="warea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Количество предложений в тексте: <textarea id="sarea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Количество символов в тексте: <textarea id="symarea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Количество цифeр в тексте: <textarea id="narea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Длина текста (в символах): <textarea id="larea" readonly rows = "1" cols = "5"></textarea></p>
        </div></div>
  </div>
 
   </body>
 </html>


<script type="text/javascript">
  
  function isLetter(c)  { //проверка символа на букву
	return c.toLowerCase() != c.toUpperCase();
  }
  
  function isPunc(c) { //проверка символа на конечный знак препинания
	return ((c==".")||(c=="!")||(c=="?");
  }
  
  function countWords(s){ //посчитать кол-во слов
    s = s.replace(/(^\s*)|(\s*$)/gi,"");
    s = s.replace(/[ ]{2,}/gi," ");
    s = s.replace(/\n /,"\n");
	return s.split(' ').length;
}
   
  function countSentences(s) { //посчитать кол-во предложений
	Matcher m = Pattern.compile("\\.\s*[A-ZА-Я]").matcher(s); 
	int count = 1;
	while(m.find()) count++; 
	return count;
  }
  
  function countNumbers(str){ //кол-во цифр
  	return str.length-str.replace(/\d/gm,'').length;
  }

  function prnt(area, str){
  for(int i = 0; i<str.length; i++){
	area.value+=str[i];
	}
  }
	
	function foo(){
		alert ("Hi im start!")
		var text1 = document.getElementById("area1").value;
		var numcount, wordcount, sentencecount, scount; //кол-во цифер, слов, предложений, символов
	
		numcount = countNumbers(text1); 
		wordcount = countWords(text1); 
		sentencecount = countSentences(text1); //предложения
	
		alert("В тексте "+wordcount " слов, "+sentencecount + " предложений и "+numcount+" цифер.")
	
	
	}
	
  </script>


Код:
* {
  box-sizing: border-box;
}

.content {
	position: relative;
	display: flex;
	flex-wrap: wrap;
	width: 100%;
	margin: 1 auto;
}

.col {
	position: relative;
}

.col:first-child {
  flex-basis: 50%;
}

.col:last-child {
  flex-basis: 50%;
}

.block {
	position: relative;
	padding: 3rem 3rem;
}

/*---*/

.col:first-child .block:nth-child(odd) {
	background: #eee;
}

.col:first-child .block:nth-child(even) {
	background: #ddd;
}

/*---*/

.col:last-child .block:nth-child(even) {
	background: #eee;
}

.col:last-child .block:nth-child(odd) {
	background: #ddd;
}

.section > div {
  display: inline-block;
}
Изображения:
Тип файла: jpg Снимок.jpg (6.4 Кб, 3 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2019, 18:11
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Запускаем программу, нажимаем F12 - Инструменты разработчика и смотрим в консоли ошибочки.
return ((c==".")||(c=="!")||(c=="?");
- неправильное количество скобок
Matcher m = Pattern.compile("\\.\s*[A-ZА-Я]").matcher(s);
   int count = 1;
   while(m.find()) count++;
- из какого языка? java и javascript - разные языки

for(int i = 0; i<str.length; i++){
- то же самое

alert("В тексте "+wordcount + " слов, "+sentencecount + " предложений и "+numcount+" цифер.")
- не хватает +
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2019, 18:24
Новичок на форуме
Отправить личное сообщение для golifox Посмотреть профиль Найти все сообщения от golifox
 
Регистрация: 17.06.2019
Сообщений: 7

Исправил ошибки, но все равно не работает
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2019, 18:34
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

golifox,
В консоли больше ошибок нет?
Что именно не работает? Не выдает никаких результатов подсчета?

Как теперь выглядит функция
function countSentences(s) { //посчитать кол-во предложений ?
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2019, 18:42
Новичок на форуме
Отправить личное сообщение для golifox Посмотреть профиль Найти все сообщения от golifox
 
Регистрация: 17.06.2019
Сообщений: 7

Ничего не выводит, подозреваю, что возможно нужно как то по другому объявить и вызвать скрипт (функцию). Читал, что есть разница foo() или foo. В моем случае нужно чтобы все выполнилось, а не возвращаемое значение - я это понимаю, но изменения в коде на результат не влияют

Функцию я переписал по-простому, считают кол-во знаков препинания, характерных для конца предложения (да, если будет ФИО через точки цикл ошибется, да, я знаю, но заморачиваться не нужно).

function isPunc(c) { //проверка символа на конечный знак препинания
	return ((c==".")||(c=="!")||(c=="?"));
  }

  function countSentences(s) { //посчитать кол-во предложений
    var count = 0;
	for (var i=0; i<s.length; i++){
		if (isPunc(s[i])) count++;
	}
	return count;
  }
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2019, 18:43
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Обработка текста в web</title>
     <style>
   textarea { resize: none; }
* {
  box-sizing: border-box;
}

.content {
	position: relative;
	display: flex;
	flex-wrap: wrap;
	width: 100%;
	margin: 1 auto;
}

.col {
	position: relative;
}

.col:first-child {
  flex-basis: 50%;
}

.col:last-child {
  flex-basis: 50%;
}

.block {
	position: relative;
	padding: 3rem 3rem;
}

/*---*/

.col:first-child .block:nth-child(odd) {
	background: #eee;
}

.col:first-child .block:nth-child(even) {
	background: #ddd;
}

/*---*/

.col:last-child .block:nth-child(even) {
	background: #eee;
}

.col:last-child .block:nth-child(odd) {
	background: #ddd;
}

.section > div {
  display: inline-block;
}
  </style>
 </head>
 <body>
   
 
    <div class="content">
  <div class = "col">
        <div class = "block">
            <p>Введите текст</p>
            <textarea cols = "100" rows = "10" id="area1" name="text1" required placeholder="Введите текст для обработки, затем выберите стиль текста"> 
        </textarea> </div>
        
        <div class = "block">
        <p>Выберите параметры для нового текста:</p>
        <p><input type="radio" name="format" value = "bold"> <b>Жирный</b></p>
        <p><input type="radio" name="format" value = "italic"> <i>Наклонный</i></p>
        <p><input type="radio" name="format" value = "underline"> <ins>Подчеркнутый</ins></p>
        <p><button type "button" onclick = "foo()" value =  "Обработать текст"> Обработать текст</button> </p>      
        </div>
  </div>
  <div class = "col">
        <div class = "block">
            <p>Здесь появится обработанный текст</p>
            <textarea cols = "100" rows = "10" id="area2" name="text2" placeholder="Здесь появится обработанный текст"> </textarea></div>
        <div class = "block">
        <p>Количество слов в тексте: <textarea id="warea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Количество предложений в тексте: <textarea id="sarea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Количество символов в тексте: <textarea id="symarea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Количество цифeр в тексте: <textarea id="narea" readonly rows = "1" cols = "5"></textarea></p>
        <p>Длина текста (в символах): <textarea id="larea" readonly rows = "1" cols = "5"></textarea></p>
        </div></div>
  </div>
 
   </body>
<script type="text/javascript">
  
  function isLetter(c)  { //проверка символа на букву
	return c.toLowerCase() != c.toUpperCase();
  }
  
  function isPunc(c) { //проверка символа на конечный знак препинания
	return (c==".")||(c=="!")||(c=="?");
  }
  
  function countWords(s){ //посчитать кол-во слов
    s = s.replace(/(^\s*)|(\s*$)/gi,"");
    s = s.replace(/[ ]{2,}/gi," ");
    s = s.replace(/\n /,"\n");
	return s.split(' ').length;
}
   
  function countSentences(s) { //посчитать кол-во предложений
    var count = 0;
	for (var i=0; i<s.length; i++){
		if (isPunc(s[i])) count++;
	}
	return count;
  }
  
  function countNumbers(str){ //кол-во цифр
  	return str.length-str.replace(/\d/gm,'').length;
  }

  function prnt(area, str){
  for(var i = 0; i<str.length; i++){
	area.value+=str[i];
	}
  }
	
	function foo(){
		alert ("Hi im start!")
		var text1 = document.getElementById("area1").value;
		var numcount, wordcount, sentencecount, scount; //кол-во цифер, слов, предложений, символов
	
		numcount = countNumbers(text1); 
		wordcount = countWords(text1); 
		sentencecount = countSentences(text1); //предложения
	
		alert("В тексте "+wordcount + " слов, "+sentencecount + " предложений и "+numcount+" цифер.")
	
	
	}
	
  </script>
 </html>

Последний раз редактировалось Dilettante_Pro, 17.06.2019 в 18:46.
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2019, 18:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от golifox
button type "button"
знак = пропущен
Ответить с цитированием
  #8 (permalink)  
Старый 17.06.2019, 18:51
Новичок на форуме
Отправить личное сообщение для golifox Посмотреть профиль Найти все сообщения от golifox
 
Регистрация: 17.06.2019
Сообщений: 7

А как это в окошечки выводить? Или так больше смысла оставить?
Ответить с цитированием
  #9 (permalink)  
Старый 17.06.2019, 18:57
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

golifox,
В окошечки выводить примерно так же, как и брать из них
<p>Количество предложений в тексте: <textarea id="sarea" readonly rows = "1" cols = "5"></textarea></p>
<script>
var sentencecount = 2;
document.getElementById("sarea").value = sentencecount;
</script>
Ответить с цитированием
  #10 (permalink)  
Старый 17.06.2019, 18:59
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от рони
Сообщение от golifox
button type "button"
знак = пропущен
И вообще type="button" - лишнее. Оно и так button
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить функцию один раз (убрать обработчик) k_DizeL Общие вопросы Javascript 9 16.10.2016 00:56
Как найти функцию обработчик? BraNikita Events/DOM/Window 1 11.10.2011 21:21
как назначить обработчик на элемент подгруженный аяксом Yurik AJAX и COMET 1 03.05.2011 14:11
Помогите вынести обработчик события в функцию. prowoke Events/DOM/Window 3 25.03.2011 00:55
Назначить на обработчик события метод обьекта Logo Общие вопросы Javascript 11 20.06.2009 23:40