Javascript: Enter не работает для отправки пароля - PullRequest
3 голосов
/ 29 сентября 2010

Я не могу заставить работать следующий код: когда я нажимаю enter в текстовом поле, функция не вызывается.Хотя я не понимаю, почему ...

<form>
<p align="center">
<input type="password" class="password" name="text1" onkeypress="submitonenter(text1.value,"money","cash",event)" /><br>
<input type="button" value="Enter" style="width: 100px" name="Enter" onclick=javascript:validate(text1.value,"money","cash") />
</p>
</form>

<script type="text/javascript">
    function submitonenter(text1,text2,text3,evt) {
        evt = (evt) ? evt : ((window.event) ? window.event : "")
        if (evt) {
            // process event here
            if ( evt.keyCode==13 || evt.which==13 ) {

 if (text1==text2)
 load('money/welcome.html');
 else 
 {
  if (text1==text3)
  load('cash/welcome.html');
   else
   {
   load('failure.html');
   }
 }

            }
        }
    }
</script>

<script language = "javascript">
function validate(text1,text2,text3)
{
 if (text1==text2)
 load('money/welcome.html');
 else 
 {
  if (text1==text3)
  load('cash/welcome.html');
   else
   {
   load('failure.html');
   }
 }
}
function load(url)
{
 location.href=url;
}
</script>

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

Я не уверен, зачем вам вообще нужна функция submitOnEnter.

Почему бы просто не изменить значение type='button' на type='submit' и изменить ключевое слово onclick на onsubmit?

РЕДАКТИРОВАТЬ: Извинения, конечно, 'onsubmit' потребуетсябыть размещены в форме тегов, а не на входе.Давать следующее:

<form onsubmit=validate(text1.value,"money","cash") >
  <p align="center">
    <input type="password" class="password" name="text1" /><br>
    <input type="submit" value="Enter" style="width: 100px" name="Enter" />
  </p>
</form>
1 голос
/ 29 сентября 2010

Я бы переписал все это и использовал вместо ввода кнопку input type = "submit" (я также изменил доступ к полю пароля, чтобы иметь возможность использовать его в Firefox):

<form id="myForm" method="POST" action="failure.html" onsubmit="return validate(document.getElementById('text1').value,'money','cash');">
<p align="center">
<input type="password" class="password" name="text1" id="text1"/><br>
<input type="submit" value="Enter" style="width: 100px" name="Enter" />
</p>
</form>

<script language = "javascript">
    function validate(text1,text2,text3) {
         var form=document.getElementById('myForm');
         if (text1==text2)
            form.action='money/welcome.html';
         else {
          if (text1==text3)
            form.action='cash/welcome.html';
           else {
              form.action='failure.html';
           }
         }
         return true;
    }
</script>

Отредактировано: Реализация onSubmit в соответствии с рекомендациями @mway (спасибо).

0 голосов
/ 29 сентября 2010

После того, как вы подтвердите, что клавиша ввода была нажата, вы хотите вызвать evt.preventDefault (), чтобы предотвратить выполнение действия по умолчанию (то есть отправки формы).Я полагаю, что происходит то, что вы устанавливаете location.href, но затем форма отправляется до того, как эта загрузка произойдет, поэтому она перезагружает ту же страницу.

Другие упоминали обработку на стороне сервера и с точкипосмотреть это, вероятно, хорошая идея.В настоящее время эта страница не имеет никакой безопасности.Любой может взглянуть на ваш javascript и выбрать переход к одной из двух страниц приветствия (или странице сбоя), как если бы они правильно ввели пароль.Если это должно быть безопасно, то вы можете пойти и прочитать статьи о безопасности.В целом, хотя делайте проверку паролей и следуйте логике на сервере, и у вас нет паролей, которые легко угадать.:) Также вы можете включить проверку того, что на каждой странице указан правильный пароль (например, страницы приветствия).Это легко сделать, установив переменную сеанса после того, как вы подтвердите их пароль.

0 голосов
/ 29 сентября 2010

Как говорили другие - удалите событие onclick, замените кнопку на кнопку отправки и поместите оставшуюся часть кода в функцию, на которую ссылается тег onsubmit в форме, если вам нужно обработать / переформатировать данные перед отправкойэто.

...