Javascript: блокировка формы отправки при нажатии клавиши Enter - PullRequest
1 голос
/ 26 мая 2009

У меня есть веб-страница, где у меня есть 2 формы, когда я нажимаю клавишу ввода, я вызываю функцию javascript, чтобы заставить страницу загрузить другую страницу. Мой код

function SearchUser()
{
var text = document.getElementById("searchItem").value;
text = text == "" ? -1 : text;
var by = document.getElementById("listBy").value;   
var on="";
if(by==1)
{
    on="USERNAME";
}
else if(by==2)
{
    on="FIRSTNAME";
}
else if(by==3)
{
    on="EMAIL_ID";
}

gotoUrl="userlist.php?searchItem="+text+"&onSearch="+on; 
    alert(gotoUrl); 
window.navigate=gotoUrl;

}

и

$(document).ready(function()
{
 $("#frmUserListSearch").keyup(function(event)
 {
  if(event.keyCode == 13)
  { 
    SearchUser();
  }
 });

});

Но страница выполняет отправку формы при вызове функции SearchUSer. Я получаю правильный URL в оповещении. Но страница не загружается в браузере

Любые идеи ???

Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 26 мая 2009
if (document.addEventListener) {
    document.getElementById('strip').addEventListener('keypress',HandleKeyPress,false);
} else {
    document.getElementById('strip').onkeypress = HandleKeyPress;
}

function HandleKeyPress(e) {
    switch (e.keyCode) {
        case e.DOM_VK_ENTER:
        if (e.preventDefault)
            e.preventDefault();
    else e.returnValue = false;
    }
}

РЕДАКТИРОВАТЬ в связи с оригинальным редактированием вопроса:

все что вам нужно это:

$(document).ready(function()
{
    $("#frmUserListSearch").keyup(function(event)
        {
            if(event.keyCode == 13)
            {     
                SearchUser();
                if (e.preventDefault)
                    e.preventDefault();
                else e.returnValue = false;
            }
        });
});

отредактировано для отражения комментария

2 голосов
/ 26 мая 2009

У меня есть две рекомендации. Во-первых, используйте событие keydown вместо keyup (оно ловит «ввод» перед лучшей отправкой). Во-вторых, в вашей функции SearchUser () используйте window.location вместо window.navigate , чтобы перейти на другую страницу.

$(document).ready(function() {
  $("#frmUserListSearch").keydown(function(event) {
     if(event.keyCode == 13){    
       SearchUser();
       return false;
     }
  });
});

ПРИМЕЧАНИЕ: Не забудьте удалить «alert ()» внутри функции SearchUser (), так как она вызывает отправку формы перед переходом со страницы.

2 голосов
/ 26 мая 2009

Возвращение false часто делает свое дело.

http://javascript.about.com/library/bldisdef.htm

0 голосов
/ 21 февраля 2014

Вы можете сделать это, используя атрибут действия формы, без необходимости иметь дело с ключевыми событиями, при условии, что позже вам потребуется javascript для выполнения действий над элементом управления, который отправляет форму.

  <html>
     <head>
        <script type="text/javascript">
           function donothing() {}
        </script>
     <body>
        <form action='javascript:donothing()'>
           ...
        </form>
     </body>
  </html>
...