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元素(按照我的示例)。
这听起来像你想要的东西像Live Query插件,它可以匹配基于选择器的新元素,并执行代码,如你所愿。
$(".datepicker").liveQuery(function() {
$(this).datepicker();
});
Livequery插件是否与最新版本的jquery兼容。最后一个livequery发布于2009年1月发布。 – Neo 2011-03-18 20:17:35
@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");
}
或'CreateDatePicker'直接调用'.datepicker()'... – Alnitak 2011-03-18 19:57:43
我会淘汰一个jsfiddle - 给我5分钟 – Alnitak 2011-03-18 19:43:44
从来没有想到这一点。我会尝试将其适应于我自己的场景。 – Neo 2011-03-18 19:44:49
我的情况比这更复杂一点。我正在创建一个拖放式UI。实际的用户界面是在另一个jquery-ui-tab中为了“预览”目的而使用ajax重新创建的,而不需要加载完整的页面。那就是我需要日期选择器小部件的地方,而不是在拖放式页面本身。 – Neo 2011-03-18 20:10:57