2010-11-23 13 views
0

フォーム入力時にjQueryスクリプトを入力してください。あなたが洪水を開始する前に、 "これは一体どうすればいいの?" - 実際の送信ボタンがある場合はそうですjQuery autosubmit on enter、改善依頼

しかし、私は<a>のタグをフォームの送信ボタンとして使用しています。 javascriptが無効になっていない限り、<noscript>は実際の標準のsubmitbuttonを表示します。

矢印キーの上/下が押された場合に自動提出時に一時的に無効にすることで、ブラウザのデフォルトのオートコンプリート機能を処理する必要があります。これによりオートコンプリートリストが上下に移動します。

警告が表示されたり、改善のためのアイデアがある場合は、非常に感謝しています。

ここでスクリプト

// 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); 
}); 
+0

おそらくonFocusまたはonBlurを省略できます – Phliplip

答えて

0

は、私は不要なjQueryのオブジェクトを排除するために$.data().bind()とオブジェクトマップを使用してそれを短縮し、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()の両方を呼び出します。

+0

私はe.whichを使い始めましたが、何とか矢印キーが0(ゼロ)として返されました! – Phliplip

+0

@Phliplip - 非常に奇妙なブラウザですか? –