【问题标题】:jQuery autosubmit on enter, request for improvements输入时 jQuery 自动提交,请求改进
【发布时间】:2010-11-23 12:37:32
【问题描述】:

刚刚在输入表单 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);
});

【问题讨论】:

  • 我可能会省略 onFocus 或 onBlur

标签: jquery user-interface webforms


【解决方案1】:

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

【讨论】:

  • 我使用 e.which 开始,但不知何故箭头键返回为 0(零)!?
  • @Phliplip - 很奇怪,哪个浏览器?
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多