За последние 24 часа нас посетили 17586 программистов и 1314 роботов. Сейчас ищут 1696 программистов ...

Определение количества строк в textarea

Тема в разделе "JavaScript и AJAX", создана пользователем White Wolf, 5 окт 2009.

  1. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Здравствуйте!
    Подскажите как посчитать количество строк в textarea? Шрифт будет один, это не принципиально для меня. Нужно чтоб учитывались перенос строки по нажатию enter и чтоб пустые строки не считались.
    Нашел вот такой код:
    [js]
    function textareaCurLineNum(obj)
    {
    var rowHeight = obj.clientHeight/obj.rows;
    var curHeight = obj.createTextRange().boundingHeight;

    return parseInt(curHeight/rowHeight)+(obj.value!=''?1:0);
    }
    [/js]
    автор говорит что если текстовое поле пусто, то функция вернет 0 (хотя курсор и мигает в первой строке), ибо строк реально нет;
    если вы нажали “Enter” и курсор переместился в новую строку, то это не значит что, появилась новая строка. Вот когда вы введете в этой строке что-то, то строка действительно появится, и будет учитываться при подсчете.
    Я не пойму как прикрутить этот код к событию onclick в форме, чтоб при нажатии кнопки сабмит мне было доступно количество строк textarea и я смог бы потом использовать это количество строк далее в php в цикле for. И еще такой вопрос: если приведенные код рабочий, то скажите, он кроссбраузерный?
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А зачем?

    Просто
    PHP:
    1. <?php
    2.  count(explode($textareaValue, '\n'));
    3. ?>
    4.  
    Не ?
     
  3. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    и что получится? А если пользователь не нажмет enter и строка заполнится вся? как вы написали напиши хоть сколько строк, они все засчитаются за одну, пока не попадется символ новой строки. это все же не то что я хотел. А в цикле мне нужно знать сколько строк заполнил пользователь чтоб потом совершать обработку этого количества строк.
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А как ты хочешь посчитать число строк, если пользователь вводил все в одну строку? :)
    Тебе одна строка и прийдет.

    Код (Text):
    1. $textValue = $_POST['textareaname']
    Более того, даже если пользователь будет жать ENTER тебе все равно придет все одной строкой :) Но с символом перевода каретки внутри.

    Можешь установить ширину textarea (Хотя в том же Chrome, она меняется мышкой!)
    И резать регуляркой preg_split().
     
  5. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Simpliest
    Судя по разделу человеку нужна реализация на JS ;-)

    алгоритм такой:
    1. получаешь в переменную содержимое поля
    2. считаешь в ней количество переносов строки
    3. количество строк = количество переносов строки +1
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Я вот смутно представляю как он будет считать строки, если я не буду жать ENTER а сплошным куском запишу 4кб текста в поле. На экране то это все будет в несколько строк :) Но физически...
     
  7. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Посчитать то можно, я же могу посчитать кол-во символов в строке. Правда вот с определелнием переносов строки сложнее. Я пытался делать как советовали
    PHP:
    1. <?php count(explode($textareaValue, '\n')); ?>
    Только символы переноса у меня не распознаются как буд то их вообще нет. У меня стоит wrap='soft' пробовал и hard и virtual. никакого толка. тоже не пойму почему
     
  8. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Simpliest
    так Вам нужна реализация на PHP или на Java-Script ???
     
  9. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Вообще конечно на php но если честно я ни нашел ни одного примера как посчитать количество строк на php и поэтому спрашиваю как сделать средствами javascript
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Алгоритм прост

    1. Сначала бьем строку по символам переноса строки '\n'.
    2. Бежим по получившемуся массиву и все строки больше N символов режем на несколько строк.

    P.S. наверняка это проще всего сделать регуляркой, но мне лень искать как :)
     
  11. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    White Wolf
    По быстрому на РНР набросал, разбирайся:

    PHP:
    1. <?php
    2.  
    3. // Исходная строка
    4. $something = "Hello\r\nmy lovely\r\nWorld\n\r\n\r\n\r\nEmpty";
    5.  
    6. // Произведение поиска
    7. if(preg_match_all('/^(.+?)$/m', $something, $lines)) {
    8.     printf("В области %u строк. ", sizeof($lines[1]));
    9. } else echo "Строк не найдено нифига";
    10.  
    11. ?>
     
  12. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Спасибо большое. теперь дело сдвинется с места.
     
  13. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Проверил я это выражение. оно не работает. А жаль. Пытался написать свое. тоже ничего хорошего не выходит.
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну само собой, я рабочее никогда не пишу, и уж тем более не проверяю, гыгыгыыы
     
  15. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Одна строка - две ошибки. Бухаем? :)
     
  16. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Не пью вообще :)

    Просто функции и порядок их аргументов в памяти не держу :)
     
  17. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Так какое же правильное регулярное выражение?
     
  18. White Wolf

    White Wolf Активный пользователь

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Пробовал так:
    PHP:
    1. preg_match_all('/^(.+?[^\n])$/m', $something, $lines)
    . Так тоже не работает. Считает строки если в них два и больше символа. А один, нет.[/php]