За последние 24 часа нас посетили 18932 программиста и 1638 роботов. Сейчас ищут 844 программиста ...

Ajax отправка данных по нажатию на Enter из TEXTAREA

Тема в разделе "Прочие вопросы по PHP", создана пользователем nikitOScher, 11 мар 2012.

  1. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    Здравствуйте. Прошу помощи, заранее прошу не пинать в гугл и форумы по яваскриптам.
    Суть: есть чат на главной странице сайта (index.php), в который отправляю сообщения из TEXTAREA с помощью Ajax, есть причина не использовать INPUT. Но мне нужно максимально приблизить эту TEXTAREA к INPUT, т.е. отправлять данные в форму также по нажатию на ENTER, а не только по нажатию на кнопку. Приведу упрощенный код, чтобы не мешало ничего лишнего:
    Форма
    Код (PHP):
    1. <form action="shoutbox.php" method="post" id="shoutform" name="shoutform" onsubmit="return sendShout(this);">
    2. <textarea onkeydown="if (event.keyCode==13) { shoutform.submit(); }" name="shout" id="shout"></textarea>
    3. <input type="submit" value="Отправить">
    4. </form> 
    Ну и на всякий случай код функции sendShout()
    Код (Text):
    1. function sendShout(formObj) {
    2.     Shout = formObj.shout.value;
    3.     if (Shout.replace(/ /g, '') == '') {
    4.         alert('Вы должны вести сообщение!')
    5.         return false
    6.     }
    7.     sb_Clear();
    8.     var ajax = new tbdev_ajax();
    9.     ajax.onShow ('');
    10.     var varsString = "";
    11.     ajax.requestFile = "shoutbox.php";
    12.     ajax.setVar("do", "shout");
    13.     ajax.setVar("shout", escape(Shout));
    14.     ajax.method = 'GET';
    15.     ajax.element = 'shoutbox';
    16.     ajax.sendAJAX(varsString);
    17.     return false
    Если потребуется, то приведу часть кода обработчика shoutbox.php.
    Вообщем, проблема в том, что по нажатию на кнопку submit все нормально отправляется без перезагрузки страницы, а по нажатию на ENTER форма сабмитится странно, страница перезагружается, браузер направляет меня разглядвать shoutbox.php на весь экран, сообщение не добавляется, хотя у формы стоит onsubmit="return sendShout(this);".
    Что я делаю не так?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а почему у вас текстареа отправляется по ентеру? это элемент многострочного ввода. я захочу сделать перенос строки и опа - форма отправилась уже...
     
  3. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    в этом и суть, моя задача сделать textarea почти неотличимой от инпута, мне не нужно многострочного ввода
    p.s. если это так сильно напрягает, то могу перефразировать задачу как "отправка по ctrl+enter" ) уж добавить событие на нажатие двух кнопок я в состоянии... это так, если кому нужен многострочный ввод, но проблема у меня не в этом
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    если вы не хотите перезагрузки страницы - у формы должно быть return false
    в текстарее по вводу ентера вызывается отправка формы, а не обработчик из отправки формы sendShout()
     
  5. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    вот я этого начитался в гугле и сейчас... я, видимо, неверно понимаю Ваши слова. Можно ткнуть меня носом? В мой код написать что нужно.
    onkeydown="if (event.keyCode==13) { sendShout(); }" не работает, просто никаких эмоций. если пишу туда alert(), то работает
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    форму отправляете - обработчик работает, а ентер в текстарее - обработчик не работает?
     
  7. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    да, если сабмитить форму, то работает. если посредством скрипта sendShout, то не работает
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    сам сценарий sendShout срабатывает?
     
  9. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    нет. даже при пустом поле ввода не вылазиет алерта, что я должен ввести сообщение.
    если так <input type="submit" value="Отправить">, то срабатывает sendShout().
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    значит не срабатывает само событие на ввод 13, логично?
     
  11. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    логично. я это понял давно, только не понимаю почему
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    как пробовали отладить?
     
  13. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    я не знаю, что с этим еще можно сделать. просто гуглил и пробовал вызывать это событие разными скриптами и без скриптов, простыми путями и сложными. результат одинаков.
    сам скрипт трогать нет смысла, он же нормально работает при вызове другим методом
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    по идее нажатие кнопки срабатывает 100%
    может быть не срабатывает именно обработка "нажат ли энтер". кажется, копать надо в эту сторону.
     
  15. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    если я ставлю туда alert(), то он срабатывает по enter
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    консоль молчит?
     
  17. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    вообще пусто