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


Автор: Black 18.12.2004, 19:31
Проблема вот в чем.

Есть форма, в форме есть поле type=text при вводе данных в это поле, если нажать кнопку Enter, браузер отправит введенные данные на action формы.

Однако, мне надо, чтобы если пользователь нажимал Enter, то нажатие кнопки перехватывалось и я возвращал false, чтобы перезагрузка страницы не происходила, т.е. как будто-бы кпопка Enter и не была нажата...

Всё енто дело реализовал под IE, а вот как сделать, чтобы и Моззила не обновлял страницу, а тоже получал false в ответ на нажатие Enter??? или Моззила всегда обновляет страницу???

Код

<form name action=myscript.php>
<input type=text name="text" value="" onkeydown='E();'>
</form>

Автор: EXTR PROGRAMMER 18.12.2004, 19:39
Код

<script>
 function E()
{
   ///код
  return [b]false[/b];

}
</script>


Код

<input type=text name="text" value="" onkeydown='[b]return[/b] E();'>


Также есть еще стандартные перехватчики событий
Смотри мануал по методу объекта window.captureEvents(Event.KEYPRESS);

Автор: Black 18.12.2004, 19:51
к сожалению не все так просто в этой жизни, я то как и сделал а ничего не выходит все равно страница перезагружается, т.к. у меня в форме даже нет action то Mozilla Firefox перезагружает на ту же страницу....

может можно как-то перехватить отправку формы (каким нить событием) вообщем можно ли как-то добиться того, чтоб не было перезагрузки страницы

Автор: EXTR 18.12.2004, 20:48
window.captureEvents(Event.KEYPRESS); и перехватывает событие, а потом ты назначаешь с помощью функции обработчик

Автор: Black 18.12.2004, 21:39
Вот, что я сделал (к сожалению, при нажатии Enter форма отсылается и происходит перезагрузка страницы):

Код

<script language='JavaScript1.2'>
<!--
function E(e){

               var n = navigator.appName == 'Netscape' ? e.which : e.keyCode;
               if (n == 13)
               {
                // действия
               }
                else
               {
               // действия
               }
       }
//-->
</script>

<body>
<form name=eee>
<input type=text  name=\"text\" value=\"\" onKeydown=\"E(event); return false;\">
</form>


Напоминаю, что речь идет о браузерах на движке Mozilla, в IE все работает OK

Автор: Alx 18.12.2004, 21:56
а зачем слэши? и лучше не называть функуию одной буквой...
а return false надо просто поставить в тело функции...

Автор: Black 18.12.2004, 22:02
ALEXANDRO
слЭши... просто из PHP кода брал забыл убрать :-)
А почему одной не называть???

return false; - и в коде функции не помогает :-) все нормально только кнопка Enter выделывается

Автор: Alx 18.12.2004, 22:04
Цитата(PHP @ 18.12.2004, 22:02)
А почему одной не называть???

не знаю. так некрасиво smile

блин, я тогда даже не знаю в чём дело... моежт на onsubmit повестить?

Автор: Black 18.12.2004, 22:12
Блин уже день сижу с этой проблемой не могу решить, уже даже хочу просить пусть обновляет :-)

Просто это чат (фрейм, где набираются сообщения) и не хотелось бы часто обновлять этот фрейм.

Цитата
может на onsubmit повестить?


Я плохо еще разбираюсь в ЯваСкриптах, объясни как это сделать?? я так понимаю это обработчик отправки формы.

Автор: Alx 19.12.2004, 01:19
да, првильн понимаешь.
делаешь так -
Код

<form action="script.php" method="post" onsubmit="return false;">


а можешь поподробнее объяснить насчет чата? мне кажется ты не правильно поступаешь изначально! фрейм где ффод сообщения вообще не должен обновляться. Нужно ставить не сабмит, а передачу данных нульфрейму, где уже происходит запись в файл или базу...

Автор: EXTR PROGRAMMER 19.12.2004, 01:38
Код
<script language='JavaScript1.2'>
<!--
function E(e){

               var n = navigator.appName == 'Netscape' ? e.which : e.keyCode;
               if (n == 13)
               {
                // действия
               }
                else
               {
               // действия
               }
return false;
       }
//-->
</script>

<body>
<form name=eee>
<input type=text  name=\"text\" value=\"\" onKeydown=\"return E(event);\">
</form>


А может у тебя вообще Моззила не держит JS. Попробуй reuturn запихать как я сделал.

Автор: Sardar 19.12.2004, 03:44
EXTR PROGRAMMER ну ты и дров наломал smile


PHP-DIRECTOR всегда возвращай false по onSubmit, но если нужно действительно отправитьформу, например по кнопке, то перед этим поставь какой нибудь флаг. По onSubmit проверяешь флаг и допускаешь отправку.

Автор: Black 19.12.2004, 17:11
Цитата
<form action="script.php" method="post" onsubmit="return false;">

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

Автор: Aliance 21.12.2004, 18:26
Скрипт, работающий под W3C DOM:
Код

function blockEnter(evt) {
   evt = (evt) ? evt : ((window.event) ? event : null);
   var charCode = (evt.charCode) ? evt.charCode :
       ((evt.which) ? evt.which : evt.keyCode);
   if (charCode == 13) {
       return false;
   } else {
       return true;
   }
}
...
<input type="text" name="search" size="40" onkeydown="return blockEnter(event)" />

Автор: Sardar 21.12.2004, 20:45
Aliance а ты проверил? smile

Автор: Aliance 21.12.2004, 20:55
Sardar
Ну во всех браузерах не имею возможности, скорее по теории даю...

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