如果我在document.ready中声明一个函数,我会收到一个错误。 喜欢这个
$(document).ready(function(){
function updateSizeOptions()
{
alert("updateSizeOptions");
}
var jGrid = $("#list_main");
jGrid.jqGrid({
url:'db.php?ajaxOp=getData',
colModel:[
$.extend(true,
{ name:'shape_id'
,index:'shape_id'
,edittype:'select'
,formatter:'select'
,editoptions: { onclick:"javascript:updateSizeOptions();" }
}
,{}
]
....
});
它将给出错误:“ReferenceError:未定义updateSizeOptions”。
但是,如果我将函数移到document.ready之外,一切正常。
喜欢这个
function updateSizeOptions()
{
console.debug("updateSizeOptions");
}
$(document).ready(function(){
var jGrid = $("#list_main");
....
为什么?
答案 0 :(得分:7)
因为在Javascript中,在其他函数中声明的函数是 local 引用,并且在其父函数的范围之外不可见。如果要使updateSizeOptions
函数可全局访问,则需要在全局命名空间中为其指定引用,例如window
属性:
window.updateSizeOptions = updateSizeOptions;
答案 1 :(得分:0)
因为您在传递给updateSizeOptions
的匿名函数中定义了函数$(document).ready
,所以updateSizeOptions
只能在该匿名函数中使用,除非您将其导出。 (即window.updateSizeOptions = updateSizeOptions
)
全局范围中定义的函数(或/和变量)在<{em> window
对象下字面定义,因此如果在全局范围内定义函数,则执行{{1你会看到它显示一个函数。 alert(window.updateSizeOptions)
将返回window.updateSizeOptions == updateSizeOptions
。
但是,如果您在本地范围内定义它,您将看到true
。
答案 2 :(得分:0)
范围。当您在$(document).ready
中放置某些内容时,只有在触发此事件时才会执行代码,并且除非事件全局设置,否则事件内部声明的变量和函数之类的内容不存在。
执行javascript:updateSizeOptions();
时,它会在全局范围内查找一个函数,在这种情况下不存在,因此undefined
。