【问题标题】:How to dynamically create a form element如何动态创建表单元素
【发布时间】:2013-06-03 03:10:39
【问题描述】:

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

<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 标签。还有一种方法可以在我动态创建标签时直接将标签添加到收音机。我的意思是我不想单独创建标签标签并将单选按钮附加到它。非常感谢您的帮助

【问题讨论】:

  • 不清楚...1.你有什么(最初); 2.你想要达到的; 3. 两者中的哪一个(我想都是?)。

标签: javascript jquery html radio-button label


【解决方案1】:

动态创建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>

【讨论】:

    【解决方案2】:

    我喜欢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>

    【讨论】:

      【解决方案3】:

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

      另外 - 您的代码中几乎没有语法错误,我看不出正确复制+粘贴有什么困难。

      【讨论】:

      • Xbrowser: $('&lt;label /&gt;')
      • @Tomer-它不是复制+粘贴。它是大代码的一部分。我必须对其进行修剪并修改一些参数以关注真正需要的内容
      猜你喜欢
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2015-02-18
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多