Возвращение значения из диалогового окна подтверждения с помощью диалогового окна JQuery UI - PullRequest
19 голосов
/ 25 августа 2010

Я использую jQuery UI диалог , чтобы отобразить диалоговое окно подтверждения при нажатии кнопки.Я хочу вернуть true, когда нажата OK и false в противном случае.

Связывание вызова открытия диалога в событии onClick (как указано здесь , $dialog.dialog('open');) неслужить цели.Итак, в качестве обходного пути я следовал подходу, который похож на этот: http://www.perfectline.co.uk/blog/unobtrusive-custom-confirmation-dialogs-with-jquery. Есть два различия между этим подходом и моим:

  1. В примере используется тег привязки и,
  2. Он не использует диалоговое окно jQuery UI.

Я изменил код, указанный в примере ссылки, но он не работает.Интересно, что я делаю не так?Есть ли более дешевый способ сделать это?

Вот код, все CSS / JS ссылаются на jQuery CDN, поэтому вы должны иметь возможность скопировать код, чтобы увидеть поведение.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

  <head>
    <link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/blitzer/jquery-ui.css" rel="stylesheet" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Control Panel</title>
  </head>

  <body>
    <form action="http://google.com">
      <button class="es-button ui-state-default ui-corner-all" name="changeSem" id="id2">Start Thermonuclear War</span>
      </button>
    </form>
    <div title="Why so serious?" id="id3" style="display:none;">
      <p>You are about to start a war.
        <p>Click OK to confirm. Click Cancel to cancel this action.</p>
    </div>
  </body>
  <script type="text/javascript">
    $('#id2').click(function (event) {

      if ($(this).data('propagationStopped')) {
        //alert('true');
        $(this).data('propagationStopped', false);
        return true;
      } else {

        event.stopImmediatePropagation();

        $('#id3').dialog({
          //autoOpen: false,
          width: 600,
          buttons: {
            "Ok": function () {
              $(this).dialog("close");
              $('#id2').data('propagationStopped', true);
              $('#id2').triggerHandler(event);
            },
            "Cancel": function () {
              $(this).dialog("close");
              return false;
            }
          }
        });
        //alert('false');
        return false;
      }
    });
  </script>

</html>

Пояснение:Обратите внимание, что заполнить форму очень просто (см. Решение от bryan.taylor ).То, что я хочу сделать здесь, это смоделировать отправку нажатием кнопки.Больше похоже на метод JavaScript Подтверждение () .

Ответы [ 2 ]

49 голосов
/ 06 апреля 2012

JavaScript асинхронный.Вызов

$myDialog.dialog('open'); 

не будет блокироваться, а скорее сразу же вернется.

Вместо этого необходимо использовать обратные вызовы событий, которые вы предоставляете в опции buttons диалогового окна .

Этот почти дубликат обеспечивает хороший пример:

диалоговое окно jquery ui должно возвращать значение, когда пользователь нажимает кнопку, но не работает

8 голосов
/ 25 августа 2010

Ваш код немного запутан, я думаю, что есть гораздо более простой способ сделать это. Сначала вы должны создать диалоговое окно, а затем открыть его по событию click для вашей кнопки. Код будет выглядеть примерно так:

<script>
$(document).ready(function () {
  var $myDialog = $('<div></div>')
    .html('You are about to start a war.<br/>Click OK to confirm.  Click Cancel to stop this action.')
    .dialog({
    autoOpen: false,
    title: 'Why so serious?',
    buttons: {
      "OK": function () {
        $(this).dialog("close");
        window.open('http://google.com/');
        return true;
      },
      "Cancel": function () {
        $(this).dialog("close");
        return false;
      }
    }
  });

  $('#myOpener').click(function () {
    return $myDialog.dialog('open'); //replace the div id with the id of the button/form
  });
});
</script>

<div id="myOpener"></div>

Вот документация API JQuery UI Dialog API, так что вы можете увидеть все ваши варианты:

http://api.jqueryui.com/dialog/

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