一尘不染

JQM(jQueryMobile)动态添加的元素无法正确显示并且未应用CSS

css

我在动态添加选择标签时遇到问题,没有应用CSS和JQM添加的其他html标签。

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

阅读 329

收藏
2020-05-16

共1个答案

一尘不染

我不知道为什么.selectmenu('refresh');不起作用,但是对于页面-您可以在元素上使用一次。之后,它将在下一次跳过该元素。

  1. 在添加内容之前克隆选择(不带参数的克隆)
  2. 取出原件
  3. 向克隆的元素添加内容
  4. 放回dom
  5. 调用.page().selectmenu()对其进行调用,或调用.page()包含它的元素。

应该有帮助。如果不是,请尝试从头开始创建一个新的select元素,并使用原始元素中的选项加载该元素,然后添加新元素,然后继续。

[编辑]

以上只是一个猜测。您的代码是正确的。只需调用一次.selectmenu() 工作代码即可

2020-05-16