数据类型=“水平”的jQuery移动无线电列表以动态形式失败

时间:2012-09-09 19:07:01

标签: jquery-mobile

以下是演示此问题的示例HTML页面:

    <!DOCTYPE html> 
    <html> 
            <head> 
            <title>My Page</title> 
            <meta name="viewport" content="width=device-width, initial-scale=1"> 
            <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />
            <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
            <script src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>
    </head> 
<body> 

<div data-role="page">

    <div data-role="header">
        <h1>My Title</h1>
    </div><!-- /header -->

    <div data-role="content" id="cp">   
        <form id="form">
            <div data-role="fieldcontain">
                <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
                    <legend>Test 1:</legend>
                    <input type="radio" name="r1" id="r1a" value="none" checked="checked" /><label for="r1a">A</label>
                    <input type="radio" name="r1" id="r1b" value="detail"/><label for="r1b">B</label>
                    <input type="radio" name="r1" id="r1c" value="measure"/><label for="r1c">C</label>
                </fieldset>
            </div>
        </form>     
    </div><!-- /content -->

</div><!-- /page -->


<script type="text/javascript">
$(document).ready(function() {
    var form = $('#form');

    form.append('<div data-role="fieldcontain">');
    form.append('   <fieldset data-role="controlgroup" data-type="horizontal">');
    form.append('      <legend>Test 2:</legend>');
    form.append('      <input type="radio" name="r2" id="r2a" value="none" checked="checked" /><label for="r2a">A</label>');
    form.append('      <input type="radio" name="r2" id="r2b" value="detail"/><label for="r2b">B</label>');
    form.append('      <input type="radio" name="r2" id="r2c" value="measure"/><label for="r2c">C</label>');
    form.append('   </fieldset>');
    form.append('</div');

    form.trigger('create');
});
</script>


</body>
</html>

保存此页面并将其加载到borwser中。您将看到“测试1”单选列表水平出现(因为它应该是data-type="horizontal"属性)。但是,动态添加的“测试2”无线电列表会垂直显示,这是默认设置。似乎data-type="horizontal"对动态创建的无线电列表没有影响。

是否存在刷新或事件,任何人都知道我应该在DOM中的哪个地方触发它以使其工作?

1 个答案:

答案 0 :(得分:2)

问题在于您将新元素添加到表单的方式。如果您将javascript函数更改为此函数,您将看到它的工作原理:

$(document).ready(function() {
    var form = $('#form');

    var newElement = '';
    newElement += '<div data-role="fieldcontain" data-type="horizontal">';
    newElement += '   <fieldset data-role="controlgroup" data-type="horizontal">';
    newElement += '      <legend>Test 3:</legend>';
    newElement += '      <input type="radio" name="r3" id="r3a" value="none" checked="checked" /><label for="r3a">A</label>';
    newElement += '      <input type="radio" name="r3" id="r3b" value="detail"/><label for="r3b">B</label>';
    newElement += '      <input type="radio" name="r3" id="r3c" value="measure"/><label for="r3c">C</label>';
    newElement += '   </fieldset>';
    newElement += '</div>';

    form.append(newElement);

    form.trigger('create');
});

以这种方式思考:每次使用append()函数时,浏览器都会尝试将您提供的任何内容添加到DOM中。但是因为你在不同的append()调用中打破了你的元素,所以浏览器必须尝试理解它。所以当你有这个:

form.append('<div data-role="fieldcontain">');

浏览器看到您已经关闭了结束div标记并尝试通过添加它来为您修复它。这意味着您对append()的下一次调用不会进入您刚刚添加的div内部,而是因为浏览器已自动为您关闭它。

您应该添加完整,格式正确的元素以避免此问题。