jQuery:如何在创建时自动将元素转换为UI小部件?

问题描述:

我有一个表单,我在其中使用jQuery/JavaScript添加新的日期字段元素。我试图附加jQuery的datepicker到该日期字段输入(任何部件/行动将具有相同的行为)。jQuery:如何在创建时自动将元素转换为UI小部件?

<script> 
$(function() { 
    $(".datepicker").datepicker(); 
}); 
</script> 

<p>Date: <input type="text" class="datepicker"></p> 

如果元素出现在页面的原始html中,那么datepicker小部件会绑定到日期字段。但是,如果相同的日期字段被即时添加,日期选择器小部件不起作用。为了点击等等,jquery提供了'live'功能,它可以在一个对象被创建后附加一个动作。但是,我怎样才能模仿datepicker的相同行为,以便它在“创建对象之后”被附加?

如果你添加上飞的元素,只需拨打.datepicker()它在飞行呢!

当然,你必须知道在你创建他们,他们将是迄今编辑字段的时间,所以它应该是微不足道的,直接使在同一时间的小工具,如:

var field = $('<input type="text" class="datepicker">').appendTo(page); 
$(field).datepicker(); 

即只需使用您刚刚创建的元素的选择器,并按照您在$(document).ready()函数中为预先创建的元素所做的相同方式呼叫.datepicker()即可。

我在http://jsfiddle.net/sDHzG/上进行了一个工作演示。

请注意,新元素不必具有特定的类(除非您想要其他原因) - 对.datepicker()的调用可以使用DOM元素(按照我的示例)。

+0

我会淘汰一个jsfiddle - 给我5分钟 – Alnitak 2011-03-18 19:43:44

+0

从来没有想到这一点。我会尝试将其适应于我自己的场景。 – Neo 2011-03-18 19:44:49

+0

我的情况比这更复杂一点。我正在创建一个拖放式UI。实际的用户界面是在另一个jquery-ui-tab中为了“预览”目的而使用ajax重新创建的,而不需要加载完整的页面。那就是我需要日期选择器小部件的地方,而不是在拖放式页面本身。 – Neo 2011-03-18 20:10:57

这听起来像你想要的东西像Live Query插件,它可以匹配基于选择器的新元素,并执行代码,如你所愿。

$(".datepicker").liveQuery(function() { 
    $(this).datepicker(); 
}); 
+0

Livequery插件是否与最新版本的jquery兼容。最后一个livequery发布于2009年1月发布。 – Neo 2011-03-18 20:17:35

+0

@Neo老实说我不知道​​,但[项目托管的github页面](https://github.com/brandonaaron/livequery)最后更新于2010年2月。 – 2011-03-18 20:21:43

当您的元素被添加到页面时,您可以引发一个事件,并使用jQuery live绑定该事件。

$(document).ready(function { 
    $("#form").live("datePickerCreated", function() { 
    $(this).datepicker(); 
    }); 
}); 

function CreateDatePicker(id) { 
    datepickercode = '<p>Date: <input type="text" class="datepicker"></p>'; 
    jQuery("#form") 
    .append(datepickercode) 
    .trigger("datePickerCreated"); 
} 
+0

或'CreateDatePicker'直接调用'.datepicker()'... – Alnitak 2011-03-18 19:57:43