скрипт внутри jquery mobile разборный огонь дважды - PullRequest
0 голосов
/ 24 марта 2012

Почему скрипт в jquery mobile разборный огонь дважды, спасибо в продвинутом.

Обновление: код показывает, что при нажатии «btnonce» только 1 предупреждение, но «btntwice» 2 предупреждение, только отличается «btntwice» javascript в «div data-role =« collapsible », поэтому он запускается дважды?

<div data-role="page" id="page">
   <div data-role="content"> 
<script type="text/javascript">
  $('#page').live('pageinit', function (event) {
    $("#btnonce").click(function() {
    alert("Handler for .click() called.");
    });
 })
</script>
<div data-role="collapsible" data-collapsed="false" id="one">
<script type="text/javascript">
   $('#page').live('pageinit', function (event) {
      $("#btntwice").click(function() {
      alert("Handler for .click() called.");
    });
   })
</script>
 <h3>Test</h3>
<input type="button" id="btntwice" data-icon="check" value="fire twice" ></input>
<input type="button" id="btnonce" data-icon="check" value="fire once" ></input>
</div>
</div>
</div>

http://jsfiddle.net/M8PM2/39/

Ответы [ 2 ]

0 голосов
/ 19 июля 2012

Похоже, проблема, связанная с тем, что функция jqm складная _create использует jQuery wrapInner ().Существует известная ошибка jQuery (или это особенность?), Из-за которой теги скрипта внутри содержимого, которое должно быть перенесено, повторно выполняются логикой domManip.Хорошие времена.

Если вы можете переместить сценарий из разборного, это было бы идеально.Возможно, вы могли бы взломать jqm, чтобы не использовать wrapInner для этой конкретной строки кода:

collapsibleContent = collapsible.wrapInner( "<div class='ui-collapsible-content'></div>" ).children( ".ui-collapsible-content" ),

Лично я собираюсь пойти со старой школой "if (readyRan) return ;readyRan = true;" -введите флаг.Ностальгирует по FORTRAN.

Обновление

Так что я закончил со следующим в моем скрипте установки jqm (который будет запускаться на каждой странице и на странице «sub»)):

$(document).on({
    pagecreate: function (e) {
        $(':jqmData(role=collapsible) script').remove();
    }
}, ':jqmData(role=page)');

Кажется достаточно безобидным.Я всегда могу добавить класс в свой скрипт и изменить селектор, если по какой-то причине я do хочу запустить встроенные скрипты дважды.Что-то вроде:

$(':jqmData(role=collapsible) script:not(.do-not-remove)').remove();
0 голосов
/ 24 марта 2012

Измените свой JavaScript на это:

$('#page').live('pageinit', function (event) {
    $("#btnonce").click(function() {
        alert("Handler for .click() called.");
    });
    $("#btntwice").click(function() {
        alert("Handler for .click() called.");
    });
})

Рабочий пример здесь

Ваш обработчик click был добавлен дважды - см. Этот пример

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