JQM (jQueryMobile) Динамически добавленные элементы не отображаются правильно, а CSS не применяется - PullRequest
3 голосов
/ 09 марта 2011

У меня проблема с динамическим добавлением тега select, CSS и дополнительные теги html (которые добавляет JQM) не применяются.

Вот пример того, как я добавляю новый тег выбора: http://jsfiddle.net/UcrD8/4/

HTML:

<div data-role="page" id="page_1">
    <div id="select_option_groups">
        <div data-role="fieldcontain">
            <select name="select_options_1">
                <option value="" selected>Please select an option</option>
                <option value="foo">Foo</option>
                <option value="bar">Bar</option>
            </select>
        </div>
    </div>
</div>

JS:

$(function(){
    var counter = 2;
    var onChange = function(e){
        val = $(':selected',this).val() || '';
        if (val != ''){
            // they may be able to toggle between valid options, too.
            // let's avoid that using a class we can apply
            var c = 'alreadyMadeASelection';
            if ($(this).hasClass(c))
                return;
            // now take the current select and clone it, then rename it
            var newSelect = $(this)
                .clone()
                .attr('name','select_options_'+counter)
                .attr('id','select_options_'+counter)
                .appendTo('#select_option_groups')
                .change(onChange);
            $(this).addClass(c);
            counter++;
        } else {
            var id = $(this).attr('name').match(/\d+$/), parent = $(this).parent();
            $(this).remove();

            // re-order the counter (we don't want missing numbers in the middle)
            $('select',parent).each(function(){
                var iid = $(this).attr('name').match(/\d+$/);
                if (iid>id)
                    $(this).attr('name','select_options_'+(iid-1));
            });
            counter--;
        }
    };
    $('#select_option_groups select').change(onChange);
});

Я пробовал:

// this gets the select tags to stack but still no CSS
$(newSelect).fieldcontain('refresh'); 

// does nothing
$(newSelect).page();

// does nothing
$('#page_1').page();

Ответы [ 3 ]

4 голосов
/ 10 марта 2011

Попробуйте это:

$(newSelect).selectmenu('refresh');

или то, что заставит его восстановить:

$(newSelect).selectmenu('refresh', true);

и, пожалуйста, дайте мне знать, если это сработало.

3 голосов
/ 10 марта 2011

Понятия не имею, почему .selectmenu('refresh'); не работает, а что касается страницы - вы можете использовать ее один раз для элемента.После этого он пропускает элемент в следующий раз.

  1. клонировать селект перед добавлением материала (клон без параметров)
  2. Удалить оригинал
  3. добавить материал к клонированному элементу
  4. положить его обратнов дом
  5. вызовите .page() или .selectmenu() на нем, или вызовите .page() на элементе, который его содержит.

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

[править]

Выше было простоУгадай.Ваш код в порядке, так оно и есть.нужно всего лишь один звонок .selectmenu() Рабочий код:

http://jsfiddle.net/UcrD8/45/

1 голос
/ 03 апреля 2013

Следует использовать .trigger ("create") на родительском объекте (объектах), которые вы хотите правильно отобразить.

Проверьте следующую ссылку:

http://demos.jquerymobile.com/1.3.2/faq/injected-content-is-not-enhanced.html

И следующий ответ: https://stackoverflow.com/a/11054451/487812

...