Ответ 1
Сначала принудительно инициализируйте выбор (ы):
$('.mob-size').selectmenu(); // Initializes
$('.mob-size').selectmenu('refresh', true);
или используйте это для коротких
$('.mob-size').selectmenu().selectmenu('refresh', true);
Я получаю форму от сайта рамки zend и помещаю его в ответ в новом файле в функции, написанной jQuery mobile, но я получаю эту ошибку:
исключение uncaught: не может вызывать методы в selectmenu до инициализация; попытался вызвать метод 'refresh'.
Код функции:
function addItem(id) {
$.ajax({
url:'http://zf.darina.php.nixsolutions.com/order/index/create-order-mobile',
dataType:"jsonp",
data:{id_good:id},
success:function (resp) {
console.log(resp);
$('.product-table').empty();
$('.product-table').append(resp.prod);
$('.product-table').append(resp.form);
$('.add-order-btn').button();
$('.mob-size').selectmenu('refresh', true);
$('#block').page();
}
})
}
Сначала принудительно инициализируйте выбор (ы):
$('.mob-size').selectmenu(); // Initializes
$('.mob-size').selectmenu('refresh', true);
или используйте это для коротких
$('.mob-size').selectmenu().selectmenu('refresh', true);
В моем случае, если я не инициализировал select перед вызовом метода "disable", я получил ошибку, а если бы я инициализировал его, выбор не отключился, а сам дублировал - я попытался выбрать объект TAG NAME вместо CLASS или ID NAME,
$('select').selectmenu('disable');
вместо
$('.select-class-name').selectmenu('disable');
и он работал без принудительной инициализации
сделайте это в своей пользовательской функции делегирования обновления:
var w = $("#yourinput");
if( w.data("mobile-selectmenu") === undefined) {
// not initialized yet, lets do so
w.selectmenu();
}
w.selectmenu("refresh",true);
в соответствии с улучшенное разрешение здесь
Я нашел ту же проблему, но более активное решение. Когда jqm обертывает элемент select
, он помещает его в элемент <span>
с тем же списком классов, что и элемент select
. Я изменил свою ссылку на него, чтобы вместо чтения:
row.find(".selectCompletion").selectmenu("disable");
теперь он гласит:
row.find("select.selectCompletion").selectmenu("disable");
Указание того, что jquery должен найти только элемент select
соответствующий имени класса, а не все элементы в.row, которые соответствуют имени класса, решили проблему.
Это произошло со мной при клонировании существующего элемента select, чтобы дублировать исходный раздел несколько раз.
Вызов " refresh " для исходного элемента, работал нормально, при вызове его для клонированных разделов приводил к ошибке, возникающей в вопросе.
Однако вызов selectmenu() вызывал "вандализацию" формы, как видно на следующем изображении:
Объяснение: top = оригинал. bottom = vandalized cloned element сразу после вызова selectmenu.
Решение:
Следующий код решил эту проблему вандализма:
clone_elem.find('select [name = MyClass]') .selectmenu(). selectmenu ("destroy"). selectmenu();
Это не идеальное решение, потому что мы должны вызвать первый selectmenu(), чтобы вызвать selectmenu ("destroy"), поэтому я был бы рад услышать о более чистом решении.