Javascript 为什么不触发jQuery事件?

Javascript 为什么不触发jQuery事件?,javascript,jquery,events,Javascript,Jquery,Events,我认为我做错了什么,但只有当选择器是document时,事件才会起作用。否则,就不会发生 HTML <html> <head> <!-- the libraries references here --> </head>

我认为我做错了什么,但只有当选择器是
document
时,事件才会起作用。否则,就不会发生

HTML

<html>                                                                  
   <head>
       <!-- the libraries references here -->
   </head>                                                                 
   <body>
       <div id="canvas"></div>      
   </body>                                                                 
</html>
如果我用div名称替换文档,如
$('#canvas')。单击(canvasClickEvent),则不会调用单击事件。仅当选择器为
document
时,它才起作用,但传递给函数的元素始终具有类似
未定义的属性


可能会发生什么?

似乎您将JavaScript代码放在html代码之前。因此,当JavaScript代码运行时,要处理的元素还没有加载到DOM中。(这就是为什么你得到了“未定义”)

只需将脚本放在相关HTML代码之后。或者将其放入pageLoad事件中:

$(function(){
    ....
})

发生的情况是,事件试图在DOM元素存在之前绑定事件

如果将事件包装在ready()方法中,则可以保证在事件尝试绑定之前域存在

$(document).ready( function ()  {
     $("#canvas").click(canvasClickEvent);
}

ready()方法依赖于browsers DOMContentLoaded事件,这基本上意味着DOM已在浏览器中完全加载,但不一定意味着页面上的所有媒体都已完全加载。加载所有媒体后,将触发onLoad browser事件

嗯-在这里工作正常:是否有任何东西进入
#canvas
或是空的?@muistooshort SVG将在其中绘制,但没有它就无法工作。有文本和没有文本,有CSS和没有CSS都不起作用。你的ID在页面上是唯一的吗?如果有两个ID是相同的,那么只有第一个ID的事件在这里也可以正常工作。
$(document).ready( function ()  {
     $("#canvas").click(canvasClickEvent);
}