我正在尝试为拖动时使用的javascript添加额外的初始值 通过鼠标在网页中的对象。
当我尝试使用刚刚初始化的全局变量时,我得到了 以下错误:
“未定义的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函数中时,这个函数工作正常, 但只有在开始时调用它而不是每次鼠标事件都会更有效率。
以下是getJsonParams中创建变量的一段代码 在getPicNvidParams中使用并且工作正常:
//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
)
}
在这些初始化函数中设置全局变量似乎很奇怪 无法访问他们的设置,但在鼠标事件驱动中可以看到 功能
我正在使用Chrome。
答案 0 :(得分:1)
您的问题是AJAX是异步的,因此this.getPicnVidImageParams()
实际上是在getJsonParams()
分配您的变量之前调用的。您需要将this.getPicnVidImageParams()
放在ajax调用的.done
函数的末尾。
答案 1 :(得分:0)
getJsonParams
中的ajax调用是异步的(ajax中的第一个'a'),这意味着您的javascript程序将在后台发出HTTP请求时继续执行。基本上,在HTTP请求完成之前调用getPicnVidImageParams
。将getPicnVidImageParams
调用移动到ajax成功处理程序(done
函数)将为您提供所需的结果。