如果我使用jQuery,JavaScript事件是否正常工作?

如果我使用jQuery,JavaScript事件是否正常工作?,javascript,jquery,html5-canvas,dom-events,Javascript,Jquery,Html5 Canvas,Dom Events,我不熟悉使用jQuery创建应用程序,但我对Javascript非常熟悉。我想做的是使用Javascript getElementById在html5画布上绘制一幅图像。我的代码是: 包括jQuery和jQuery mobile: <link rel="stylesheet" type="text/css" href="lib/jquery.mobile-1.0b1.min.css" /> <script type="text/javascript" src="

我不熟悉使用jQuery创建应用程序,但我对Javascript非常熟悉。我想做的是使用Javascript getElementById在html5画布上绘制一幅图像。我的代码是:

包括jQuery和jQuery mobile:

    <link rel="stylesheet" type="text/css" href="lib/jquery.mobile-1.0b1.min.css" />
    <script type="text/javascript" src="lib/jquery-1.6.1.js"></script>  
    <script type="text/javascript" src="lib/jquery.mobile-1.0b1.min.js"></script> 

有问题的代码:

     <div data-role="content">
      <!--//TO DO canvas drawing-->
      <canvas id="draw_area" width="295px" height = "390px"></canvas>
      ...

      <script type="text/javascript">
      var canvas = getElementById("draw_area");
      var context = canvas.getContext('2d');
      var map = new Image();

      map.src = "./imgs/home_screen1.png";
      map.onload = function (){
          context.drawImage (map, 0, 0);
      };
 </script>

...
var canvas=getElementById(“绘图区域”);
var context=canvas.getContext('2d');
var map=新图像();
map.src=“./imgs/home\u screen1.png”;
map.onload=函数(){
context.drawImage(映射,0,0);
};
我还注意到我不能使用

<body onload = "aFunction();">

不是像“onclick”这样的任何其他Javascript事件

我做错什么了吗?

应该是:

var canvas = document.getElementById("draw_area");
<script type="text/javascript">
$(document).ready(function() {
  var canvas = getElementById("draw_area");
  var context = canvas.getContext('2d');
  var map = new Image();

  map.src = "./imgs/home_screen1.png";
  map.onload = function (){
    context.drawImage (map, 0, 0);
  };
});
</script>
您的脚本在加载后立即运行
getElementById
行,这将失败(由于缺少
文档。
),并阻止页面其余部分的脚本执行

向您展示脚本错误如何阻止后续行执行

如@swalk所说,一旦修复了,您应该封装该脚本,使其继续运行以保持整洁。

这应该是:

var canvas = document.getElementById("draw_area");
<script type="text/javascript">
$(document).ready(function() {
  var canvas = getElementById("draw_area");
  var context = canvas.getContext('2d');
  var map = new Image();

  map.src = "./imgs/home_screen1.png";
  map.onload = function (){
    context.drawImage (map, 0, 0);
  };
});
</script>
您的脚本在加载后立即运行
getElementById
行,这将失败(由于缺少
文档。
),并阻止页面其余部分的脚本执行

向您展示脚本错误如何阻止后续行执行


正如@swalk所说,一旦这个问题得到解决,您应该封装该脚本,使其继续运行,以保持整洁。

我怀疑这是因为您没有使用jQuery的dom就绪函数。任何操纵/访问DOM的JavaScript都应该在DOM就绪后完成。即使这不是问题所在,当人们不熟悉JavaScript或jQuery时,这也是一个常见的问题

大多数jQuery代码通常位于以下就绪函数中:

例如,您的代码应该是:

var canvas = document.getElementById("draw_area");
<script type="text/javascript">
$(document).ready(function() {
  var canvas = getElementById("draw_area");
  var context = canvas.getContext('2d');
  var map = new Image();

  map.src = "./imgs/home_screen1.png";
  map.onload = function (){
    context.drawImage (map, 0, 0);
  };
});
</script>

$(文档).ready(函数(){
var canvas=getElementById(“绘图区域”);
var context=canvas.getContext('2d');
var map=新图像();
map.src=“./imgs/home\u screen1.png”;
map.onload=函数(){
context.drawImage(映射,0,0);
};
});

我怀疑这是因为您没有使用jQuery的dom就绪函数。任何操纵/访问DOM的JavaScript都应该在DOM就绪后完成。即使这不是问题所在,当人们不熟悉JavaScript或jQuery时,这也是一个常见的问题

大多数jQuery代码通常位于以下就绪函数中:

例如,您的代码应该是:

var canvas = document.getElementById("draw_area");
<script type="text/javascript">
$(document).ready(function() {
  var canvas = getElementById("draw_area");
  var context = canvas.getContext('2d');
  var map = new Image();

  map.src = "./imgs/home_screen1.png";
  map.onload = function (){
    context.drawImage (map, 0, 0);
  };
});
</script>

$(文档).ready(函数(){
var canvas=getElementById(“绘图区域”);
var context=canvas.getContext('2d');
var map=新图像();
map.src=“./imgs/home\u screen1.png”;
map.onload=函数(){
context.drawImage(映射,0,0);
};
});

什么是
a函数()
?你用的是什么浏览器?那么“问题”到底是什么?也就是说,你预计会发生什么,实际发生了什么?您是否收到任何错误消息?@RobG:问题是有无效脚本阻止后续脚本的执行。错误应为Uncaught ReferenceError:getElementById未在控制台中定义。该脚本中的错误不一定会阻止其他脚本在其他脚本元素中运行,也不一定会阻止正文的onload处理程序运行。也许OP的加载功能取决于失败代码的结果,谁知道呢?@RobG:对不起,Rob,你说得对。
getElementById
问题将阻止该块中的其余脚本运行,但其本身无法解释为什么加载时不调用
affunction()
。什么是
affunction()
?你用的是什么浏览器?那么“问题”到底是什么?也就是说,你预计会发生什么,实际发生了什么?您是否收到任何错误消息?@RobG:问题是有无效脚本阻止后续脚本的执行。错误应为Uncaught ReferenceError:getElementById未在控制台中定义。该脚本中的错误不一定会阻止其他脚本在其他脚本元素中运行,也不一定会阻止正文的onload处理程序运行。也许OP的加载功能取决于失败代码的结果,谁知道呢?@RobG:对不起,Rob,你说得对。
getElementById
问题将阻止该块中的其余脚本运行,但其本身并不能解释为什么加载时不调用
affunction()
。@RobG:
getElementById()
文档
对象上的函数,在没有
文档的情况下使用它。
将不起作用,并将阻止后续脚本的执行。如果OP检查他们的错误控制台,他们将看到一些未捕获引用错误:getElementById未定义+1? ;)这将导致javascript重新开始工作。此外,从技术上讲,OP不需要将其代码包装在
document.ready
调用中,因为它所处理的元素已经加载。但这是正确的做法:)@Blair McMillan:你说得对,“需要”这个词太重了。我已经更新了我的答案。@Town-我读到“缺少文档”的意思是DOM不可用,而不是缺少标识符文档。科恩:非常感谢,这确实是我的问题。我没有意识到我需要使用
文档。
@RobG:
getElementById()
文档
对象上的一个函数,在没有
文档的情况下使用它。
将不起作用,并将阻止后续脚本的执行。如果OP检查他们的错误控制台,他们将看到一些未捕获引用错误:getElementById未定义+1? ;)这将导致javascript重新开始工作。此外,从技术上讲,OP不需要