标签中的jQuery访问变量?

时间:2010-02-23 10:34:23

标签: jquery html variables tags

基本上我需要在我的网页的body标签中指定一个JQuery变量,并在我的head标签中有一个函数读取它。这是我头标签中的功能(简化):

<script type="text/javascript">
$.noConflict();

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

$('a.paymentAdd').click(function(){

alert ("rowCount 1 = " + rowCount);

  rowCount++;

 });
 });

</script>

这在我的身体标签中:

<script type="text/javascript">

      jQuery(document).ready(function($) {
       var rowCount = 3;
       alert ("rowCount 2 = " + rowCount);
      });

     </script>

(我必须在我的body标签中指定变量,因为它是由PHP生成的,只在我模板的那部分可用。)

当页面加载时,我收到警告“rowCount 2 = 3”(正确)

当我点击“supportAdd”类的链接时,我收到警告“rowCount 1 = undefined”(错误 - 期待3?)

2 个答案:

答案 0 :(得分:2)

在任何document.ready函数之外的全局范围内声明变量:

var rowCount = 0;
jQuery(document).ready(function($) {
    rowCount = 3;
    alert ("rowCount 2 = " + rowCount);
});

答案 1 :(得分:1)

您已将变量声明为函数内的局部变量,因此它不存在于函数外部。一个简单的解决方案是将其声明为全局,并且它将在以后存活下来:

<script type="text/javascript">

  var rowCount = 3;

  jQuery(document).ready(function($) {
   alert ("rowCount 2 = " + rowCount);
  });

 </script>

但是,在全球范围内声明变量始终是潜在的冲突风险。如果页面上有不同的脚本,每个脚本声明它们自己的全局变量集,那么如果它们使用相同的变量名,它们将无法一起工作。如果你需要全局访问这样的几个变量,你可能想要创建一个全局对象作为命名空间并将它们作为属性放置:

var listData = {
   rowCount: 3,
   currentRow: null,
   sorting: 'Name'
}

然后您可以访问属性:

alert("rowCount2 = " + listData.rowCount);

当然,脚本之间仍然存在冲突的风险,但是对于单个全局对象而言,它远远少于一堆全局变量。