在Javascript/jQuery中消失变量内容

在Javascript/jQuery中消失变量内容,javascript,jquery,html,variables,Javascript,Jquery,Html,Variables,基本上我的问题是,我有和几个div的交互,这些div会变成不同的颜色,这取决于鼠标是否在它们上面。但它们都调用同一个函数,根据用户在管道早期设置的全局标志,该函数的执行情况会有所不同。 问题是该标志的值未定义,如下所示: var flag = true; $("#btn0").on('mouseover', function(){ alert(flag) // true btnRollover(0); }); function btnRollover(ID){ a

基本上我的问题是,我有和几个div的交互,这些div会变成不同的颜色,这取决于鼠标是否在它们上面。但它们都调用同一个函数,根据用户在管道早期设置的全局标志,该函数的执行情况会有所不同。
问题是该标志的值未定义,如下所示:

var flag = true;

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

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

function btnRollover(ID){

    alert(flag) // undefined
}
同样的问题也发生在我以后需要使用的所有其他变量上,但让我困惑的是,我还有另外两个具有类似结构的交互,它们工作得非常完美
有人知道这是什么原因吗


附言:我不能发布全部内容,因为:1)我没有权限这样做;2) 完整的代码超过15000行。

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

1) 在整个页面中搜索“flag”,确保没有任何其他设置或更改方式超出您的预期


2) 检查
var flag=true的范围出现。页面加载了吗?转到下一个疑难解答步骤,否则,如果它位于方法内部或其他具有更局部作用域的内容,请将其移出并使其更全局。

下面是一些疑难解答步骤,如果我有完整的代码,请尝试一下。另外,您是否检查了控制台的错误?出现此问题时,您在控制台中收到的实际错误是什么

1) 在整个页面中搜索“flag”,确保没有任何其他设置或更改方式超出您的预期


2) 检查
var flag=true的范围出现。页面加载了吗?转到下一个疑难解答步骤,否则,如果它在一个方法或其他具有更局部作用域的东西中,请将其从那里取出并使其更全局。

为了冒险猜测,我怀疑您可能将您的标志变量的作用域设置为就绪事件处理程序(或其他处理程序),因此它实际上不是全局的,并在就绪事件处理程序之外声明函数。比如:

$(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
}

。。。如果这是正确的,那么您需要将您的标志和函数声明在同一范围内(即,既在就绪事件中,也在就绪事件之外)。

为了冒险猜测,我怀疑您可能将您的标志变量的范围限定在就绪事件处理程序(或其他处理程序)上,这样它实际上就不是全局的,并在就绪事件处理程序之外声明函数。比如:

$(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
}
。。。如果这是正确的,那么您需要将您的标志和函数声明在同一范围内(即,要么在就绪事件中,要么在就绪事件之外)。

我认为问题出在哪里。 1.我认为你们应该搜索flag,确保并没有其他东西像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>
test1
测试2
测试3
测试4
var标志=真;
$(“.test”).on('mouseover',function(){
警报(标志)//true
btnRollover($(this.attr(“id”));
});
功能btnRollover(ID){
警报(“ID=”+ID)
警报(“flat=“+标志)//未定义
}
我认为这是个问题。 1.我认为你们应该搜索flag,确保并没有其他东西像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>
test1
测试2
测试3
测试4
var标志=真;
$(“.test”).on('mouseover',function(){
警报(标志)//true
btnRollover($(this.attr(“id”));
});
功能btnRollover(ID){
警报(“ID=”+ID)
警报(“flat=“+标志)//未定义
}


您必须在其中一行中“标记”某些内容。。。我尝试复制上述内容,但效果很好,因此无法确定在没有更多信息的情况下是否可以帮助您。根据您提供的代码,我无法复制此内容:在其他位置检查您的标志或将标志传递给您的函数。我检查了好几次,标志在任何地方都没有更改,只是读取。就像我说的,我以前用过同样的结构,它也工作得很好。我不明白为什么它不能在这一行上运行看到flag和ID变量的作用域你必须在其中一行中做一些“flag”。。。我尝试复制上述内容,但效果很好,因此无法确定在没有更多信息的情况下是否可以帮助您。根据您提供的代码,我无法复制此内容:在其他位置检查您的标志或将标志传递给您的函数。我检查了好几次,标志在任何地方都没有更改,只是读取。就像我说的,我以前用过同样的结构,它也工作得很好。我不明白为什么它不在这个版本上工作的原因看到完整版本中flag和ID变量的作用域我有一个空的全局标志,它从用户那里接收值(滚动代码只在之后调用,并且没有其他地方更改值。至于错误,它不指控任何错误,除了未定义的值之外,您是否可以粘贴准确的错误、任何行号引用或任何其他随附内容?“TypeError:interactionList[currentInteraction][ID]未定义。第3236行”问题在于currentInteraction,它是以与标志相同的方式传递的值。我不明白的是,为什么这个标志和所有其他全局变量都消失了,这就是我问的原因。该错误不一定指向“标志”或“currentInteraction”h