Javascript全局变量 var切换; 切换=1; 函数open(){ jQuery(window.bind(“beforeunload”,function(){$.post(“logout.php”);}) $.post(“online.php”,函数(数据){ $(“#Layer6”).html(数据); }); } 函数切换() { $(“#Layer4”).animate({height:'toggle'}); $(“#Layer6”).animate({height:'toggle'}); 如果(切换==1) { $(“#toggle”).attr('src',“toggle_up.jpg”); 切换=0; } 其他的 { $(“#toggle”).attr('src',“toggle#down.jpg”); 切换=1; } }

Javascript全局变量 var切换; 切换=1; 函数open(){ jQuery(window.bind(“beforeunload”,function(){$.post(“logout.php”);}) $.post(“online.php”,函数(数据){ $(“#Layer6”).html(数据); }); } 函数切换() { $(“#Layer4”).animate({height:'toggle'}); $(“#Layer6”).animate({height:'toggle'}); 如果(切换==1) { $(“#toggle”).attr('src',“toggle_up.jpg”); 切换=0; } 其他的 { $(“#toggle”).attr('src',“toggle#down.jpg”); 切换=1; } },javascript,variables,global,Javascript,Variables,Global,在这里,我将toggle定义为一个全局变量,并最初将其值设置为1。 在执行toggle()时,toggle的值应作为全局变量进行更改。在执行时,脚本似乎根本不起作用(toggle部分) 请帮忙。谢谢 您已将变量和函数命名为相同的名称(“切换”)。函数定义正在重写变量声明(因为它是在后面出现的)。将函数重命名为其他函数,例如doToggle() 发生这种冲突的原因是您可以将函数对象分配给Javascript中的变量。基本上,当您调用函数时,Javascript会查找具有该名称的函数或具有该名称的变

在这里,我将toggle定义为一个全局变量,并最初将其值设置为1。 在执行toggle()时,toggle的值应作为全局变量进行更改。在执行时,脚本似乎根本不起作用(toggle部分)


请帮忙。谢谢

您已将变量和函数命名为相同的名称(“切换”)。函数定义正在重写变量声明(因为它是在后面出现的)。将函数重命名为其他函数,例如
doToggle()

发生这种冲突的原因是您可以将函数对象分配给Javascript中的变量。基本上,当您调用函数时,Javascript会查找具有该名称的函数或具有该名称的变量,以防它包含对函数的引用:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
 <script type="text/javascript">
var toggle;
toggle=1;
function open(){
jQuery(window).bind("beforeunload", function(){$.post("logout.php");})
$.post("online.php",function(data){
$("#Layer6").html(data);
});
}

function toggle() 
{
$("#Layer4").animate({height:'toggle'});
$("#Layer6").animate({height:'toggle'});

if(toggle==1)
{
$("#toggle").attr('src',"toggle_up.jpg");
toggle=0;
}
else
{
$("#toggle").attr('src',"toggle_down.jpg");
toggle=1; 
}  

}

</script>

正如Cameron指出的,问题在于变量和函数具有相同的名称

另外,请记住jQuery有一个名为的方法。。。这不会导致冲突,因为这是
$
jQuery
的方法。。。但这可能会让阅读您的代码的人感到困惑

无论如何,这里有一个更简洁的方法来解决您的问题:

var variable = 3;
variable = function() { alert('Function called') };
variable();     // Calls the function, whose reference is stored in 'variable'

上面使用
向上
向下
连接到
#toggle
src
属性中

(count++%2?“向上”:“向下”)
将首先获取count的当前值(然后增加其值)并将其修改2。此值将为1或0。如果为1(true),
向上
被连接。如果为0(false),
down
被连接。递增是为了跟踪切换

需要注意的是,您可以将变量、函数和任何jQuery/其他在自动执行匿名函数中使用的代码包装起来,以便最大限度地减少全局名称空间的混乱,并在以后向页面添加更多脚本时减少变量名冲突的机会

var count = 1;

function toggle() 
{

    $("#Layer4").animate({height:'toggle'});
    $("#Layer6").animate({height:'toggle'});

    $("#toggle").attr('src',"toggle_" + (count++ % 2 ? "up" : "down") + ".jpg");

}
(function() { 
    var count = 1;
    function open() { ... }
    function toggle() { ... }
    $(function() {
        ...
    });
}());