动态添加单选按钮

时间:2015-03-17 11:46:39

标签: javascript jquery jquery-mobile

我有一些严重的问题与jquery mobile我建立一个学习响应系统。现在我想在每次有问题要回答时动态填充问题页面。到目前为止,我已经能够做到这一切,但目前我的单选按钮拒绝遵循正常的jquery顺序,当我动态调用它们。当我动态调用时,设计会中断,但是当我硬编码时,我会得到我所期待的。下图是我试图解释的一个例子。上部失真的单选按钮是动态的,低2的是硬编码的。

这是我使用的代码:

var possibleAnswers=poss_ans.split(",");//poss_ans is string containing all the answer from the database


        for (var i =0; i < possibleAnswers.length; i++) {

                var label = sp[i];
                   $radio = $('<input />', { type: "radio" }); 
                   var $label = $('<label />', { text: label});
                   var wrapper = $('<div />');
                   wrapper.append($label).append($radio);;

                    $('div#poss_ans').append(wrapper);                      
            }

请这是我的HTML很抱歉,但我不是很好的小提琴,这就是为什么我没有发布那里。     

    <fieldset class="ui-grid-b">
            <h1 id="title">H1 Heading</h1>
            <p id="question">The question</p>


            <div data-role="fieldcontain">
            <fieldset  data-role="controlgroup">
                <div id="poss_ans"></div>


                    <input type="radio" name="radio-choice-1" id="radio-choice-2" value="choice-2"  />
                    <label for="radio-choice-2">6</label>

                    <input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3"  />
                    <label for="radio-choice-3">4</label>
                    <input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3"  />
                    <label for="radio-choice-3">8</label><input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3"  />
                    <label for="radio-choice-3">2</label>


            </fieldset>
        </div>
        </div>

任何帮助或贡献都会感激不尽。谢谢 dynamic and hard coded

2 个答案:

答案 0 :(得分:3)

在测试代码并输入默认的值字符串并将值添加到动态创建的无线电后,我可以确认它正常工作。我想你的问题是HTML的主要部分存在问题。但是,由于你没有添加它,我无法确认它。

这是您的javascript代码:

var poss_ans = "6,4,8,2";
var possibleAnswers = poss_ans.split(","); //poss_ans is string containing all the answer from the database

for (var i = 0; i < possibleAnswers.length; i++) {

    var label = possibleAnswers[i];
    $radio = $('<input />', {
        type: "radio",
        value: possibleAnswers[i],
    });
    var $label = $('<label />', {
        text: label
    });
    var wrapper = $('<div />');
    wrapper.append($label).append($radio);

    $('div#poss_ans').append(wrapper);
}

使用HTML:

<div id="poss_ans"></div>

最后,一个工作小提琴 - http://jsfiddle.net/andyjh07/tw0k5qkc/

答案 1 :(得分:1)

对于jQuery Mobile,在动态添加控件之后,您需要初始化窗口小部件或调用它们的刷新,以便它们应用jQM类。对于您的情况,您可以简化HTML:

<h1 id="title">H1 Heading</h1>
<p id="question">The question</p>
<fieldset  data-role="controlgroup">
    <div id="poss_ans" ></div>
</fieldset>

然后在脚本中。您需要为单选按钮添加一个名称,以便检查一个名称取消选中其他按钮。同时在关联的id中为该点添加一个id和标签a。最后,在完成所有追加后,在div上调用enhanceWithin()来初始化checkboxradio小部件,然后告诉控制组字段集刷新自己。

var $posans = $('#poss_ans');    
for (var i = 0; i < possibleAnswers.length; i++) {
    var label = possibleAnswers[i];
    $radio = $('<input />', {
        id: 'rad' + i,
        name: 'possibleAnswers',
        type: "radio",
        value: possibleAnswers[i],
    });
    var $label = $('<label />', {
        for: 'rad' + i,
        text: label
    });

    $posans.append($label).append($radio);
}     
$posans.enhanceWithin().closest("fieldset").controlgroup("refresh");
  

<强> DEMO