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

Ответы

Ответ 1

Сначала принудительно инициализируйте выбор (ы):

$('.mob-size').selectmenu(); // Initializes
$('.mob-size').selectmenu('refresh', true);

или используйте это для коротких

$('.mob-size').selectmenu().selectmenu('refresh', true);

Ответ 2

В моем случае, если я не инициализировал select перед вызовом метода "disable", я получил ошибку, а если бы я инициализировал его, выбор не отключился, а сам дублировал - я попытался выбрать объект TAG NAME вместо CLASS или ID NAME,

$('select').selectmenu('disable');

вместо

$('.select-class-name').selectmenu('disable');

и он работал без принудительной инициализации

Ответ 3

сделайте это в своей пользовательской функции делегирования обновления:

var w = $("#yourinput");
if( w.data("mobile-selectmenu") === undefined) {
  // not initialized yet, lets do so
  w.selectmenu();
}
w.selectmenu("refresh",true);

в соответствии с улучшенное разрешение здесь

Ответ 4

Я нашел ту же проблему, но более активное решение. Когда jqm обертывает элемент select, он помещает его в элемент <span> с тем же списком классов, что и элемент select. Я изменил свою ссылку на него, чтобы вместо чтения:

row.find(".selectCompletion").selectmenu("disable");

теперь он гласит:

row.find("select.selectCompletion").selectmenu("disable");

Указание того, что jquery должен найти только элемент select соответствующий имени класса, а не все элементы в.row, которые соответствуют имени класса, решили проблему.

Ответ 5

Это произошло со мной при клонировании существующего элемента select, чтобы дублировать исходный раздел несколько раз.

Вызов " refresh " для исходного элемента, работал нормально, при вызове его для клонированных разделов приводил к ошибке, возникающей в вопросе.

Однако вызов selectmenu() вызывал "вандализацию" формы, как видно на следующем изображении:

kUb6m.jpg

Объяснение: top = оригинал. bottom = vandalized cloned element сразу после вызова selectmenu.

Решение:

Следующий код решил эту проблему вандализма:

clone_elem.find('select [name = MyClass]') .selectmenu(). selectmenu ("destroy"). selectmenu();

Это не идеальное решение, потому что мы должны вызвать первый selectmenu(), чтобы вызвать selectmenu ("destroy"), поэтому я был бы рад услышать о более чистом решении.