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)

Я делаю что-то неправильно?


person Samantha    schedule 14.11.2014    source источник
comment
jsfiddle.net/Palestinian/huc1ubs6   -  person Omar    schedule 17.11.2014


Ответы (1)


вы регистрируете событие pageCreate в документе. Это приведет к вызову первой подпрограммы при создании первой страницы, а затем, в конечном счете, к вызову обеих подпрограмм при создании второй страницы.

Может быть, вы хотите попробовать сделать это:

$("#brokenPage).on("pagecreate", function(){})

Я обычно делаю $(document).on(... когда им соответствуют общие элементы DOM -

Также поставьте точку останова в каждом обратном вызове обработчика, чтобы убедиться в этом :)

Надеюсь, это хоть как-то помогло ;)

person Max Bumaye    schedule 17.11.2014