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);
});