2

这是一个演示该问题的示例 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>

保存此页面并将其加载到浏览器中。您将看到“Test 1”单选列表呈水平排列(因为该data-type="horizontal"属性应该如此)。然而,动态添加的“测试 2”单选列表垂直出现,这是默认设置。似乎data-type="horizontal"对动态创建的广播列表没有影响。

是否有任何人知道我应该在 DOM 中的某处触发以使其工作的刷新或事件?

4

1 回答 1

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 内部,而是在它之后,因为浏览器已自动为您关闭它。

您应该添加完整的、格式良好的元素以避免此问题。

于 2012-09-10T01:39:43.050 回答