Javascript 存储在全局变量中的函数不';打电话时不要跑

Javascript 存储在全局变量中的函数不';打电话时不要跑,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,我是一个新手,也是这个网站的新手,所以请告诉我是否有我应该做的事情来改进这个帖子。无论如何,我有一个在我的站点中经常重复使用的函数,所以我将它存储在一个全局变量中,并希望在单击某个按钮时调用它 代码如下所示(见下文)。我的问题是,尽管我可以确认按钮单击尝试调用函数,但显然它从未实际调用过(我的任何警报都不会触发,对文本字段的更改也不会保存)。所有这些都包含在$(文档)中。read(函数… 我是不是在什么地方犯了一个愚蠢的错误,还是我明显做错了什么 $(document).ready(functi

我是一个新手,也是这个网站的新手,所以请告诉我是否有我应该做的事情来改进这个帖子。无论如何,我有一个在我的站点中经常重复使用的函数,所以我将它存储在一个全局变量中,并希望在单击某个按钮时调用它

代码如下所示(见下文)。我的问题是,尽管我可以确认按钮单击尝试调用函数,但显然它从未实际调用过(我的任何警报都不会触发,对文本字段的更改也不会保存)。所有这些都包含在
$(文档)中。read(函数…

我是不是在什么地方犯了一个愚蠢的错误,还是我明显做错了什么

$(document).ready(function () {

//Description:
//Global wrapper variable that contains all global functions. These include:
//  1. saveAll: Saves all values not stored in session data to hidden fields     - this includes
//          all added ingredient information. This allows us to manually pass values between 
//          client and server to save to db and also means we can eliminate Null values in table 
//          storage using a manual delimiter.
//----------------------------------------------------------------------------------------------
var Global = (function () {
    return {
        saveAll: function () {
            alert("entering save");
            //start by creating an array and initializing the length of the for loop 
            var saveValues = [];
            var numVals = $('#HidRowCt').val();

            alert("numVals: " + numVals);
            //Now loop through each ingredient row and create a string containing all textbox values
            //in this case, we'll do so by creating an array and then combining the values with a custom delimiter
            //the strings will then be saved, one by one, into the saveValues array, which will be serialized as a JSON object,
            //stored in a hidden field, and passed to the server
            for (i = 1; i < numVals; i++) {
                var TxtIngName = $('#TxtIngName' + i).val();
                var TxtIngNumUnits = $('#TxtIngNumUnits' + i).val();
                var SelIngUnits = $('#SelIngUnits' + i).val();
                //make temporary array and string
                var saveArr = new Array(TxtIngName, TxtIngNumUnits, SelIngUnits);
                var saveStr = saveArr.join("-||-");

                saveValues.push(saveStr);
            }

            alert("Save Values: " + saveValues);
            //this will automatically escape quotes, delimited with ","
            var jsoncvt = JSON.stringify(saveValues);

            $("#HidSave").val(jsoncvt);
        }
    };
});

//----------------------------------------------------------------------------------------------
//Description:
//Hijack the click event for the save button. Saves values not saved in session data.
//
//Functions:
//  Global.saveAll()
//----------------------------------------------------------------------------------------------
$("#SaveChanges").data.clickEvent = $("#SaveChanges").attr('onClick'); //save onclick event locally
$("#SaveChanges").removeAttr('onClick'); //and remove the onclick event
$('#SaveChanges').on('click', function (event) {

   Global.saveAll();
    //eval($("#SaveChanges").data.clickEvent); //now go ahead with the click event
});
$(文档).ready(函数(){
//说明:
//包含所有全局函数的全局包装器变量。这些函数包括:
//1.saveAll:将未存储在会话数据中的所有值保存到隐藏字段-这包括
//所有添加的成分信息。这允许我们在
//客户机和服务器保存到数据库,也意味着我们可以消除表中的空值
//使用手动分隔符的存储。
//----------------------------------------------------------------------------------------------
变量全局=(函数(){
返回{
saveAll:function(){
警报(“输入保存”);
//首先创建一个数组并初始化for循环的长度
var saveValues=[];
var numVals=$('HidRowCt').val();
警报(“numVals:+numVals”);
//现在循环遍历每个成分行,并创建一个包含所有文本框值的字符串
//在本例中,我们将通过创建一个数组,然后将值与自定义分隔符组合来实现
//然后将字符串逐个保存到saveValues数组中,该数组将序列化为JSON对象,
//存储在隐藏字段中,并传递给服务器
对于(i=1;i
嗯,我一直不明白为什么这不起作用,但是


我刚刚删除了全局变量,并为saveAll()创建了一个单独的函数,它可以正常工作。有趣的是,我有第二个应用程序,它使用的代码与使用global.saveAll的代码相同(具有相同的内部结构),工作正常,因此我在前面的一行中肯定有一些不寻常的地方


感谢您的建议!

尝试设置
window.Global=…
,因为声明
var Global
将范围设置为在就绪闭包内


然后您应该可以稍后使用它。

我刚刚删除了全局变量,并为saveAll()创建了一个单独的函数,它可以正常工作。

单击时是否出现任何错误?您的
I
缺少
var
,但这不是问题所在。您所说的“所有这些都包含在$(文档)中”。read(函数)是什么意思,您也可以显示该代码吗?这可能很容易成为问题,因为
var Global
不再是全局的。我在单击时没有收到任何错误,这是一个奇怪的部分。至于我代码中的位置,顶部看起来像是刚刚注意到的,您的iLife缺少调用
()
(考虑到其中没有局部变量,这是毫无用处的)。不过,应该仍然引发了一个异常。出于某种原因,它仍然没有运行。你能把你的代码放在上面或类似的东西上吗?还有,$('SaveChanges')真的存在吗?我不确定plnkr.co是什么,所以我不确定,但$('SaveChanges')确实存在(我已经检查了至少100次拼写,T.T希望这就是问题所在)。plnkr.co是您托管失败代码的地方,以便其他人可以帮助您调试它。了解您所做的工作不起作用的原因可能会更酷,尤其是在您试图不污染全局命名空间的情况下。