5

我不太确定这里发生了什么,并且觉得我可能遗漏了一些可能很明显的东西,但是我有一个 if else ,其中两个语句都被调用了。如果有人能对此有所了解,那就太好了。下面的代码使用 asual 并且应该检测是否 $('#' + $.address.hash()已经加载了 div。然而,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');



        }


    }); 
4

3 回答 3

9

这里的问题不是由您粘贴的代码引起的。代码可能多次运行并触及多个分支的唯一方法是它被执行多次。查看周围的代码中可以多次调用它的地方。

于 2012-09-18T04:02:28.953 回答
1

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

因此,任何面临相同问题的人都可以通过添加alertor来验证console.log

于 2016-06-10T13:11:57.233 回答
0

当我逐步调试时,我看到了相同的行为。结果是我附加了多个点击事件,所以代码被触发了 n 次。

于 2013-09-17T00:45:58.523 回答