jQueryMobile - SimpleDialog fullHTML rel = 'close' перемещается назад много раз - PullRequest
1 голос
/ 30 января 2012

Я действительно борюсь со следующей проблемой.

Я использую jQueryMobile - найден плагин SimpleDialog здесь :

Я решил создать глобальную служебную функцию, такую, чтобыЯ могу звонить так часто, как мне нужно, вот так:

function popAlert(title, msg) {
    $(this).simpledialog({
       'mode' : 'blank',
       'prompt' : title,
       'cleanOnClose' : true,
       'useModal':true,
       'fullHTML': msg + '<a rel="close" data-role="button" data-theme="c">Ok</a>'
        })
     $(this).simpledialog('refresh');
}

Я просто хочу, когда пользователь нажимает кнопку ОК, диалоговое окно отклоняется и возвращается на предыдущую страницу, то есть, как функциональность кнопки «Х» в диалоговом окне.box.

Однако каждый раз, когда диалог вызывается, он добавляет обратный ход в стек.То есть, если он был вызван дважды, когда пользователь нажмет кнопку «ОК», мобильное приложение перейдет на предыдущую страницу, а перед ним… два шага назад.

Есть предложения?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 сентября 2012

У меня была такая же проблема. Исправление - вместо использования rel='close' я использовал

onclick="$('#simpledialog').simpledialog('close');"
0 голосов
/ 07 сентября 2012

Я думаю, что я нахожу, где проблема в rel close.

в файле jquery.mobile.simpledialog.js (строка 129)

if ( o.mode === 'blank' ) {
    self.pickerContent.delegate('[rel="close"]', o.clickEvent, function() {
       self.close();
           alert('1');
    });
}

Если вы включите оповещение и попробуете его в мобильном браузере (Android 2.3.3) при первом открытии и закрытии, вы получите одно оповещение, при открытии и закрытии звука вы получите два оповещения и так далее ...

Швы, в которых все события привязки по времени и никогда не отменяются (я использую переход, а не загрузка страницы, вероятно, при загрузке не произойдет)

Я не знаком с делегатами, и я переписал этот код с помощью функций jquery bind и unbind

if ( o.mode === 'blank' ) {
      self.pickerContent.find('[rel="close"]').bind('click',function() {
         self.close();
         self.pickerContent.find('[rel="close"]').unbind();
      });   
      /*
      self.pickerContent.delegate('[rel="close"]', o.clickEvent, function() {
         self.close();
      });*/
}

Я тестировал в мобильном браузере и сейчас работает.

возможно self.pickerContent.undelegate ('[rel = "close"]'); исправит исходный код.

То, что я нахожу больше, - это другое поведение и из-за этого другого поведения при близком

Различное поведение в локальном и мобильном браузере. Я использовал useDialog, равный false, и когда я помещаю его в мобильный браузер, я получаю диалог. это потому что из

строка 141 - jquery.mobile.simpledialog.js

if ( ( docWinWidth > 400 && !o.useDialogForceTrue ) || o.useDialogForceFalse || o.fullScreen ) { 

, если вы просто используете useDialog, значение true не работает, если с больше 400px, тогда вы должны поставить useDialogForceTrue = true, и вы получите диалог во всех браузерах. Немного сбивает с толку, потому что есть 5 переменных, которые влияют на режим диалога показа (docWinWidth, useDialogForceTrue, useDialogForceFalse, fullScreen и useDialog). Это означает, что если вы используете useDialog: false в мобильном браузере всегда будет отображать диалоговое окно, потому что (docWinWidth> 400 &&! O.useDialogForceTrue).

Затем я сказал, что понял, но теперь я хочу перезагрузить другой контент в этом диалоговом окне, а затем я закрою его и снова открою с другим содержимым activedialog.simpledialog ('close');

строка 213 - jquery.mobile.simpledialog.js

if ( self.options.cleanOnClose === true && self.options.useDialog === false ) {
    self.clean();
}

но тогда хммм ... если это диалог, вы не можете использовать свойство 'cleanOnClose', вы не можете очистить содержимое диалога

я просто убрал галочку для диалога

if (self.options.cleanOnClose === true) {

и теперь я снова использую диалоговое окно для отображения другого контента

Предложите использовать simpledialog2, в этой версии решено много проблем!

0 голосов
/ 05 сентября 2012

предыдущий ответ не работал на телефоне. Я попробовал другую вещь, но работает, только если у вас есть модальное окно, и если у вас нет фиксированного меню нижнего колонтитула (потому что пункты меню больше не фиксируются на Android 2.3).

$('.ui-simpledialog-screen').click();

просто щелкнув по окну.

...