基本上我的问题是这个,我和几个div的交互变成了不同的颜色,这取决于鼠标是否在它们之上。但是所有这些函数都调用相同的函数,根据用户在管道中较早设置的全局标志,它将执行不同的操作 问题是标志的值变得未定义,如下所示:
var flag = true;
$("#btn0").on('mouseover', function(){
alert(flag) // true
btnRollover(0);
});
function btnRollover(ID){
alert(flag) // undefined
}
同样的问题发生在我稍后需要使用的所有其他变量上,但令我感到困惑的是,我有2个其他类似结构的互动,完美运行!
有谁知道是什么原因造成的?
答案 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)
示例
<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>