Почему события jQuery не запускаются? - PullRequest
2 голосов
/ 08 октября 2011

Я думаю, что я делаю что-то не так, но события работают, только если селектор равен document.В противном случае это не произойдет.

HTML

<html>                                                                  
   <head>
       <!-- the libraries references here -->
   </head>                                                                 
   <body>
       <div id="canvas"></div>      
   </body>                                                                 
</html>

Javascript

/* Click on canvas */
canvasClickEvent = function(e){     
    if(e.shiftKey){
        selectedElement = $(this).attr("id");
    }
}

/* Events */
$(document).ready(documentLoadEvent);
$(document).click(canvasClickEvent); //this works, but is wrong
//$("#canvas").click(canvasClickEvent); --this is what I want, but not works
$(document).dblclick(canvasDblClickEvent);

Если заменить документ наимя div вроде $('#canvas').click(canvasClickEvent);, событие click не вызывается.Это работает, только если селектор document, но элемент, переданный функции, всегда имеет атрибуты типа undefined.

Что может происходить?

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

То, что происходит, - это то, что событие пытается связать событие до того, как элемент DOM существует.

Если вы оберните события внутри метода ready (), вы гарантируете, что домен существует до того, как ваше событие попытаетсяbind.

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

Метод ready () зависит от события DOMContentLoaded, которое в основном означает, что DOM полностью загружен в браузер, но не обязательно означает, что все мультимедийные данные на странице полностью загружены.Как только все медиа загружены, запускается событие браузера onLoad.

2 голосов
/ 08 октября 2011

Похоже, вы поместили свой код JavaScript ДО HTML-кода.Таким образом, когда выполняется код JavaScript, элементы, с которыми нужно работать, еще не загружены в DOM.(Вот почему вы получили "undefined")

Просто поместите ваш скрипт ПОСЛЕ соответствующего HTML-кода.Или поместите его в событие pageLoad:

$(function(){
    ....
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...