jquery中的悬停、单击和if语句问题

jquery中的悬停、单击和if语句问题,jquery,jquery-hover,Jquery,Jquery Hover,我有一个功能,在悬停时第一次单击时禁用链接操作,然后在第二次单击时允许链接操作: <script type="text/javascript"> $('document').ready(function () { $("#menu ul > li").hover(function () { i = 1; if ($('div', this).children().size() > 0) {

我有一个功能,在悬停时第一次单击时禁用链接操作,然后在第二次单击时允许链接操作:

<script type="text/javascript">
    $('document').ready(function () {

        $("#menu ul > li").hover(function () {
            i = 1;
            if ($('div', this).children().size() > 0) {
                $('.drop', this).addClass("locked");
            }

            $('.locked').click(function () {
                if (i < 2) {
                    i++;
                    console.log("if 1 i = ", i);
                    return false;
                } else {
                    i = 1;
                    console.log("if 2 i = ", i);

                }
            });

            clearTimeout($.data(this, 'timer'));
            $('div', this).stop(true, true).delay(300).slideDown(200);
        }, function () {
            $.data(this, 'timer', setTimeout($.proxy(function () {}, this), 100));
            $('div', this).stop(true, true).slideUp(100);
            $('.drop', this).removeClass("locked");
            i = 1;

        });

    });
</script>

$('document').ready(函数(){
$(“#菜单ul>li”)。悬停(函数(){
i=1;
if($('div',this).children().size()>0){
$('.drop',this.addClass(“锁定”);
}
$('.locked')。单击(函数(){
如果(i<2){
i++;
console.log(“如果1 i=”,i);
返回false;
}否则{
i=1;
console.log(“if 2 i=”,i);
}
});
clearTimeout($.data(此为“计时器”);
$('div',this).stop(true,true).delay(300).slideDown(200);
},函数(){
$.data(这个'timer',setTimeout($.proxy(函数(){},这个),100));
$('div',this).stop(true,true).slideUp(100);
$('.drop',this.removeClass(“锁定”);
i=1;
});
});
在第一次悬停时,函数工作正常,但是如果我让函数运行而不单击鼠标,请将鼠标移出悬停元素,然后返回并再次“删除”菜单。如果在中,请单击停止工作。在控制台中,if子句似乎是直接循环的。 知道为什么吗?


<script type="text/javascript">
    var  i = 1;//yuo may want to re-name this since it is now global
    $('document').ready(function () {

        $("#menu ul > li").hover(function () {
            i = 1;
            if ($('div', this).children().size() > 0) {
                $('.drop', this).addClass("locked");
            }



            clearTimeout($.data(this, 'timer'));
            $('div', this).stop(true, true).delay(300).slideDown(200);
        }, function () {
            $.data(this, 'timer', setTimeout($.proxy(function () {}, this), 100));
            $('div', this).stop(true, true).slideUp(100);
            $('.drop', this).removeClass("locked");
            i = 1;

        });

         $('.locked').click(function () {
                if (i < 2) {
                    i++;
                    console.log("if 1 i = ", i);
                    return false;
                } else {
                    i = 1;
                    console.log("if 2 i = ", i);

                }
            });

    });
</script>
var i=1//yuo可能想重新命名,因为它现在是全球性的 $('document').ready(函数(){ $(“#菜单ul>li”)。悬停(函数(){ i=1; if($('div',this).children().size()>0){ $('.drop',this.addClass(“锁定”); } clearTimeout($.data(此为“计时器”); $('div',this).stop(true,true).delay(300).slideDown(200); },函数(){ $.data(这个'timer',setTimeout($.proxy(函数(){},这个),100)); $('div',this).stop(true,true).slideUp(100); $('.drop',this.removeClass(“锁定”); i=1; }); $('.locked')。单击(函数(){ 如果(i<2){ i++; console.log(“如果1 i=”,i); 返回false; }否则{ i=1; console.log(“if 2 i=”,i); } }); });
以下是我自己的解决方案:

<script type="text/javascript">

    $('document').ready(function() {
    var  drop_i = 1;

               $("#menu ul > li").hover(function () {

               if($('div', this).children().size() > 0){
               $('.drop', this).addClass( "locked" );                                      
               }                   
               clearTimeout($.data(this, 'timer'));
                  $('div', this).stop(true, true).delay(300).slideDown(200);
                },                     
                function () {
               $.data(this, 'timer', setTimeout($.proxy(function() {
              }, this), 100));
               $('div', this).stop(true, true).slideUp(100);
               $('.drop', this).removeClass( "locked" );


              });

                $('.drop').click(function(){
                console.log("clicked");
                if (drop_i < 2 && $('.drop').hasClass('locked')) {                   
                 drop_i++;
                 console.log("if 1 i = ", drop_i);
                 return false;
                }
                else { 
                 drop_i = 1;
                 console.log("if 2 i = ", drop_i);
                //return true;
                }                   
              });                    


           });



         </script> 

$('document').ready(函数(){
var-drop_i=1;
$(“#菜单ul>li”)。悬停(函数(){
if($('div',this).children().size()>0){
$('.drop',this.addClass(“锁定”);
}                   
clearTimeout($.data(此为“计时器”);
$('div',this).stop(true,true).delay(300).slideDown(200);
},                     
函数(){
$.data(此'timer',setTimeout($.proxy(function()){
}(本),;
$('div',this).stop(true,true).slideUp(100);
$('.drop',this.removeClass(“锁定”);
});
$('.drop')。单击(函数(){
控制台日志(“单击”);
if(drop_i<2&&$('.drop').hasglass('locked')){
drop_i++;
console.log(“如果1 i=”,则删除i);
返回false;
}
否则{
下降i=1;
console.log(“if 2 i=”,drop_i);
//返回true;
}                   
});                    
});

现在可以正常工作。

你能发布一个JSFIDLE链接吗?这里是小提琴对不起,这只允许第一次点击链接。我只需要在第二次点击时启动链接。参见js fiddle:I还添加了:drop_I=1;在:$('.drop',this.removeClass(“锁定”);