Ваш второй пример, использующий функцию ready
, должен работать.Ваш первый пример также должен работать при условии, что вы включили скрипт ниже элемента с идентификатором «test» (элемент должен уже существовать, когда ваш скрипт выполняется, так как вы не ожидаете готовности DOM).В обоих случаях ваш скрипт должен быть включен ниже (после) скрипта jQuery.
Пример, когда вы не используете ready
Пример, когда вы делаете используете ready
Я бы проверил, что ваш внешний файл действительно загружается (ищите 404 ошибкив консоли браузера).
Обновление : из вашего комментария ниже, проблема в том, что элемент "test" не существует, когда вы пытаетесь подключитьобработчик.click
устанавливает обработчик для элемента, только если он уже существует.Если вы создаете элемент позже, у вас есть три варианта (два из которых действительно одинаковы):
- Используйте уже имеющийся код, но запустите его после создания элемента (например, в обратном вызове
success
вызова ajax , который вы делаете). - Используйте
live
, который в основном перехватывает документ события click
и проверяет, был ли выбран элемент, о котором вы говорите (в данном случае "#test"). - Используйте
delegate
в соответствующем контейнере (элемент внутрикоторый вы добавляете "тест").delegate
является более целевой версией live
.
live
и delegate
являются примерами техники, называемой делегированием события , которую jQuery упрощает дляпредоставив эти методы.
См. ссылки для получения дополнительной информации и примеров, но, например, предположим, что вы собираетесь добавить элемент «test» к элементу с идентификатором «target».Вы бы использовали delegate
следующим образом:
$("#target").delegate("#test", "click", function() {
alert("Clicked");
});
Это перехватывает событие click
на "цели", но действует так же, как вы его просто волшебным образом зацепили«тест», как только «тест» был добавлен.В вашем обработчике this
относится к элементу «test» так же, как с click
.