jQuery Mobile - переход непосредственно к хеш-URL приводит к сбою динамических элементов - PullRequest
1 голос
/ 28 марта 2011

Я сталкиваюсь с проблемой, когда динамические элементы на странице обновляются в "pageshow". Это прекрасно работает, если пользователь переходит непосредственно к URL-адресу или переходит на него откуда-то еще на сайте. Проблема в том, что, если я перехожу непосредственно на эту страницу или обновляю ее (например, mydomain.com/#somepage.html), происходит сбой, и я получаю ошибку:

Uncaught не может вызывать методы в selectmenu до инициализации; попытался вызвать метод «refresh»

Я вызываю обновление в функции, которая заполняет списки выбора содержимым ajax.

Я смотрел на использование другого события вместо PageShow, но ни одно из них не подходит.

Вот соответствующие биты кода:

        //attach all listeners on dynamically loaded pages here
    $('[data-role=page]').live('pageshow', function(event, ui){ 
        //do stuff (get data, get select options, index of current selected
            $('select.myselect').fillSelect(itemsArray,indexofSelected);

    ...
    )}; //pageshow

Это функция, которую я использую для заполнения выбора:

$.fn.fillSelect = function (items,index){
    //generically fills a select list - requires an array and target element optional index of selected element
    this.find('option').remove();
    var options = "";
    for (var i = 0; i < items.length; i++) {
            var selected = (index == i) ? 'selected="selected"' : "" ;
            options += '<option '+selected+'value="'+items[i]+'">'+items[i]+'</option>';
    } 
    //assembling html first cause appends are expensive
    this.append(options).selectmenu('refresh', true);

    return this;
}

Опять же, это характерно для перехода непосредственно к хеш-URL, но работает совершенно иначе.

1 Ответ

2 голосов
/ 28 марта 2011

Это потому, что вы связываете событие pagehow слишком поздно. Это уже показано. Чтобы убедиться, что это работает, поместите свои кусочки кода в файл, загруженный до jquery mobile, и убедитесь, что вы не ждете, пока DOMready вызовет $('[data-role=page]').live('pageshow' ... live - единственное, что будет работать, даже если селектор получит пустой результат из-за не загруженного DOM.

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