如何动态创建表单元素

时间:2013-06-06 22:43:30

标签: javascript jquery html5 radio-button label

我有以下代码 我正在尝试动态创建带有和不带标签的单选按钮。我创建单选按钮时无法将文本放在单选按钮中,这里是没有标签的代码 这就是期待

<input type="radio" name="Alex" value="Alex"/>Alex

$('<input>').attr({
   type:'radio',
   name:'name',
   value: "Alex",
   text:"Alex"
}).insertAfter("#divid"));

现在有了标签,

<label><input type="radio" name="Alex" value="Alex"/>Alex<label>

//create a label tag
var label = $('<label>', { text:"Alex"});
//append input tag to label
$(label).append($('<input>').attr({
    type:'radio',
    name:"Alex",
    value:"Alex"
}).insertAfter("#divid"));

上述两个都不会在控制台上产生任何错误,但它不会产生我感兴趣的正确的HTML标记。还有一种方法可以直接向无线电添加标签,因为我动态创建它们。我的意思是我不想创建一个标签标签,并附加单选按钮。非常感谢您的帮助

3 个答案:

答案 0 :(得分:2)

动态创建labelradio

jsBin example

var $input = $('<input />', {
  type : "radio",
  name : "name",
  value : "alex"
});

$("<label />", {
  insertAfter: "#somediv", // (or use appendTo: to insert into it)
  append: [$input, "Alex"] // include our $input and also some text description
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="somediv">DIV</div>

答案 1 :(得分:0)

您应该将var label = $('<label>').attr({ text:"Alex"});替换为var label = $('<label>').text("Alex");

此外 - 您的代码中几乎没有语法错误,我看不出正确复制和粘贴的难度。

答案 2 :(得分:0)

我喜欢Roko's answer,但如果您正在构建用户内容中的单选按钮标签,则它很容易受到HTML注入。

在这里,我使用.text()方法确保正确转义文本。

var $target = $('#target'),
    records = [{ id: 1, name: "Alex" },
               { id: 2, name: "Test that HTML <em>is not</em> injected" }];
$target.append('<h3>With Labels</h3>');
for (var i=0; i < records.length; i++) {
  $target.append($('<label>').text(records[i].name)
                 .prepend($('<input type="radio" name="mychoice">',
                            { value: records[i].id })));
}
$target.append('<h3>Without Labels</h3>');
for (var i=0; i < records.length; i++) {
  $target.append($('<span>').text(records[i].name)
                 .prepend($('<input type="radio" name="mychoice">',
                            { value: records[i].id })));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="target"></div>