0

我无法确定给定jQueryUI小部件实例的类型。

Widget Factory的jQueryUI 文档提出了两种技术。从“实例”部分:

可以使用 instance() 方法从给定元素中检索小部件的实例。[...] 如果在与小部件无关的元素上调用 instance() 方法,则会返回 undefined。

:data 选择器还可以确定元素是否绑定了给定的小部件。

根据他们的示例,假设我初始化了一个日期选择器,然后代码检查它是否是一个日期选择器:

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

  $(function() {
    $("#datepicker").datepicker();

    // ...
    var i = $("#datepicker").progressbar("instance"); // i is undefined as expected
    console.log(i);
    var b = $("#datepicker").is(":data('ui-datepicker')"); // b = false, not sure why
    console.log(b);
    var i2 = $("#datepicker").datepicker("instance"); // this throws an exception
    console.log(i2);
  });

根据文档,我希望.is调用返回 true,最后一行返回实例(不抛出异常。)

JSFiddle 在这里。(您需要打开浏览器的控制台才能查看记录的输出。)

4

1 回答 1

0

事实证明,我上面列出的技术确实适用于许多 jQueryUI 小部件,例如按钮、进度条。

但是日期选择器有点奇怪。在 datepicker 初始化后查看 DOM,我看到 datepicker 作为新元素插入到命名元素之后。

要获取 datepicker 小部件实例,我需要从命名元素开始导航 DOM。要检查输入字段上是否有日期选择器,我们可以简单地检查类 hasDatepicker 的元素:

var isDatePicker = $("#datepicker").is(".hasDatepicker");

这适用于 jQueryUI 1.11.2,并且基于其他 SO 问题,它自 2009 年以来一直在工作。所以我想这是一种可靠的技术,但我不确定它是否记录在任何地方,或者保证将来的版本。

于 2016-01-28T22:50:15.507 回答