jquery - document.ready 中声明的函数未定义?

标签 jquery function jqgrid scope

如果我在 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");
....

为什么?

最佳答案

因为在 Javascript 中,在其他函数中声明的函数是本地引用,并且在其父函数的范围之外不可见。如果您想让 updateSizeOptions 函数全局可访问,您需要在全局命名空间中分配对它的引用,例如 window 属性:

window.updateSizeOptions = updateSizeOptions;

关于jquery - document.ready 中声明的函数未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455811/

相关文章:

javascript - JQuery 创建一个随机的 16 位数字可能吗?

sorting - 我如何使用 loadonce :true and rownum:5 对 jqgrid 数据进行排序

javascript - jqGrid 中调用 jQuery 函数的自定义格式化程序

jquery - Jqgrid自定义编辑模式和验证

php - __construct 和与类同名的函数有什么区别?

python - 使用滚动 12 个月窗口将自定义函数应用于 Pandas Group

javascript - 为什么pushState() 不适用于干净的URL?

jquery - 使用 getScript 时 Firefox 中格式错误

javascript - 使用 getScripts 异步获取 JavaScript

c - 提示用户输入整数值并检查有效输入的函数