javascript - 在 $.load 之后绑定(bind) jQuery UI 插件

标签 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
    }
  );
}

我在每个页面的开头调用它以将其绑定(bind)到输入元素:

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

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

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

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

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

谢谢, 汤姆

最佳答案

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

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

所以而不是做

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

我在那里添加了一个名为“类型”的新属性,并具有以下选择器:

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

一切正常。

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

关于javascript - 在 $.load 之后绑定(bind) jQuery UI 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752286/

相关文章:

javascript - 属性更改后 JQuery 函数仍在运行

javascript - 为什么在 "contents"之前使用逗号

html - 如何从外部插件中检索选定的下拉值?

javascript - JQuery Tooltipster 插件不在 html 内容中显示带有超链接的工具提示

javascript - ESlint Angular - no-unused-vars 命中类型定义

javascript - 如何在 Firefox 扩展中实现观察者模式?

javascript - 如何使用 Web Crypto API 的 SubtleCrypto 验证已签名的 JWT?

javascript - jQuery UI - 多个自动完成 - 结果不一致

javascript - 在 DOM 完成之前渲染调用 - meteor blaze

javascript - Jquery:在您键入时过滤下拉列表