Два варианта:
1. используйте один () вместо bind () или live ()
Пока страница не удаляется из DOM, это должно помочь. Смотрите здесь .
В нем говорится: «прикрепить обработчик к событию для элемента. Обработчик выполняется не более одного раза для элемента.»
Jquery Mobile также использует его внутри JQM, вероятно, по той же причине. Так что, если вы делаете так:
$('button').one('click', function () { do something });
, который должен стрелять только один раз.
2. Используйте data () для установки флага после возникновения события
Другая идея состоит в том, чтобы использовать data () для прикрепления флага к элементу страницы или, поскольку страницы могут быть удалены из DOM, лучше присоединить его к элементу HTML или BODY. Они останутся ...
Я запускаю прокрутку на страницах (надеюсь, однажды), например:
$('div[data-role="page"]').live('pagebeforeshow.scroll', function(event){
var $page = $(this);
if ( $page.data('scrollable', 'Off') ) {
$page.data('scrollable', 'On');
scrollMe( $page ); // init
}
});
Это, вероятно, будет означать размещение вашего вызова функции за пределами реальной страницы.
EDIT:
Это также работает для меня, используя attr
:
// on pageinit - set global argument
$('html').attr('fire-once', 'Off');
$( '#your page' ).live( 'pageshow',function(event){
if ( $('html').attr('fire-once') == 'Off' ) {
$('html').attr('fire-once', 'On');
// your button.bind.behavior here
}
});
Таким образом, вы устанавливаете «огонь один раз» для элемента HTML, который всегда будет одинаковым в JQM при загрузке и выходе страниц. Только если вы перейдете на страницу с data-rel = "external", fire-Once будет сброшен.
На указанной вами странице вы прослушиваете pagehow, запускаете функцию, которая сначала переключает один раз на «On», а затем добавляет привязку вашей кнопки.
Поскольку функция fire-once теперь включена, даже при нескольких привязках оператор if не будет выполнен, и вы будете назначать поведение кнопки только один раз.
Я использую ту же настройку с массивом истории JQM-панели, который мне нужно настроить только один раз, и добавлять записи на changePage тоже только один раз. Вышесказанное прекрасно работает для меня и должно также служить вашей цели.
Отправьте мне сообщение, если хотите увидеть живой пример.
Приветствия
Частое