javascript vs jQuery custom / Global Variables scope

时间:2012-12-30 18:33:33

标签: javascript jquery asp.net

因为我的项目有点过载javascript& jQuery个脚本, 我在尝试将所有内容分成几个部分时遇到问题,...比如类别阶段 ......

之前这两个调用,即“当前项目”调用,

 
<head>
    //i am loading the jQuery & jQuery-UI... and then :

    // right after jQuery comes my first section of project
    <script type="text/javascript" src="jsV2\jQueryAjaxNoPostBack.js"></script>
    <script type="text/javascript" src="jsV2\stage1.js" ></script>
    <script type="text/javascript">
            // is valid in stage1.js , naturally...
            var jsTxtVal = document.getElementById("TBX_TableSelectorFirstStage");

            //and that won't work
            var jQueryTxtVal= $('#TBX_TableSelectorFirstStage').val();
    </script>
</head>

并在该分隔文件中尝试

 
//stage1.js

//---- before ready()-------
//won't work
var jQueryTxtVal= $('#TBX_TableSelectorFirstStage').val();

//works 
var jsTxtVal = document.getElementById("TBX_TableSelectorFirstStage");

$('document').ready(function () {


var TBX_TableSel = $('#TBX_TableSelectorFirstStage');
var jQueryTxtVal= $('#TBX_TableSelectorFirstStage').val();
var jsTxtVal = document.getElementById("TBX_TableSelectorFirstStage");

$('.someElement's Class).click(function () {

    // this will not work unless i will assign "jQueryTxtVal" right here .

    alert(jQueryTxtVal);


   //and... this will work no matter where the assignment took place .
   //either in main page (i call it "the globlas" of project)
   //or at the top of every "section" of project...

    alert(jsTxtVal );

   });

现在,如果我使用 plain JavaScript,我甚至可以为所有方法设置一部分全局变量......几乎在任何地方,例如在<sctipt></srctipt>下jquery,在主页.aspx

所以我想知道,我怎么能在jQuery中使用“globals”? 或者它只是用例(?)..我不这么认为......

...我还在defer="defer"电话上尝试stage1.js,在主页.aspx内 没事我尝试成功

1 个答案:

答案 0 :(得分:2)

我认为问题在于您的行:

var jQueryTxtVal= $('#TBX_TableSelectorFirstStage').val();

在jQuery文档就绪处理程序之外,几乎可以肯定在dom准备就绪之前执行。

尝试将其放入您的处理程序中。这也将有助于您的代码,因为变量jQueryTxtVal将是就绪处理函数的本地,并且不会污染全局范围(您应该避免的事情)

有许多模式可以帮助最小化全局范围中的变量,例如简单的命名空间模式。但实质上,变量范围是功能范围。