0

マウスを介して Web ページ内でオブジェクトをドラッグするときに使用する JavaScript に追加の初期値を追加しようとしています。

初期化したばかりのグローバル変数を使用しようとすると、次のエラーが発生します。

"Uncaught ReferenceError prefixPicSlot が定義されていません

mouseup/down イベントによって呼び出されるドラッグ関数に入ると、これらの変数にアクセスできます。初期化関数内では使用できないようです。

呼び出される初期化コードは次のとおりです。

initialize:function()
{

    this.getJsonParams()
    this.getPicnVidImageParams()
    document.onmousedown=this.drag      // Manages when the mouse is down and dragging 
    document.onmouseup=this.videoslot   // Manages when the dragging has been stopped
    $(document).on("change", "form", this.formChange)
    $(document).on("click", "button", this.selectButton)

}, //initialize

getJsonParams は、その名前が示すように、サーバーからパラメーターを取得し、正常に動作します。

getPicnVidParams は、追加されたばかりの新しい初期関数であり、getJsonParams で設定された変数を使用して、マウス イベントで使用される新しい変数を作成します。この関数を this.drag 関数に入れると問題なく動作しますが、すべてのマウス イベントで呼び出すよりも、開始時に 1 回だけ呼び出す方が効率的です。

getPicNvidParams で使用される変数を作成し、正常に動作する getJsonParams のコードを次に示します。

//Get Admin data....                     
jsAdmin = $.ajax("getJsAdmin" )
.done(function(data, textStatus, jsAdmin) { 
    // Success !!!
    var tmpText = jsAdmin.responseText.replace("[", "")
    tmpText = tmpText.replace("]", "")          
    admin = JSON.parse( tmpText)            
    vidPreviewHtml = admin.vidPreviewHtml
    debugStatus = admin.jsDiagnostics                        
    prefixPicSlot = admin.prefixPicSlot                      
    prefixVidSlot = admin.prefixVidSlot                      
})
.fail(function() { alert("getJsAdmin - error"); })

ここで getPicnVidParams のコードの最初の部分で、最初の部分で失敗します

非コメント行 - firstPicSlot = prefixPicSlot + "0" ...

getPicnVidImageParams:function(e){   

// get the important image params from the first picture and 
// video slots display

firstPicSlot = prefixPicSlot + "0"
firstPicSlotElem=document.getElementById(firstPicSlot.toString())
firstPicInnerHTML = firstPicSlotElem.innerHTML
firstPicSlot = "#" + firstPicSlot

firstVidSlot = prefixVidSlot + "0"
firstVidSlotElem=document.getElementById(firstVidSlot.toString())
firstVidInnerHTML = firstVidSlotElem.innerHTML
firstVidSlot = "#" + firstVidSlot

try{ picWidth = $(firstPicSlot).children("img").attr("width")}
catch(err)
{
    alert("FN: getPicnVidImageParams error (picWidth)" 
        + " \n"  +
        " firstPicSlot: "+ firstPicSlot
    ) 
}                                                                           

これらの初期化関数で設定されたグローバル変数にアクセスできないのは奇妙に思えますが、その設定はまだマウス イベント駆動関数で確認できます。

私はクロムを使用しています。

4

2 に答える 2

1

あなたの問題は、AJAXが非同期であるため、変数が割り当てられるthis.getPicnVidImageParams()前に実際に呼び出されていることです。ajax 呼び出しの関数の最後getJsonParams()に配置する必要があります。this.getPicnVidImageParams().done

于 2013-08-13T15:21:12.060 に答える