Javascript / jQuery,if和else语句都被执行

时间:2012-09-18 02:24:44

标签: javascript jquery

我不太确定这里发生了什么,并且觉得我可能会遗漏一些可能非常明显的东西,但我有一个if else,其中两个语句都被调用。如果有人能够对此有所了解,那就太棒了。下面的代码是使用asual,应该检测是否已加载div $('#' + $.address.hash()。但是,if和else事件都是按顺序触发的。实际上,else语句会引发两次......

$('#lmit_back').show(400, function() {
    if($('#' + $.address.hash() ).length == 0) {
        $('#init').load('inithandler.php', { 'address' : $.address.hash() }, function() {
            $('#' + $.address.hash()).fadeIn(1000, function() {
                $('#remn').load('pagehandler.php',{ 'address' : $.address.hash() });
            });
        });
    }  
    else {
        alert('hey');
    }
});

以下是所有代码。我无法确定哪些因素可能导致它执行两次,除非它与address.change有关,我不熟悉它。

if(($ .address.hash()=='')){$ .address.hash('home');}

    $('#lmit_back').click(function() {

            $.address.hash('home');

    });


    $.address.change( function() {  



        if (!($.address.hash() == 'home')) 
        {



        var exception = '.' + $('[href="#' + $.address.hash() + '"]').parent().attr('class');


            $('#left_menu_bar li:not(' + exception + ')').hide(300,function() {

                $(exception).show( function() {

                    $('#left_menu_bar').animate({ width:'100%'},400, function() { 

                        $('#lmit_back').show(400, function() {


                                if ($('#' + $.address.hash() ).length === 0)
                                {

                                    $('#init').load('inithandler.php', { 'address' : $.address.hash() } , function() { 

                                        $('#' + $.address.hash()).fadeIn(1000, function() {

                                            $('#remn').load('pagehandler.php',{ 'address' : $.address.hash() });

                                        });



                                    });

                                }
                                else
                                {

                                alert('nigs');

                                }

                        });

                    });

                });

            });



        }
        else
        {




            $('#left_menu_bar').animate({ width:'251px'}, function() { 

                $('#left_menu_bar li').show( function() {

                    $('#lmit_back').hide();

                });

            });



            $('#left_menu_bar').css('width','251px');



        }


    }); 

3 个答案:

答案 0 :(得分:8)

此处的问题不是由您粘贴的代码引起的。代码可以多次运行并且执行多个分支的唯一方法是,如果它被执行多次。查看周围的代码,了解可以多次调用它的地方。

答案 1 :(得分:1)

我遇到了类似的问题,在调试时如果条件为真,它也进入了else块。后来我在if/else块的&中添加了alert和console.log。实现了,否则实际上并没有被执行但是在调试时看起来就像是在其他地方。

因此,无论谁遇到同样的问题,都可以通过添加alertconsole.log进行验证。

答案 2 :(得分:0)

我看到了同样的行为,当我逐步调试时它起作用了。结果是我附加了多个点击事件,因此代码被触发了n次。