Добавление динамического контента с событиями в jquerymobile

0

В настоящее время я столкнулся с проблемой в jquerymobile: я добавляю элементы в список динамически и в конце концов использую boostWithin() (поэтому стиль правилен). После этого мне нравится добавлять клики-события для каждого элемента списка, но проблема в том, что boostWithin работает асинхронно, поэтому я всегда получаю сообщение об ошибке "не может вызывать методы на checkboxradio до инициализации, попытался вызвать метод" refresh ""

Когда я задерживаю код добавления событий, он отлично работает.

Кто-нибудь есть идея, если есть событие boostWithin.done или что-то еще, что я могу использовать?

HTML:

...
<div id="shoppinglist">Loading list...</div>
...

Javascript:

function updateList()
{
    var result = "";

    $.each(shoppinglistItems, function (index, item) {
        result += '<label><input type="checkbox" ' + item.checked + ' id="item_' + item.id + '">' + item.name + '</label>\n';
    });

    $('#shoppinglist').html(result).enhanceWithin();

    // Change-Events an die Checkboxen knoten
    $('input[id*=item_]').unbind('change').bind('change', function (event) {
        var itemid = $(this).attr('id');
        itemid = (itemid.split('_'))[1];    // Nur die Zahl extrahieren
        // Passendes Item aus der Liste der Items suchen und checken
        $.each(shoppinglistItems, function (index, item) {
            if (item.id == itemid)
            {
                item.checked = "checked";
                item.timestamp = moment().format("YYYYMMDDHHmmss");
            }
        });
        updateList();
    });
}
  • 0
    Добавьте код, чтобы прояснить проблему.
  • 0
    Добавлен код, надеюсь, это поможет
Показать ещё 4 комментария
Теги:
jquery-mobile

1 ответ

0

Рекомендации Омара по использованию делегирования событий должны работать на вас. В моем примере ниже я вызываю updatelist на pagecreate, чтобы сначала создавать флажки. Затем я использую делегирование событий (on()) для создания обработчика изменений на любых входах в списке покупок DIV, независимо от того, существуют они прямо сейчас или нет. строка $ ("# shoppinglistItemsCont"). html (JSON.stringify(shoppinglistItems)); просто печатает содержимое объекта на экране, чтобы вы могли видеть его изменение.

$(document).on("pagecreate", "#page1", function(){

    $("#shoppinglistItemsCont").html(JSON.stringify(shoppinglistItems));
    updateList();

    $("#shoppinglist").on("change", "input[id*=item_]", function(event){
        var itemid = $(this).attr('id');
        itemid = (itemid.split('_'))[1];    // Nur die Zahl extrahieren
        // Passendes Item aus der Liste der Items suchen und checken
        $.each(shoppinglistItems, function (index, item) {
            if (item.id == itemid)
            {
                item.checked = "checked";
                item.timestamp = moment().format("YYYYMMDDHHmmss");                
            }
        });
        updateList();    
        $("#shoppinglistItemsCont").html(JSON.stringify(shoppinglistItems));
    });

});


function updateList()
{
    var result = "";
    $.each(shoppinglistItems, function (index, item) {
        result += '<label><input type="checkbox" ' + item.checked + ' id="item_' + item.id + '">' + item.name + '</label>\n';
    });

    $('#shoppinglist').html(result).enhanceWithin();
}

Вот работая DEMO

  • 0
    Спасибо, что нашли время, чтобы создать этот пример. И да, это работает для меня, как вы сказали. Моя проблема в том, что список обновляется, когда элемент проверяется (проверенные элементы сортируются), а затем перерисовывается с помощью updatelist (). При первом создании списка все работает хорошо (как в вашем примере). Как только список был изменен нажатием на элемент, выдается ошибка.
  • 0
    @ChristianWaidner, вы можете обновить мою скрипку, чтобы ошибка произошла?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню