0

目前我有一个输入文本字段,它可能有也可能没有与该特定元素相关的时间微调器。在某些情况下,我需要完全删除时间微调器功能(而不是禁用它),才能在页面上正确显示它。

目前,我有代码来检查元素上是否存在时间微调器,如下所示:

if ($("#ElementOfInterest").timespinner !== undefined){
    $("#ElementOfInterest").timespinner("destroy");
}

这在页面首次加载时工作正常,但是,这会引发以下异常:

无法在初始化之前调用时间微调器上的方法;试图调用方法“销毁”

出于某种原因,检查undefined通过并尝试对不存在的元素进行时间调整。

因此,目前我的 UI 正常运行的唯一方法是将其包装在这样的try/catch块中:

if ($("#ElementOfInterest").timespinner !== undefined) {
    try {
        $("#ElementOfInterest").timespinner("destroy");
    } catch (error) {
    }
}

这行得通,但它相当草率。我宁愿检查成功并try/catch从代码中删除块。

我错过了一些特殊的检查或其他什么吗?这里发生了什么?

更新

我尝试了@GlenSwift 建议的以下代码:

if (typeof $("#ElementOfInterest").spinner("instance") !== 'undefined') {
    $("#ElementOfInterest").timespinner("destroy");
}

然而,这给了我这个例外:

无法在初始化之前调用微调器上的方法;试图调用方法“实例”

我也尝试过timespinner("instance"),但我只是回来了:

undefined 不是方法

所以看起来检查时间微调器的实例没有实现。

4

2 回答 2

1

尝试:

if (typeof $( "#ElementOfInterest" ).spinner( "instance" ) !== 'undefined') {
    $("#ElementOfInterest").timespinner("destroy");
}

参考:http ://api.jqueryui.com/spinner/#method-instance

于 2014-10-17T16:02:05.867 回答
1

好吧$("#ElementOfInterest").timespinner !== undefined,只需检查是否$().timespinner已定义,只要加载插件就可以了。如何检查元素是否具有微调器添加的类。 if ($("#ElementOfInterest").hasClass('ui-spinner-input'))

于 2014-10-17T21:05:37.343 回答