Javascript / jQuery中消失的变量内容

时间:2014-01-13 17:43:33

标签: javascript jquery html5 variables

基本上我的问题是这个,我和几个div的交互变成了不同的颜色,这取决于鼠标是否在它们之上。但是所有这些函数都调用相同的函数,根据用户在管道中较早设置的全局标志,它将执行不同的操作 问题是标志的值变得未定义,如下所示:

var flag = true;

$("#btn0").on('mouseover', function(){

    alert(flag) // true
    btnRollover(0);
});

function btnRollover(ID){

    alert(flag) // undefined
}

同样的问题发生在我稍后需要使用的所有其他变量上,但令我感到困惑的是,我有2个其他类似结构的互动,完美运行!
有谁知道是什么原因造成的?

P.S:我不能发布完整的内容,因为:1)我没有这样做的许可; 2)完整的东西是超过15.000行代码。

3 个答案:

答案 0 :(得分:2)

如果我有完整的代码,请尝试以下一些故障排除步骤。另外,您是否检查过控制台是否有错误?出现此问题时,您在控制台中收到的实际错误是什么?

1)在整个页面中搜索"标记",确保没有其他任何设置或以任何您不期望的方式更改

2)检查var flag = true;出现的范围。它是否在页面加载?转到下一个故障排除步骤,否则,如果它在一个方法或其他具有更多本地范围的内容中,则将其移出并使其更加全局化。

答案 1 :(得分:2)

为了冒险猜测,我怀疑你可能正在将你的标志变量限定为就绪事件处理程序(或其他一些处理程序),这样它实际上不是全局的,并且在你的就绪事件处理程序之外声明你的函数。类似的东西:

$(function() { // this is the start of the ready event handler
    var flag = true;
    $("#btn0").on('mouseover', function(){

      alert(flag); // flag is in scope
      btnRollover(0);
   });     
}); // end of ready event handler

function btnRollover(ID) {
    alert(flag); // flag is NOT in scope
}

...如果这是正确的,那么你需要在同一范围内声明你的标志和你的功能(即既可以在就绪事件中,也可以在两者之外)。

答案 2 :(得分:0)

我认为这个问题。 1.我认为你应该搜索旗帜,确保没有别的东西像erikrunia建议的那样。 2.第二个是我认为你已经在$(document).ready函数中声明了变量,所以当你试图在documetn.ready函数之外的函数中访问它时,这意味着它的作用域不在函数中我认为你应该声明位于脚本标记下方的jquery顶部的标志。

示例

 <div class="test" id="1">test1</div>  
 <div class="test" id="2">test2</div> 
 <div class="test" id="3">test3</div> 
 <div class="test" id="4">test4</div>  

<script>
var flag=true;

$(".test").on('mouseover', function(){

    alert(flag) // true
    btnRollover($(this).attr("id"));
});

function btnRollover(ID){
 alert("ID="+ID)
    alert("flat="+flag) // undefined
}

</script>