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(“锁定”);