#javascript #jquery
#javascript #jquery
Вопрос:
У кого-нибудь есть подобный опыт? Я хотел бы загрузить внешний файл на текущую страницу с помощью функции .load(«…»). После загрузки, как я могу вызвать щелчок по изображению в <div id=»tab-3-list»>?
Сценарий
$("#tab-3-list img.coupon_list").on("click", function (e) {}
не работает. Если я вставлю содержимое list.html в текущем теле работает приведенный выше сценарий.
<html lang="en" class="ui-mobile">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css">
</head>
<section id="home" data-role="page">
<article data-role="content">
<div id="home-content"></div>
</article>
<!-- content -->
</section>
<!-- home -->
<script type="text/javascript">
$(document).ready(function() {
$("#home-content").load("list.html");
$("#tab-3-list img.coupon_list").on("click", function (e) {
e.preventDefault();
window.alert(this.id);
});
});
</script>
</body>
</html>
Внешний файл list.html
<div id="tab-3-list">
<div class="ui-grid-a">
<div class="ui-block-a">
<img id="c01" class="coupon_list" src="/images/coupon/c01.png">
</div>
</div>
<!-- /ui-grid-a -->
</div>
<!-- /tab-3-list -->
Ответ №1:
Попробуйте использовать event-delegation
в этом контексте, поскольку вы загружаете элементы DOM во время выполнения,
$("#home-content").on("click","#tab-3-list img.coupon_list",function (e) {
e.preventDefault();
alert(this.id);
});
Ответ №2:
попробуйте это..
<script type="text/javascript">
$(document).ready(function() {
$("#home-content").load("list.html", function(){
$("#tab-3-list img.coupon_list").on("click", function (e) {
e.preventDefault();
window.alert(this.id);
});
});
});
</script>
Комментарии:
1. да… но событие загрузки домашнего содержимого записывается в событие DOM ready.. так что определенно привязывается один раз к dom ready..
Ответ №3:
load
использует ajax и, следовательно, требуется некоторое время для загрузки данных с внешней страницы. Когда вы подключаетесь click
event
к img.coupon_list
, он даже не присутствует в DOM (на странице).
Попробуйте это,
$("#home-content").load("list.html", function () {
$("#tab-3-list img.coupon_list").on("click", function (e) {
e.preventDefault();
window.alert(this.id);
});
});
Это прикрепляется click
только тогда, когда данные из load
возвращаются и добавляются в DOM.
Комментарии:
1. А что, если в будущем OP изменил свой код, чтобы вызвать эту функцию загрузки, которая будет выполняться нажатием кнопки, чтобы сделать эту страницу динамической ..?
2. Это избыточно, что, если OP решит закрыть этот проект? : D. Мы всегда можем
off
click
использовать его перед использованиемon
. Тем не менее, ваш ответ совершенно верен 🙂 1 на это3. @Jashwant ха-ха … 🙂 В принципе, я хотел бы использовать / предложить постоянное / конкретное решение такого рода проблем. Вот почему я просто настаивал на том же для вас..
Ответ №4:
Используйте делегирование события — .on(), а для запуска события щелчка используйте .trigger()
$(document).ready(function() {
$("#home-content").load("list.html",
function(){
$('#tab-3-list img.coupon_list').trigger('click');
});
$("#home-content").on("click","#tab-3-list img.coupon_list", function (e) {
e.preventDefault();
window.alert(this.id);
});
});
Комментарии:
1. в качестве примечания вы должны стараться избегать использования
on
ondocument
. Это причинаlive
, по которой он устарел.2. Да, вы правы.
#home-content
относится к этому вопросу. Итак, чтобы получить его общий добавленный документ. Обновил мой ответ.
Ответ №5:
-just put event in live mode , it's work after reload :
<script type="text/javascript">
$(document).ready(function() {
$("#home-content").load("list.html");
$("#home-content").one("load",function(){
// everytime an image finishes loading
}).each(function () {
if (this.complete) {
// manually trigger load event in
// event of a cache pull
$(this).trigger("click");
}
});
$("#home-content #tab-3-list img.coupon_list").live("click", function (e) {
e.preventDefault();
window.alert(this.id);
});
}); </script>
Комментарии:
1. Пожалуйста, следуйте за новым
2. Я использую оба jquery-1.9.1.min.js и jquery.mobile-1.4.2.min.js но .live() не определено, в какой версии jquery и jquery.mobile требуется иметь функцию .live()?
3. Пожалуйста, используйте последнюю версию jquery с сайта.