Как получить клавишу Enter, нажимаемую на страницах, содержащих несколько форм?

Одним из возможных подходов является сохранение информации о том, имеет ли пользователь пароль, с использованием Shared Preference . Когда начинается действие, просто проверьте эту информацию и решите, какую страницу загрузить

16
задан user5664615 17 January 2018 в 17:08
поделиться

3 ответа

Если у вас есть две ограничивающие рамки (то есть прямоугольники) с некоторой произвольной ориентацией (что, я полагаю, означает некоторое «вращение») затем я сделал бы следующее:

  • Начиная с начальной позиции (где я предполагаю, что ограничивающие рамки не пересекаются), переведите каждый прямоугольник вперед на основе его скорости (однако вы применяете движения во времени).
  • Найдите координаты углов каждого переведенного ограничивающего прямоугольника. Эти 4 координаты определяют конечные точки 4 линейных сегментов, составляющих края ограничительной рамки.
  • Для ограничительной рамки № 1 проверьте наличие пересечения между каждым из ее линейных сегментов и 4 сегментами линии ограничительной рамки № 2. , Вы можете сделать это, используя стандартные уравнения для вычисления точки пересечения двух линий, как описано, например, в здесь . приложение не сможет определить (или, как мне сказали), который от формы к действию.

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

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

    Вы можете смоделировать это в коде, в форме:

     $( 'form' ).bind('keypress', function(e){
       if ( e.keyCode == 13 ) {
         $( this ).find( 'input[type=submit]:first' ).click();
       }
     });
    

    Или в окне (для демонстрации того, что примерно происходит):

     $( window ).bind('keypress', function(e){
       if ( $( e.originalTarget ).is( ':input' ) && e.keyCode == 13 ) {
         $(  e.originalTarget )
           .closest( 'form' )
             .find( 'input[type=submit]:first' )
               .click();
       }
     });
    

    Предполагая, конечно, что .preventDefault () не было вызвано для события.

    Итог: Если у вас есть событие, вы можете угадать от него, от какого элемента оно пришло и, следовательно, к какой форме оно принадлежит. Даже в этом случае:

    <input type="button" value="LOGIN" name="btnLoginOk" onclick="submit();">
    

    Здесь submit () является глобальной функцией, но когда она вызывается, ее контекст ( this ) будет элементом, и вы можете сделать submit (e) {this.form.submit (); } .

    Приложение разработано таким образом, что нет кнопок отправки (как при вводе type = "submit"), и, вместо этого, дизайнеры пошли на обработку по клику.

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

    Замените это:

    <form action="/login/" method="POST">
      [...]
      <input type="button" value="LOGIN" name="btnLoginOk" onclick="submit();">
    </form>
    

    На это:

    <form action="/login/" method="POST">
      [...]
      <input type="submit" value="LOGIN" name="btnLoginOk">
    </form>
    

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

    // for all forms that POST that have 2+ submit buttons
    $( 'form[method=post]:has(:submit:eq(1))' ).bind('keydown', function(e){
      // if target is an enter key, input element, and not a button
      if ( e.keyCode == 13 && e.target.tagName == 'INPUT' && 
           !/^(button|reset|submit)$/i.test( e.target.type ) ) {
        return false;  // kill event
      }
    });
    

    Или еще лучше: используйте библиотеку проверки формы (или jQuery). плагин), который знает, как сделать это для вас.

36
ответ дан 30 November 2019 в 16:01
поделиться

Скрестив пальцы, это сработает

$(document).ready(function() {
  var focussed_form;
  $('input').focus(focus_form);
  $('input').blur(unfocus_form);
  $('textarea').focus(focus_form);
  $('textarea').blur(unfocus_form);
  $('select').focus(focus_form);
  $('select').blur(unfocus_form);

  $(document).keypress(function(e) {
    if(e.keyCode == 13) 
    {
      $(focussed_form).trigger('submit'); 
    }
  });

  function focus_form(){
    focussed_form = $(this).closest('form');
  }

  function unfocus_form(){
    focussed_form = NULL;
  }

});
3
ответ дан 30 November 2019 в 16:01
поделиться

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

Вот код, который вы бы использовали:

<form action="http://foo.com/uri" method="POST">
  <input type="submit" name="action1a" value="add" />
  <input type="submit" name="action1b" value="delete" />
</form>
<form action="http://foo.com/uri" method="POST">
  <input type="submit" name="action2a" value="add" />
  <input type="submit" name="action2b" value="delete" />
  <input type="submit" name="action2c" value="someOtherAction" />
</form>

Затем для формы -при обработке скрипта, вы просто проверите имя кнопки отправки, например:

if (isset($_POST['action1a'])) ... // PHP syntax

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


Редактирование: Еще один способ - объединить значения POST и GET, а именно:
<form action="http://foo.com/uri?form=1" method="POST">
  <input type="submit" name="action" value="add" />
  <input type="submit" name="action" value="delete" />
</form>
<form action="http://foo.com/uri?form=2" method="POST">
  <input type="submit" name="action" value="add" />
  <input type="submit" name="action" value="delete" />
</form>
2
ответ дан 30 November 2019 в 16:01
поделиться
Другие вопросы по тегам:

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