2

JQueryの有名で愛されているプラ​​グイン ajaxFormは、ajax によって送信されるフォームを変更します。

コールバック関数を含め、これが正しく機能するようになりました。私が壊れていると感じたのは、多くの場合、エンターを押す代わりにtab spaceコンビネーションを押すことです。これは、テキストエリアに入力する場合や、マウスに手を伸ばすよりも速いという理由だけで便利です。

私の実装では、送信ボタンのクリックは期待どおりに機能しますが、タブ、スペースを押すと何もしません。フォームが送信されず、ページが更新されません。

何が原因なのか、どのようにデバッグするのかわかりません。助けてください :)

ブラウザ情報:
Ubuntu 10.04
FireFox 3.6.18 は失敗します
google-chrome 12.0.742.112 は失敗します

Windows 7
Firefox 3.6.15 は失敗します
Chrome 12.0.742.112 は失敗します
Internet Explorer 9.0.8080.16413 - 期待どおりに動作します。

4

3 に答える 3

4

私が考えることができる2つの考えられる原因は次のとおりです。

  1. ボタンのスペースを押しても、「クリック」アクション/イベントはトリガーされません。
  2. 他のハンドラーがクリック イベントをインターセプトします。たとえば、同じフォームでajaxSubmitとの両方を使用しないように注意してください。ajaxForm

2 については、FF のプラグインであるFireQueryで視覚的に確認できます。

1 の場合、プラグインの実際のコード、つまりjquery.form.js. フォームに使用する方法によって異なります。の場合ajaxSubmitは、290 行目あたりにブレークポイントを設定します ( doSubmit)。if ajaxForm、589行目と594行目あたり。

エラーのデバッグに役立つことを願っています。

これが最初のケースであることがわかった場合は、ボタンのキープレス ハンドラーをアタッチし、ブラウザー間で同じ動作をシミュレートする必要がある場合があります。

$('#submitButton').keypress(function(event) {
  if (event.which == 32)  // space bar pressed
    $(this).click();
});
于 2011-07-18T21:28:49.280 に答える
1

独自のクリック ハンドラーを送信ボタンに追加し、テスト アラートを配置して、それが発生するかどうかを確認してください。

それが機能する場合は、フォームで自分で送信を呼び出すことができます。

于 2011-07-18T21:39:26.580 に答える
0

AFAIK、GTK+はスペースバーのクリックをトリガーしません。また、スペースバーは通常(ほとんどのブラウザで)ページスクロールに関連付けられているため、デフォルトではクリックがトリガーされない場合があります。

keypress1つの修正は、ドキュメントにをバインドし、手動でclickまたはフォームをトリガーすることsubmitです。

$(document).die('keypress.spacebar').live('keypress.spacebar', function() {
   // do nothing if not spacebar
   if(e.which != 32) { return; };

   var button = $('#mySubmitButton')[0];
   // check if submit button has focus. if not, return
   if(button !== document.activeElement) {
       return;
   }

   // else, go ahead and submit form
   $('#myform').submit();
   e.preventDefault();
});

フォーム上の他のkeypressイベントハンドラーとの競合を回避するために、名前空間イベントを使用していることに注意してください。

于 2011-07-19T03:56:19.393 に答える