所以我正在使用jQuery日期选择器,它运行良好。我正在使用AJAX来获取一些内容,显然当应用这个新内容时,绑定会丢失,我learnt about this last week并发现了.live()
方法。
但是如何将它应用到我的日期选择器?因为这不是一个事件,因此.live()
将无法帮助......对吗?
这是我用来将日期选择器绑定到输入的代码:
$(".datefield").datepicker({showAnim:'fadeIn',dateFormat:'dd/mm/yy',changeMonth:true,changeYear:true});
每次我的AJAX触发时,我都不想调用此方法,因为我希望尽可能保持通用。
干杯: - )
修改
正如@nick所要求的,下面是我的包装函数得到了ajax()
方法:
var ajax_count = 0;
function getElementContents(options) {
if(options.type===null) {
options.type="GET";
}
if(options.data===null) {
options.data={};
}
if(options.url===null) {
options.url='/';
}
if(options.cache===null) {
options.cace=false;
}
if(options.highlight===null || options.highlight===true) {
options.highlight=true;
} else {
options.highlight=false;
}
$.ajax({
type: options.type,
url: options.url,
data: options.data,
beforeSend: function() {
/* if this is the first ajax call, block the screen */
if(++ajax_count==1) {
$.blockUI({message:'Loading data, please wait'});
}
},
success: function(responseText) {
/* we want to perform different methods of assignment depending on the element type */
if($(options.target).is("input")) {
$(options.target).val(responseText);
} else {
$(options.target).html(responseText);
}
/* fire change, fire highlight effect... only id highlight==true */
if(options.highlight===true) {
$(options.target).trigger("change").effect("highlight",{},2000);
}
},
complete: function () {
/* if all ajax requests have completed, unblock screen */
if(--ajax_count===0) {
$.unblockUI();
}
},
cache: options.cache,
dataType: "html"
});
}
这个解决方案怎么样,我有一个rules.js,其中包括我对元素的所有初始绑定,如果我将它们放在一个函数中,然后在ajax方法的成功回调上调用该函数,那样我不会重复代码...
嗯,请问:D答案 0 :(得分:8)
你可以这样做:
function createPickers(context) {
$(".datefield", context || document).datepicker({
showAnim:'fadeIn',
dateFormat:'dd/mm/yy',
changeMonth:true,
changeYear:true
});
}
要在document.ready
上投放,如果您已经拥有document.ready
功能,可以致电:
createPickers();
或者您可以在it's own document.ready
handle中运行它,如下所示:
$(createPickers);
在success
回调中,您可以这样称呼它:
createPickers(responseText);
这样做只是在提供的上下文中选择.datefield
(在内部使用.find()
),因此在document.ready
您选择所有匹配的元素创建日期选择器,但在您的ajax请求中,您只选择刚刚到达响应的匹配元素,而不是在任何地方创建重复的日期选择器。
答案 1 :(得分:0)
第一个停靠点是阅读这个问题,如果你还没有:
jQuery live() failing with jQuery UI datepicker
“我已将它绑定到灯箱第一次出现时的灯箱输入,但之后无法正常工作。”
“当灯箱关闭时,我会将其内容重新附加到页面上(为了不丢失内容div),这似乎会杀死live()调用。”
答案 2 :(得分:0)
日期选择器是文本输入配合上的单击功能。所以你可以轻松地去:
$('#datepicker').live('click', function(){$(this).datepicker($.datepicker.regional['en']);})