jQuery自动提交输入,请求改进

时间:2010-11-23 12:37:32

标签: jquery user-interface webforms

刚刚输入 - 提交表单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 :(得分:0)

我会使用.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()