0

現在、特定の要素に関連付けられているタイムスピナーがある場合とない場合がある入力テキスト フィールドがあります。場合によっては、ページに適切に表示するために、(無効にするのではなく) タイムスピナー機能を完全に削除する必要があります。

現在、次のように要素にタイムスピナーが存在するかどうかを確認するコードがあります。

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

これは、ページが最初に読み込まれたときは正常に機能しますが、次の例外がスローされます。

初期化の前にタイムスピナーのメソッドを呼び出すことはできません。メソッド「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

定義されているかどうかを$("#ElementOfInterest").timespinner !== undefined確認するだけ$().timespinnerで、プラグインがロードされている限り定義されます。要素にスピナーが追加するクラスがあるかどうかを確認するのはどうですか。 if ($("#ElementOfInterest").hasClass('ui-spinner-input'))

于 2014-10-17T21:05:37.343 に答える
1

試す:

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

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

于 2014-10-17T16:02:05.867 に答える