在外部Javascript中调用JQuery的范围问题?

时间:2013-03-07 16:20:10

标签: javascript jquery forms

我对Javascript和JQuery很新。

MacOSX 10.8,Safari Version 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!');
}

第一个应该是停止输入密钥从提交表单到默认操作,我从SO上的另一个答案中获取但是它不起作用。第二个功能只是在按下提交按钮时显示警告,并且它正在工作。我确定有一些javascript范围问题或我不熟悉的东西,但我是一个无法解决它的菜鸟。

3 个答案:

答案 0 :(得分:3)

尝试将代码从keyup更改为keydown,因为之前执行过。

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

答案 1 :(得分:3)

尝试将文档中的代码包装好。你可能在DOM创建元素之前尝试绑定(即$('form')返回一个空的jQuery对象,因为还没有form标记存在):

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

答案 2 :(得分:2)

我同意上面的答案,确保您的代码在$(文档).ready中并更改为keydown。因为这些似乎都不起作用。在您按Enter键之前,您是否确保表单具有焦点?如果您只是加载页面并按Enter键,您的keyup / keydown处理程序将不会触发,因为您将事件处理程序绑定到表单。尝试单击输入字段,然后按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/