2

次のコード スニペットがあります。

$('#messages input').live('keydown', function(e){
  if(e.keyCode == 13) {
    alert($(this).attr('value'));
    e.preventDefault();
    return false;
  }
});

ここで、「#message input」は明らかに入力テキスト要素のグループです。「Enter」キーをキャッチして、ページが更新されないようにしたい。ただし、毎回失敗します。アラートは正常に機能しますが、preventDefault() が機能していないようです。

誰にもアイデアはありますか?

編集:私は ASP.NET で作業していて、それはフォーム要素の中にあると言いました。フォーム要素から削除すると問題は解決しますが、 preventDefault() が機能しない理由を知りたいです。

4

5 に答える 5

1

皮肉なことに、問題を引き起こしたのはアラート自体でした。

AFAICT、アラートはpreventDefault()が有効になる前にJavaScriptの実行を停止しますが、ブラウザーはキーストロークの処理を続行し、フォームの送信をトリガーします。

奇妙ですが、あなたはそれを持っています。

于 2010-10-08T12:45:50.437 に答える
1
$('#form_deal_step1').live('submit',function(){
        $('.column .column_child select').not(':hidden').each(function(ev){
             if($(this).val()=='?')
             {
                 alert('Please select the ages of each child.');
                 ev.preventDefault();
                 return false;
             }
          });
})
var age_selected=1;
$('.column .column_child select').not(':hidden').each(function(){
    if($(this).val()=='?')
    {                
        age_selected=0; 
    }
});
if(age_selected==0)
{
    alert('Please select the ages of each child.');
    return false;
}
于 2011-12-28T10:25:16.283 に答える
1

試してみるかもしれません

e.stopPropagation()
于 2010-10-07T21:21:04.040 に答える
0

keypressフォームはではなく で提出されると思いますkeydown。試す

$('#messages input').live('keypress', function(e){
  if(e.keyCode == 13) {
    alert($(this).attr('value'));
    e.preventDefault();
    return false;
  }
});
于 2010-10-07T21:38:37.853 に答える
-1

私が知る限り、ページの更新は入力ボタンではなくフォームのデフォルト機能であるため、入力ではなくフォームのデフォルトを防止する必要があります。

次のようなもの:

$('#target').submit(function() {
  return false;
});
于 2010-10-07T21:23:03.600 に答える