Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Валидация поля ввода


Автор: t77 2.9.2009, 11:22
Доброе время суток.
Имеется поле ввода текста TEXTAREA, под которым расположенна кнопка.
При нажатии на кнопку, проверяю содержимое поле ввода. Если оно пустое, сообщаю об этом пользователю и ничего не делаю. Иначе отсылаю текст на сервер. 
Так вот проблема при валидации поля на наличие содержимого. Если внутри поля, просто нажать клавишу ENTER, то такая валидация не срабатывает:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script language="javascript">
    function trim(str)
    {
        return str.replace(/^\s*|\s*$/g,"");
    }
    function sendFeedback()
    {
    debugger;
        if (trim(document.all.textarea_content.value) == "")
        {
            alert("Необходимо заполнить поле!");
            document.all.textarea_content.focus();
            return;
        }
        
        //Отправляем на сервер
    }
    </script>
</head>
<body>
    <center>
        <textarea id="textarea_content" cols="40" rows="10"></textarea>
        <br />
        <input type="button" value="submit" onclick="sendFeedback()"/>
    </center>
</body>
</html>


Почему, не срабатывает? Как отловить </BR> ?

Автор: Amphiluke 2.9.2009, 12:43
Хм. Либо я чего-то не понял, либо всё работает как надо... Хоть сколько Enter'ов поставь.
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8" />
   <title>Template</title>
   <script type="text/javascript">
      function trim(str) {
         return str.replace(/^\s*|\s*$/g,"");
      }
      function sendFeedback() {
         if (trim(document.getElementById("textarea_content").value) == "") {
            alert("Необходимо заполнить поле!");
            document.getElementById("textarea_content").focus();
            return false;
         }
         //Отправляем на сервер
         return true;
      }
   </script>
</head>
<body>
   <form action="#" onsubmit="return sendFeedback();">
        <textarea id="textarea_content" cols="40" rows="10"></textarea>
        <br />
        <input type="submit" value="submit" />
   </form>
</body>
</html>

Нет?

Автор: t77 2.9.2009, 12:55
У меня не работает...Может, потому что это не совсем реальный код.
На самом деле TEXTAREA вместе с кнопкой открываются в модальном окне.Может поэтому? 
Незнаю, что и сказать. Факт, что у меня не работает. При нажатии на ENTER, если продебагить, можно увидеть, что:
Код

document.all.feedback_content.value.length = 2


Это оно и есть, тоесть ENTER равен 10 и 13. 
Я никак не мог догнать как мне этот ENTER почистить.
Всетаки получилось! smile 
С каждым разом понимаю насколько мощная штука регулярные выражения!
Разобрался! 
Спасибо всем. 
Если кому интересно, привожу решения данной задачи:
Код

if (trim(document.all.textarea_content.value).replace(/\r\n/ig,'') == "")


Добавлено через 2 минуты и 18 секунд
document.all.feedback_content.value
это и есть
document.all.textarea_content.value

Автор: brother79 2.9.2009, 13:06
Цитата(t77 @  2.9.2009,  12:55 Найти цитируемый пост)
Если кому интересно, привожу решения данной задачи:
Выделить всёкод Javascript
1:
    
if (trim(document.all.textarea_content.value).replace(/\r\n/ig,'') == "")



Я бы тебе лучше предложил 

Код

if (trim(document.all.textarea_content.value).replace(/\r\n\s/ig,'') == "")


Так надёжней smile

Автор: t77 2.9.2009, 13:18
brother79 ,
Объясните пожалуйста свое решение. Чем оно надежнее предыдущего ?

Автор: t77 2.9.2009, 17:23
Что то я поспешил с выводами. 
Регулярное выражение, описанное выше не работает. 
Если я ввожу подряд пробелы + ENTER, в рандомальном порядке.Тоесть может быть несколько ENTER-ов затем пробелы или наоборот. То некоторые из них не очищаются!!!
Нужна регулярка, которая находит везде и повсюду все пробелы и ENTER-ы и удаляет их. 
Исходя из документации регексов, смотрю таблицу метасимволов:
Код

^ - Соответствует началу строки. 

$ - Соответствует концу строки. 

* - Соответствует повторению предыдущего символа нуль или более раз. 

+ - Соответствует повторению предыдущего символа один или более раз. 

? - Соответствует повторению предыдущего символа нуль или один раз. 

. - Соответствует любому символу, кроме символа новой строки. 


и пишу следующее:
Код

trim(document.all.textarea_content.value).replace(/*\r*\n*\s/ig,'')

Не работает smile 
Помогите please.

Автор: Amphiluke 2.9.2009, 18:04
Вот честное слово, во всех браузерах проверил, какие были
Код

      function trim(str) {
         return str.replace(/\s/g,"");
      }


Во всех случаях этого оказывается достаточно!

Автор: brother79 2.9.2009, 19:15
Поторопился я, сбил меня с толку первый вар-нт

Можно так:

Цитата(Amphiluke @  2.9.2009,  18:04 Найти цитируемый пост)
return str.replace(/\s/g,"");


А я хотел предложить 

if (s.match(/\S/)) 

в условие засунуть. 

или 

if (s.match(/[^\s]/)) 

истина когда строка не пустая

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)