JQuery AutoSubmit при входе, запрос на улучшения - PullRequest
0 голосов
/ 23 ноября 2010

Только что сделал это при вводе-отправке скрипта формы jQuery. Перед тем, как начать флуд "Разве это уже не делает это?" - да, если у вас есть кнопка фактической отправки, она делает.

Но я использую <a> теги в виде кнопок для отправки формы. Если javascript не отключен, <noscript> покажет фактическую стандартную кнопку подтверждения.

Он должен обрабатывать функцию автозаполнения по умолчанию в браузерах, временно отключая автозаполнение при нажатии клавиш со стрелками вверх / вниз, что приведет к увеличению / уменьшению списка автозаполнения.

Если вы видите какие-либо предостережения или у вас есть идеи по улучшению, они будут высоко оценены.

Вот сценарий

// Submit form if focus on inputfields and enter is pressed
// To handle autocomplete, we disable next enter if arrow up/down pressed and autocomplete is not turned off 
$('form input:text, form input:password').keyup(function(e){
  var arrowKeys = new Array(38, 40);
  var key = e.charCode || e.keyCode || 0;
  if(key == 13){
      if($(this).data('entersubmit')) {
          e.preventDefault(); 
          $(this).closest('form').submit();
          return false;
      }
      $(this).data('entersubmit', true);
  } else if($.inArray(key, arrowKeys) > -1) {
      if($(this).attr('autocomplete') != 'off') {
          $(this).data('entersubmit', false);
      }
  }
})
.blur(function(){
    $(this).data('entersubmit', true);
}) 
.focus(function(){
    $(this).data('entersubmit', true);
});

1 Ответ

0 голосов
/ 23 ноября 2010

Я бы сократил его, используя .bind() и карту объектов, $.data() для удаления ненужных объектов jQuery и event.which, что уже нормализован и более короткий синтаксис массива, например:

$('form input:text, form input:password').bind({
  keyup: function(e){
    var arrowKeys = [38, 40];
    if(e.which == 13){
        if($.data(this, 'entersubmit')) {
            $(this).closest('form').submit();
            return false;
        }
        $.data(this, 'entersubmit', true);
    } else if($.inArray(key, arrowKeys) > -1) {
        if($(this).attr('autocomplete') != 'off') {
            $.data(this, 'entersubmit', false);
        }
    }
  },
  blur: function() {
    $.data(this, 'entersubmit', true);
  },
  focus: function(){
    $.data(this, 'entersubmit', true);
  }
});

Также обратите внимание, что вам не нужны оба .preventDefault() и return false, перенастройка false вызывает оба .preventDefault() и .stopPropagation().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...