1

由于我的项目有点超载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 中使用“全局变量”? 或者它只是那个用例(?)..我不这么认为......

...我也尝试过defer="defer"通话stage1.js,在 head-main 页面内.aspx 我没有尝试成功

4

1 回答 1

2

我认为问题在于您的线路:

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

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

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

有很多模式可以帮助最小化全局范围内的变量,例如简单命名空间模式。但本质上,变量作用域就是函数作用域。

于 2012-12-30T18:45:02.607 回答