0

私のページの 1 つで jQuery UI の datepicker 関数を実行しています。それを取り除くと、次のように機能します。

<form>
    <input type="text" name="date" id="date" />
</form>
<script type="text/javascript">
    jQuery("#date").datepicker();
</script>

この部分が機能するので、jQuery と jQuery UI スクリプトが正しく含まれていることがわかります。

ここで、次のように、関数の 1 つから日付ピッカーを有効にします。

<form>
    <input type="text" name="date" id="date" />
</form>
<a href="JavaScript:test();">test</a>
<script type="text/javascript">
    function test() {
        alert(jQuery("#date")); // this works as expected
        jQuery("#date").datepicker(); // this throws an error
    }
</script>

しかし、datepicker 関数が関数内で実行されると、JavaScript はエラーTypeError: 'undefined' is not a function (evaluating 'jQuery("#date").datepicker()')をスローします。jQuery("#date") オブジェクトは使用できますが、関数のスコープ内で datepicker 関数を使用できないようです。

誰かがこれについて説明または回避策を持っていますか?

更新: ragnarok56 がコードの動作を示す jsfiddle を投稿した後、私は自分のページに戻って、何が影響しているのかをより注意深く調べました。これは、管理者が独自のヘッダーとフッター コードを追加してカスタマイズできる大規模なシステムの一部であり、管理者がフッターの古い jQuery スクリプトへの独自のリンクを追加していたことが判明しました。それを削除すると、コードが期待どおりに機能しました。jQueryのインクルードも彼のものに置き換えましたが、コードはまだ機能していたので、問題は古いバージョンのjQueryではなく、jQueryを2回組み込んでいるようです。これにより、jQuery 関数が関数内で機能し、関数外では機能しなくなるのは奇妙に思えます。そのため、誰かがその動作の説明を提供できる場合に備えて、これを開いたままにします。

4

1 に答える 1

1

アップデートによると、問題は jQuery UI の後に jQuery が含まれていたことです。

jQuery UI が初期化されると、基本的にそれ自体が既存の jQuery コードに組み込まれます。その後、別のバージョンの jQuery を含めると、元の jQuery (jQuery UI が添付されています!) は破棄されます。これが、datepicker などの UI 固有のメソッドがエラーをスローする理由です。

jQuery を 1 回だけ含める方が確実に優れていますが、2 番目の jQuery インスタンスの後に jQuery UIを再度含めると (おそらく) 正しく機能します。

編集: 関数の外で動作する理由は、jQuery の 2 番目のコピーが最初のコピーを上書きする前に実行された可能性が非常に高いためです。関数は後で実行されますか?

于 2013-05-29T02:34:51.477 に答える