0

私はJavascriptとJQueryに非常に慣れていません。

MacOSX 10.8、Safari バージョン 6.0.3 (8536.28.10)

フォームを含む非常に単純な HTML ページがあります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" href="wufooTheme8/css/theme.css" type="text/css" />
    <title>
        Course Search
    </title>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="http://yandex.st/json2/2011-10-19/json2.min.js"></script>
    <script type="text/javascript" src="application2.js"></script>
</head>
<body>
    <form method="post" id="class-find">
        <label>Class Name</label> <input type="text" name="classname" value=""/> 
        <input type="button" value="Go" onclick="classFind(this.form)" />
    </form>     
</body>

私のapplication2.jsファイルには、2つの呼び出し/関数があります:

$('form').bind("keydown", function(e) {
  var code = e.keyCode || e.which;
  if (code  == 13) {
    e.preventDefault();
    return false;
  }
});

function classFind(frm) {
  alert('submitted!');
}

1つ目は、Enterキーがフォームをデフォルトのアクションに送信するのを止めることになっています.SOの別の回答から取得しましたが、機能していません。2 番目の関数は、送信ボタンが押されたときにアラートを表示するだけで、機能しています。JavaScriptスコープの問題か、私がよく知らない何かがあると確信していますが、私はそれを理解できないほど初心者です。

4

3 に答える 3

3

準備ができたドキュメントでコードをラップしてみてください。DOMが要素を作成する前にバインドしようとしている可能性があります(つまり、タグがまだ存在し$('form')ないため、空のjQueryオブジェクトを返します)。form

$(function() {
    $('form').bind("keyup", function(e) {
      var code = e.keyCode || e.which;
      if (code  == 13) {
        e.preventDefault();
        return false;
      }
    });
});
于 2013-03-07T16:25:17.720 に答える
3

これが以前に実行されるように、コードを からkeyupに変更してみてください。keydown

$('form').bind("keydown", function(e) {
  var code = e.keyCode || e.which;
  if (code  == 13) {
    e.preventDefault();
    return false;
  }
});
于 2013-03-07T16:22:24.763 に答える
2

コードが $(document).ready にあることを確認し、keydown に変更するという上記の回答に同意します。それらのどれも機能していないように見えるので。Enter キーを押す前に、フォームにフォーカスがあることを確認していますか? ページを読み込んでEnterキーを押すと、イベントハンドラーをフォームにバインドしているため、キーアップ/キーダウンハンドラーは起動しません。入力フィールドをクリックしてから Enter キーを押し、キー ハンドラーが起動するかどうかを確認してください。

$(document).ready(function(){

$('form').bind("keydown", function(e) {
  var code = e.keyCode || e.which;
  if (code  == 13) {
    e.preventDefault();
      console.log('stop');
    return false;
  }
});

});

ここにフィドルがあります: http://jsfiddle.net/aCL2v/

于 2013-03-07T16:38:17.507 に答える