0

ユーザー定義関数を呼び出そうとすると、スコープに問題があると思います。

私のユーザー定義関数は外部ファイルにあり、次のとおりです。

alert("1");//executes
(function(jQuery){
    alert("2");//executes
    jQuery.fn.slider = function(params) {
    alert("3"); //never hits because the function is never called.
    //code here
    };
})(jQuery);

私はこれを呼び出してみます:

<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(function(){
    alert("1-2");//This executes.
});     

jQuery(document).ready(function(){
    jQuery("#slider").slider({//Function doesn't exist error
        slideSize: 5,
    duration: 300,
    photos: []
    });
});    
// ]]></script>

jQueryオブジェクトが存在するかどうかを確認するためだけに、そのアラートをそこに入れました。ページにもプロトタイプ コードがあるため、noConflict を使用しています。

この質問https://stackoverflow.com/a/4083362で読んだことから、次のようなことをしなければならないと思います:

window.slider = jQuery.fn.beerSlider;

次のような方法でアクセスします。

slider("#slider").myPlugin();

myPlugin はどこにあるのでしょうか? しかし、それは正しくないと確信しています。

私のスライダーのhtmlは次のとおりです。

<div id="slider">
    <a href="#"><img src="../images/1.jpg" alt="" border="0" /></a> 
    <a href="#"><img src="../images/2.jpg"alt="" border="0" /></a> 
</div>

私が問題を抱えている理由を説明してくれる人はいますか?

編集:「jquery-1.8.3.min.js」が最初に含まれており、次に行があり$.noConflict();ます。次に、プロトタイプ フレームワークを使用して外部ファイルをインクルードします。次に、ユーザー定義関数を含めて、最後に呼び出します。しかし、関数を呼び出す直前に、匿名のjQuery関数を使用して行を実行するため、関数を呼び出すまでにjQueryが定義されていると考えましたalert("1-2");//this executes

アラートの順序は次のとおりです: (1、2、1-2)

jsfiddle が正常に動作していることがわかります。コードの違いを確認しようとしています。私のページにプロトタイプ フレームワーク コードがあるという事実と何か関係があるのでしょうか? ここに記載されている内容を使用$.noConflict()して従っていますhttp://docs.jquery.com/Core/jQuery.noConflict

注: この関数は、jQuery JavaScript ファイルをインクルードした後、競合する他のライブラリをインクルードする前に呼び出す必要があります。また、jQuery が最後にインクルードされた場合は、競合する他のライブラリが実際に使用される前にも呼び出す必要があります。jQuery.js ファイルの最後で noConflict を呼び出して、$() jQuery エイリアスをグローバルに無効にすることができます。jQuery.noConflict は jQuery への参照を返すため、jQuery オブジェクトの $() エイリアスをオーバーライドするために使用できます。

編集 2: わかりました。では、の使用法に関する別のページを見つけましたjQuery.noConflict()。それは、注文について別のことを教えてくれます。 http://docs.jquery.com/Using_jQuery_with_Other_Libraries。最初に見つけたページは特定の人が編集できるように見えるので、最初のページは間違っていると思います。しかし、2 番目のページをたどった後も、私のセットアップはまだ機能していないようです。

ここに私のサイトへのリンクがあります: http://tinyurl.com/d8ewd9a 問題のページの部分は、作業中のスライダーのすぐ下にあります。Jasper Group、ARD、ALLsteel などの画像。私の質問では、実際に使用しているものから ID の一部を少し変更しました。

4

1 に答える 1

0

私は問題が何であるかを知りました。ページに 2 番目の jQuery インクルードがあったようです。そのため、関数を追加した後、jQuery を再定義していました。そのため、呼び出してみると未定義でした。

今でも忘れられないことがあります。

助けてくれてありがとう。

于 2012-12-19T16:24:29.810 に答える