jQueryMobile необработанное исключение при удалении checkboxradio

Получение этого сообщения:

Error: cannot call methods on checkboxradio prior to initialization; 
attempted to call method 'refresh'

я следовал за демонстрацией, найденной здесь: Гадкий монгрел

Вот фрагмент моего JS:

function(){
  var $pbNum = $('<input checked="checked" id="component-pbnum-'+ _val+ 
        '" name="component-pbnum[]'+
        '" type="checkbox" value="'+ _val+ '" data-mini="true">'+
        '<label for="component-pbnum-'+ _val+ '">'+ _val+ '</label>'),
      $pbNumChk = $($pbNum[0]).on("change", function(ev){
        $pbNum.remove();
        // UNCAUGHT EXCEPTION: "cannot call methods on checkboxradio prior
        // to initialization; attempted to call method 'refresh'"
      });

  $pbnumList.controlgroup("container").append($pbNum);
  $pbNumChk.checkboxradio();
// Have also tried $pbNumChk.checkboxradio().checkboxradio("refresh") 
// as hinted by other answers. No difference.
}

Мне нужно динамически добавлять checkboxradio (в этом случае флажки), но я могу удалить их, когда они нажаты или нажаты.

Это на самом деле разочаровывает, насколько ограниченный JQM, по сравнению с JQUI. Нет (документировано) "уничтожить" метод для этих виджетов? Тем не мение...

Флажки добавить в мою ControlGroup просто отлично. Когда я нажимаю, чтобы удалить их в полном браузере, они удаляются, но выдается исключение. Все, что я нашел до сих пор, отвечает чем-то похожим на это: /questions/3959658/jquery-mobile-uncaught-ne-mozhet-vyizyivat-metodyi-dlya-checkboxradio-do-initsializatsii-popyitalsya-vyizvat-metod-obnovit/3959669#3959669

Вот что я искал: http://goo.gl/mVOdo

я не понимаю Почему JS выдает ошибку об виджете, когда я его удаляю - и особенно когда он был инициализирован, когда он был вставлен?

[РЕДАКТИРОВАТЬ]
Исправлена ​​небольшая опечатка в HTML-строке $ pbNum

1 ответ

Решение

Я просмотрел файл jQuery Mobile JS и обнаружил, что когда change триггеры, jQM добавляет / удаляет классы к флажку и затем вызывает refresh метод .checkboxradio('refresh') увеличить разметку.

Кажется, что .remove() происходит раньше refresh имеет место, поэтому если вы задержите процесс удаления на 1 мс, refresh будет до снятия флажка.

Стоит отметить, что stopImmediatePropagation() не помогло остановить сообщение об ошибке.

демонстрация

Код

$(document).on('change', '.ui-checkbox', function () {
 var box = $(this);
 setTimeout(function () {
  box.remove();
   $('#group').controlgroup().trigger('create');
 }, 1);
});
Другие вопросы по тегам