在$ .load之后绑定jQuery UI插件

时间:2010-05-02 02:49:59

标签: javascript jquery jquery-plugins

我有一个函数将jQuery UI DatePicker(带有我的选项)附加到传递的jQuery对象:

function bindDatepicker($obj)
{
  if ($obj == null) $obj = $("input.date");

  $obj.datepicker(
    { 
      appendText: '(yyyy-mm-dd)',
      autoSize: true,
      changeMonth: true, 
      changeYear: true, 
      closeText: 'Done',
      dateFormat: 'yy-mm-dd',
      defaultDate: '+1m', 
      minDate: +1, 
      numberOfMonths: 2
    }
  );
}

我在每个页面的开头调用它来将它绑定到输入元素:

$(function() {
  bindDatepicker($("input.date"));
});

这很好用。当我使用$ .load()加载表单元素时,我的问题就出现了。我无法将DatePicker附加到任何加载的元素。例如:

$("#id").load("urlToLoad", function() {
    bindDatepicker($("input.date"));
});

将表单元素加载到div中就好了,但不会附加DatePicker。

这是为什么?我很难过。 :(

谢谢, 汤姆

1 个答案:

答案 0 :(得分:2)

您需要使用jQuery .live()方法。它将“监听”符合您的选择标准的任何新元素。

编辑:所以我原来的回答是错误的。 .live()方法仅用于绑定事件。正如您在评论中指出的那样,如果没有要绑定的事件,您实际上无法绑定到事件。所以我决定掀起一个样本,看看我是否可以重现你的问题,我可以。更奇怪的是,如果我尝试使用基于属性的选择器而不是类选择器,它就能很好地工作。

所以不要做

$('input.date').datepicker();

我在那里添加了一个名为'type'的新属性,并有以下选择器:

$('[type=date]').datepicker();

一切正常。

我不知道为什么会这样,但我只能假设它是jQuery的错误。