jQuery mobile: добавить диалог подтверждения к ссылкам? - PullRequest
0 голосов
/ 27 апреля 2011

Я хотел бы добавить «Вы уверены?» подтвердить диалог со ссылками на мобильной странице jQuery.

Вот мой код - он прямо из документации jQuery, за исключением ссылок с диалогами confirm на них.

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Page Title</title> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>
</head> 
<body> 

    <!-- Start of first page -->
    <div data-role="page" id="foo">
        <div data-role="header">
            <h1>Foo</h1>
        </div><!-- /header -->
        <div data-role="content">   
            <p>I'm first in the source order so I'm shown as the page.</p>      
            <p>View internal page called <a href="#bar">bar</a></p> 
        </div><!-- /content -->
        <div data-role="footer">
            <h4>Page Footer</h4>
        </div><!-- /header -->
    </div><!-- /page -->

<!-- Start of second page -->
<div data-role="page" id="bar">
    <div data-role="header">
            <a href='#' class='ui-btn-left' data-icon='arrow-l' onclick="return confirm('Leave page?'); history.back();">Back</a><h1 id="route-header">Bar</h1><a href="#foo" onclick="return confirm('Leave page?');" class="ui-btn-right" data-icon='home'>Home</a>
    </div><!-- /header -->
    <div data-role="content">   
        <p>I'm first in the source order so I'm shown as the page.</p>      
        <p><a href="#foo">Back to foo</a></p>   
    </div><!-- /content -->
    <div data-role="footer">
        <h4>Page Footer</h4>
    </div><!-- /header -->
</div><!-- /page -->

</body>
</html>

В настоящее время диалоги подтверждения не действуют: (

Кто-нибудь знает, как я могу добавить их с помощью мобильного телефона jQuery?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

Лучше, если вы присваиваете идентификаторы или классы своим кнопкам и привязываете к ним события в своей функции jQuery ready или везде, где вы динамически создаете свои формы (если вы это делаете).

Предполагая, что вы присвоите следующий атрибут id кнопкам назад и home и удалите встроенный атрибут onclick, добавьте его в тег script:

$(function(){
    $('#btnBack').click(function(){
        if(!confirm("Leave page?")) return false;
        history.back();
    });

    $('#btnFoo').click(function(event){
        return confirm("Leave page?");
    });
});

При нажатии кнопки «Назад» возвращается значение «ложь», только если пользователь отменил операцию. Если они нажали ok, вы действительно хотите выполнить history.back(), чтобы вернуться на предыдущую страницу.

В ссылке foo вы должны вернуть false, чтобы избежать автоматического перехода по гиперссылке.

Также обратите внимание, что функция подтверждения является синхронной, в отличие от большинства пользовательских взаимодействий, которые вы выполняете в javascript через DOM. Это означает, что при появлении диалогового окна выполнение вашего кода приостанавливается до тех пор, пока пользователь не нажмет кнопку, и функция не оценит результат этого нажатия. Это на самом деле то, что вам нужно в этой ситуации.

Редактировать: Удалено preventDefault() по предложению @ bazmegakapa.

3 голосов
/ 12 ноября 2012

Я столкнулся с той же проблемой и только что решил ее сейчас. Я надеюсь, что мой пример может помочь вам и другим, у кого возникла проблема с симулятором.


<a href="javascript:delComment();" data-role="button" data-icon="false" data-mini="true" data-inline="true" data-theme="b">Delete</a>



function delComment(commentSno) {

... 
// save 
var nextUrl = "/deleteComment.do";
$("#frm").attr("action", nextUrl);

showConfirm("Are you sure to delete?", function() {
    $("#frm").submit();
    }
);

}





<div data-role="dialog" id="confirmbox">
    <div data-role="header" data-icon="false">
        <h1>Confirmation</h1>
    </div><!-- /header -->

      <div data-role="content">
        <h3 id="confirmMsg">Confirmation Message</h3>

        <br><p>
        <center>
        <a href="#" class="btnConfirmYes" data-role="button" data-icon="check" data-mini="true" data-inline="true">&nbsp;&nbsp;&nbsp;Yes&nbsp;&nbsp;&nbsp; </a>
        &nbsp;&nbsp;&nbsp;
        <a href="#" class="btnConfirmNo" data-role="button" data-rel="back" data-icon="delete" data-mini="true" data-inline="true">No</a>
        </center>
      </div>

    function showConfirm(msg, callback) {
      $("#confirmMsg").text(msg);
      $("#confirmbox .btnConfirmYes").on("click.confirmbox", function() {
          $("#confirmbox").dialog("close");
          callback();
      });

      $("#confirmbox .btnConfirmNo").off("click.confirmbox", function(r) {
          });

      $.mobile.changePage("#confirmbox");

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