jquery мобильные всплывающие окна
Когда у вас есть две страницы с всплывающими окнами, все кажется странным.
Я создал этот простой пример, чтобы продемонстрировать то, что я вижу
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.css">
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js"></script>
<script src="libs/jquery.mobile.paramsHandler-1.4.2.js"></script>
<script src="clickdemo.js"></script>
<style>
.thumbnail
{
float: left;
width: 80px;
border: 1px solid #999;
margin: 0 15px 15px 0;
padding: 5px;
text-align:center;
}
.thumbnail img
{
width: 80px;
height: 80px;
}
</style>
</head>
<body>
<div data-role="page" id="Home">
<div data-role="main" class="ui-content">
<a href="#workingPage" class="ui-btn">Working Page</a>
<a href="#brokenPage" class="ui-btn">Broken Page</a>
</div>
</div>
<div data-role="page" id="workingPage">
<div data-role="popup" id="workingImagePopup" data-overlay-theme="b" data-theme="b" data-corners="false">
<a href="#" data-rel="back" class="ui-btn ui-corner-all ui-shadow ui-btn-a ui-icon-delete ui-btn-icon-notext ui-btn-right">Close</a>
<img id="WorkingPopUpPhoto" class="PopPhoto" src="" alt="">
</div>
<div data-role="main" class="ui-content">
<div class="thumbcontainer">
<div class="thumbnail">
<img src="http://www.funnypica.com/wp-content/uploads/2012/05/Funny-UglyMan.jpg" alt="" ><br>
</div>
<div class="thumbnail">
<img src="http://www.funnypica.com/wp-content/uploads/2012/05/Crazy-Face-570x403.jpg" alt="" ><br>
</div>
</div>
</div>
</div>
<div data-role="page" id="brokenPage">
<div data-role="popup" id="brokenImagePopup" data-overlay-theme="b" data-theme="b" data-corners="false">
<a href="#" data-rel="back" class="ui-btn ui-corner-all ui-shadow ui-btn-a ui-icon-delete ui-btn-icon-notext ui-btn-right">Close</a>
<img id="brokenPopUpPhoto" class="PopPhoto" src="" alt="">
</div>
<div data-role="main" class="ui-content">
<div class="thumbcontainer">
<div class="thumbnail">
<img src="http://www.funnypica.com/wp-content/uploads/2012/05/Funny-UglyMan.jpg" alt="" ><br>
</div>
<div class="thumbnail">
<img src="http://www.funnypica.com/wp-content/uploads/2012/05/Crazy-Face-570x403.jpg" alt="" ><br>
</div>
</div>
</div>
</div>
</body>
</html>
и я поддерживаю этот код с этим JS
$(document).on("pagecreate", "#workingPage", function () {
$(".thumbnail img").click(function (e) {
alert("clicked");
var thumbnailPath = $(this).attr("src");
$('#WorkingPopUpPhoto').attr("src",thumbnailPath); //set the image source of the popup
$('#workingImagePopup').popup('open'); //open the popup
});
});
$(document).on("pagecreate", "#brokenPage", function () {
$(".thumbnail img").click(function (e) {
alert("clicked");
var thumbnailPath = $(this).attr("src");
$('#brokenPopUpPhoto').attr("src",thumbnailPath); //set the image source of the popup
$('#brokenImagePopup').popup('open'); //open the popup
});
});
Поскольку обе страницы очень похожи (вырезаны и вставлены только с измененным идентификатором), я ожидал, что они будут работать одинаково. Если вы нажмете на изображение, вы увидите предупреждение, а затем всплывающее изображение. Ожидается, что обе страницы будут одинаковыми. Нажмите на изображение, увидите предупреждение, а затем всплывающее окно.
Вот что я испытываю.
Я захожу на рабочую страницу (начинаю с дома и перехожу на "рабочую страницу"), все работает как положено. Нажатие на миниатюру вызывает предупреждение и всплывающее изображение.
Затем я снова нажимаю в браузере, который приводит меня на домашнюю страницу, я нажимаю "неработающая страница" (дубликат "рабочей страницы"), и поведение меняется. При нажатии на изображение сначала отображаются два предупреждения (ПОЧЕМУ?), А затем всплывающее изображение не отображается.
Я перезагружаю и изменяю порядок (то есть: начинаем с "сломанной страницы"), появляется тот же шаблон, сломанная страница работает, и рабочая страница теперь ломается (намекает, что это не разметка или JS)
Я делаю что-то неправильно?
1 ответ
Вы регистрируете событие pageCreate на документе. Это приведет к тому, что первая подпрограмма будет вызываться при создании первой страницы, а затем в конечном итоге к вызову обеих подпрограмм при создании второй страницы.
Может быть, вы хотите попробовать сделать это:
$("#brokenPage).on("pagecreate", function(){})
Я обычно делаю $(document).on(... когда я соответствую общим элементам DOM -
Также установите точку останова в каждом обратном вызове обработчика, чтобы проверить это:)
Я надеюсь, что это помогло в некотором роде;)