Форма входа в систему JavaScript не отправляет, когда пользователь совершает нападки, Входят

Привет, вы можете заменить свой код на этот, я думаю, что событие key-down выполняется дважды, поэтому вы получаете эту проблему.

enteredWord.addEventListener('keydown', function(e) {        
     if( (e.keyCode ==13) && (enteredWord.value === currentSound)){
          e.stopImmediatePropagation();         
          counter.textContent ++;
      }
  })
11
задан Robert Harvey 3 June 2012 в 20:02
поделиться

6 ответов

Существует несколько тем, обсуждаемых сразу здесь. Давайте попытаемся разъясниться.

1. Ваше непосредственное беспокойство:

(Почему входная кнопка не будет работать, когда ВОЙДУТ, нажимается?)

Используйте тип кнопки отправки.

<input type="submit".../> 

.. вместо

<input type="button".../>

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

В HTML и XHTML, существуют поведения по умолчанию для определенных элементов. Входные кнопки на формах часто имеют тип, "отправляют". В большинстве браузеров "отправьте" огонь кнопок по умолчанию, когда ВХОДЯТ, нажимается от сфокусированного элемента в том же элементе формы. Входной тип "кнопки" не делает. Если требуется использовать в своих интересах то поведение по умолчанию, можно изменить входной тип для "отправления".

Например:

<form action="/post.php" method="post">
    <!-- 
    ...
    -->
    <input type="submit" value="go"/>
</form>

2. Проблемы безопасности:

@Ady упомянул проблему безопасности. Существует целый блок проблем безопасности, связанных с выполнением входа в систему в JavaScript. Это, вероятно, за пределами домена этого вопроса, тем более, что Вы указали, что особенно не волнуетесь по поводу этого, и то, что Ваш метод входа в систему на самом деле просто устанавливал location.href на новую страницу HTML (указание, что Вы, вероятно, не имеете в распоряжении реального механизма защиты).

Вместо того, чтобы тянуть лямку, что, вот ссылки на связанные темы на Так, если кто-либо интересуется теми вопросами непосредственно.

3. Другие проблемы:

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

Главным заметить является удаление атрибутов события (onclick = "", onsubmit = "", или onkeypress = "") от HTML. Они принадлежат JavaScript, и он полагал, что лучшая практика не допускает события JavaScript в разметку.

<form action="#" method="post" id="loginwindow">
    <h3>Login to view!</h3>
    <label>User ID: <input type="text" id="userid"></label>
    <label>Password: <input type="password" id="pass"></label>
    <input type="submit" value="Check In" />
</form>

<script type="text/javascript">
window.onload = function () {
    var loginForm = document.getElementById('loginwindow');
    if ( loginwindow ) {
        loginwindow.onsubmit = function () {

            var userid = document.getElementById('userid');
            var pass = document.getElementById('pass');

            // Make sure javascript found the nodes:
            if (!userid || !pass ) {
                return false;
            }

            // Actually check values, however you'd like this to be done:
            if (pass.value !== "secret")  {
                location.href = 'failure.html';
            }

            location.href = 'album.html';
            return false;
        };
    }
};
</script>
30
ответ дан 3 December 2019 в 02:21
поделиться

это - потому что это не представление формы, таким образом, нет никакого события, которое будет инициировано, когда пользователь нажимает Enter. Альтернатива вышеупомянутой форме утверждает, что опции состояли бы в том, чтобы добавить слушателя события для входной формы, чтобы обнаружить, если бы пользователь нажал Enter.

<input type="password" name="text1" onkeypress="detectKey(event)">
1
ответ дан 3 December 2019 в 02:21
поделиться

Вместо <входной тип = "кнопка">, используйте <входной тип = "отправляет">. Можно поместить код доступа в форму onsubmit обработчик:

<идентификатор формы = "loginwindow" onsubmit = "проверяют (...)">

1
ответ дан 3 December 2019 в 02:21
поделиться

Возможно, можно попробовать это:

<form id="loginwindow" onsubmit='validate(text2.value,"username",text1.value,"password")'>
<strong>Login to view!</strong>
<p><strong>User ID:</strong>
   <input type="text" name="text2">
</p>
<p><strong>Password:</strong>
<input type="password" name="text1"><br>
   <input type="submit" value="Check In"/>
</p>

</form>

Как другие указали, существуют другие проблемы с Вашим решением. Но это должно ответить на Ваш вопрос.

0
ответ дан 3 December 2019 в 02:21
поделиться

Конечно, это слишком небезопасно, поскольку все могут взломать его через секунду...

- только псевдобезопасным способом сделать js-логины является подобное:

<form action="http://www.mySite.com/" method="post" onsubmit="this.action+=this.theName.value+this.thePassword.value;">
  Name: <input type="text" name="theName"><br>
  Password: <input type="password" name="thePassword"><br>
  <input type="submit" value="Login now">
</form>
0
ответ дан 3 December 2019 в 02:21
поделиться

Моя Мысль = Крупная дыра в системе безопасности. Любой может просмотреть имя пользователя и пароль.

Более относящийся к Вашему вопросу: - у Вас есть два случая событий.

  1. Пользователь нажимает кнопку.
  2. Пользователь нажимает Enter.

Клавиша Enter отправляет форму, но не нажимает кнопку.

Путем размещения кода в onsubmit метод формы будет работать код, когда форма будет отправлена. Путем изменения входного типа кнопки для представления кнопка отправит форму таким же образом, которую делает ввести кнопка.

Ваш код будет затем работать за обоими событиями.

0
ответ дан 3 December 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: