【问题标题】:Create a label using jQuery on the fly使用 jQuery 即时创建标签
【发布时间】:2012-05-11 04:14:41
【问题描述】:

我需要即时创建标签和文本字段,还需要为文本字段添加日期选择器。我需要这样的东西:

<label for="from">From </label> <input type="text" id="from" name="from" />

我在 jQuery 中尝试过这样的事情:

var label = $("<label>").attr('for', "from");   
                    label.html('Date: ' +
                        '<input type="text" id="from name="from" value="">');

                    $(function() {
                        $("#from").datepicker();
                    }); 

这个不知何故不会创建标签和文本字段。我不确定我错过了什么。

编辑

更准确地说,我在 portlet 中使用它,并且我在 jsp 页面中没有正文标记。所以当我调用函数追加到正文时它不会。

【问题讨论】:

  • 似乎它们从未插入到 DOM 中。
  • 您是否将其添加到其他地方的 DOM 中?这里的代码创建了对象,但没有将它附加到 dom,所以它不会显示在浏览器中。

标签: jquery forms jquery-ui jquery-ui-datepicker dom-manipulation


【解决方案1】:

您需要将您创建的标签附加到 DOM 以使其显示:

var label = $("<label>").attr('for', "from");
    label.html('Date: ' +
      '<input type="text" id="from name="from" value="">');

label.appendTo('body');

// set up datepicker
label.find('#from').datepicker();

【讨论】:

    【解决方案2】:

    您要在哪里插入标签?如果你想要它在页面的开头,你可以这样做。

    var $label = $("<label>").attr('for', "from");   
    
    $label.html('Date: <input type="text" id="from" name="from" value="">');
    
    $(function() {
        $('body').prepend($label);
    
        $(':input', $label).datepicker();
    });
    

    【讨论】:

    • 请注意,在我的答案版本中,我已经更正了“id”错字,并且我还在正文中附加了标签,同时提供了一种轻松更改目标的方法附加到:)
    【解决方案3】:

    1) 您在 ID 属性末尾缺少结束引号。
    2) 你没有将标签本身附加到任何东西上。

    【讨论】:

      【解决方案4】:

      这样的事情会起作用:

      //Create the label element
      var $label = $("<label>").text('Date:');
      //Create the input element
      var $input = $('<input type="text">').attr({id: 'from', name: 'from'});
      
      //Insert the input into the label
      $input.appendTo($label);
      //Insert the label into the DOM - replace body with the required position
      $('body').append($label);
      
      //applying datepicker on input
      input.datepicker();
      

      jsFiddle Demo

      请注意,如果输入元素在其中,则不必在标签上使用for 属性。所以使用其中之一:

      <label><input id="x1"></label>
      
      <label for="x1"></label> <input id="x1">
      

      【讨论】:

      • 我实际上是在portlet 中使用它,我在portlet 中没有body 标签。它只是一个jsp页面
      • @user525146 而不是body,只需使用您想要的任何其他选择器。例如,如果您有&lt;div id="inserthere"&gt;,请使用$('#inserthere') 而不是$('body')
      • 我有另一个问题我的jsp页面是一个ajax页面,所以每次页面加载它都会创建一个新的日期标签和文本字段..
      • @user525146 这很简单。由于ids 在整个文档中必须是唯一的,因此您应该简单地检查已经存在的#from 元素。类似if ($('#from').length == 0) { //run code }.
      • 它就像一个魅力。非常感谢,我还有一个问题,你在 jquery 数据表插件上工作吗?我正在尝试通过创建功能插件将日期选择器合并到数据表的 sDom 元素中。
      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2018-02-05
      • 1970-01-01
      • 2012-06-15
      • 2012-01-19
      相关资源
      最近更新 更多