Cluetip をポストロードすると (つまり、ajax で取得し、スクリプト タグを本文に追加すると)、次の JavaScript エラーが発生します: $cluetip は未定義です。ただし、すべてが機能します。理由はありますか?
postload スクリプトは十分にテストされており、他に問題はありません。スクリプトが正しい順序でロードされていることを確認しました。
同様の問題がありましたが、最終的に解決した方法は次のとおりです(つまり、$cluetip
未定義のエラーメッセージはなくなりました)。
まず、これがあなたのシナリオに似ているかもしれない私のシナリオです。ページには、
<div id="sel_area"></div>
それは空であり、jquery/ajaxを使用して目的のHTMLコードを動的に生成し、上記のよう<select><option>...</option>...</select>
に挿入するというアイデアです#sel_area
$('#sel_area').html(data);
data は生成された HTMLselect
タグです。
ただし、私の問題は、動的に生成されたデータ結果を JSON または XML 形式で返してから、それに応じて処理していなかったためだと思います。代わりに、結果をそのまま通常の text/html として遅延して返していました。$cluetip
何を試しても is undefined エラーが発生し続けたとき、alert(data)
返されていることを確認するために使用することにしました。悲しいかな、データがエコーしただけでなく、html ページ全体が追加されていることを自分の目で見ました。解決策は私には明らかでした。XML または JSON プロトコルでデータを返すことに屈することなく、問題を解決するために次の小さな変更を加えました。
<select>
タグを生成するリモート スクリプトでの変更。最後の最後は
echo "$select_tag";
これをに変更しました
echo "$select_tag~";
つまり、末尾に ~ (チルダ) を追加して、select_tag
文字列出力と HTML ページとの間の区切りとして機能させました。
jQuery/AJAX方式の変更。
ライン交換しました
$('#sel_area').html(data);
次の行で:
data_list = data.split('~');
$('#sel_area').html(data_list[0]);
そこにあります。それはトリックを行います。split メソッドを使用すると、目的のデータをデータから簡単に切り離すことができました。select_tag
これは、〜 (チルダ) をフィールド セパレータとして使用するために賢明に挿入したselect_tag
ためです。お役に立てれば。
手がかりがわからないので、タイプミスかもしれ$cluetip
ませんが、定義されません(「 。$.cluetip
」に注意してください)。
ドキュメントをざっと見てみると、手がかりはある要素、つまりで呼び出さなければならない関数であると私は思います$('#somediv').cluetip(...)
。あなたが持っているグローバルなデフォルトが必要な場合$.cluetip.setup(...)
、しかしどちらの方法でも、それは定義せず$cluetip
、ただ$.cluetip
。
動的に読み込まれたスクリプトは、すぐには利用できません。スクリプトが完全に読み込まれるまで待つ必要がありますが、これは想像以上に複雑な問題です。