【问题标题】:Turn Hover Event back on after disabling on Click?禁用点击后重新打开悬停事件?
【发布时间】:2013-08-21 17:45:29
【问题描述】:

我有一个评分脚本,它会根据您在列表上的悬停位置突出显示列表项。单击时,我禁用悬停事件以确保突出显示的列表项保持突出显示。然后我将运行一个 ajax 调用来保存特定项目的评级。然后我希望悬停事件重新打开。有什么建议?这是小提琴。 http://jsfiddle.net/defmetalhead/n76My/1/

   <ul class="beeRating">
      <li class="oneBee" id="1">1</li>
      <li class="twoBee" id="2">2</li>
      <li class="threeBee" id="3">3</li>
      <li class="fourBee" id="4">4</li>
      <li class="fiveBee" id="5">5</li>
   </ul>

【问题讨论】:

  • 是的,有很多不同的方法可以做到这一点,您可以在单击时简单地将类添加到容器中,并在需要时删除该类。在悬停函数中,检查容器是否有该类,如果没有,请悬停

标签: jquery hover mouseover mouseleave


【解决方案1】:

DEMO

试试这个我已经编辑了你的代码,它可以工作

var index=1;
$(".beeRating li").on({
    mouseover: function() {
        if(index==1)
        {
        $(this).addClass('stop');
        $("li").each(function(index,domEle) {
            $(domEle).css('opacity', '1');
            if( $(this).hasClass('stop') ) {
                return false;
            }
        })
        }
    },
    mouseleave: function() {
         if(index==1)
        {
        $(this).removeClass('stop');
        $("li").each(function(index,domEle) {
            $(domEle).css('opacity', '.25');
        })
        }
    },
    click: function() {
        var rating = $(this).attr('id');
        console.log(rating);
        index=0;

        $.ajax({    //call the function to do ajax request or do it here itself
           url: "<your url>"

           }).done(function() {   // important !! on done set the index as 1
              alert("success");
              index=1;  
            });
       }
});

希望对你有帮助,谢谢

【讨论】:

  • 这个答案非常接近。我会接受这个作为答案。但是,一旦单击,您必须将鼠标悬停在所有突出显示的项目上,然后才能设置新评级。不过我并不太担心。脚本将在加载时重置。
【解决方案2】:

试试这个:

var $ratings = $(".beeRating li");

function onMouseOver(obj){
    obj.addClass('stop');
    $("li").each(function(index,domEle) {
        $(domEle).css('opacity', '1');
        if( $(this).hasClass('stop') ) {
            return false;
        }
    });
}

function onMouseLeave(obj){    
    obj.removeClass('stop');
    $("li").each(function(index,domEle) {
        $(domEle).css('opacity', '.25');
    });
}

function onClick(obj){
    var rating = obj.attr('id');    
    console.log(rating);
    $("li").each(function(index,domEle) {
        $(this).removeClass('stop');
        $(this).off('mouseover mouseleave');
    })
}

function rebindEvents(){
    $ratings
        .off('click mouseover mouseleave')
        .on({
        mouseover: function() {
            onMouseOver($(this));
        },
        mouseleave: function() {
            onMouseLeave($(this));
        },
        click: function() {
            onClick($(this));
            //send ajax call here or show some delay and rebind all events again
            rebindEvents();
        }
   });
}

rebindEvents();

在这里工作:http://jsfiddle.net/n76My/3/

希望对你有帮助。

【讨论】:

  • maverickosama92 感谢您的努力,但是单击后列表不会保持突出显示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 2011-03-23
  • 2017-12-11
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
相关资源
最近更新 更多