【问题标题】:rating stars issue with hovering and unselecting悬停和取消选择的星级问题
【发布时间】:2017-09-17 20:48:30
【问题描述】:

我在我的应用程序中实现了星级评分系统,但我遇到了两个问题。

首先,当我将鼠标悬停在选定的星上时.. 它显示它悬停但它应该显示它已选中。我尝试更改所选课程的z-index,但没有帮助

其次,当我尝试从 5 星更改为 1 星时,它并没有取消选择星星。任何帮助将不胜感激

HTML:

<ul class="rating-stars">
    <li>
        <input id="rating_1" name="rating" type="radio" value="1">
        <label class="rating is-active" for="rating_1" title="1 Star">
            <span class="text">1 Star</span>
        </label>
    <li>
        <input id="rating_2" name="rating" type="radio" value="2">
        <label class="rating is-active" for="rating_2" title="2 Star">
            <span class="text">2 Star</span>
        </label>
    <li>
        <input id="rating_3" name="rating" type="radio" value="3">
        <label class="rating is-active" for="rating_3" title="3 Star">
            <span class="text">3 Star</span>
        </label>
    <li>
        <input id="rating_4" name="rating" type="radio" value="4">
        <label class="rating" for="rating_4" title="4 Star">
            <span class="text">4 Star</span>
        </label>
    <li>
        <input checked="checked" id="rating_5" name="rating" type="radio" value="5">
        <label class="rating" for="rating_5" title="5 Star">
            <span class="text">5 Star</span>
        </label>
</ul>

$(".rating-stars li").mouseenter(function () {
    $(this).children(".rating").addClass("is-hovered");
    $(this).prevAll("li").children(".rating").addClass("is-hovered");
}).mouseleave(function () {
    $(".rating-stars li").each(function () {
        $(this).children(".rating").removeClass("is-hovered");
    });
});

JS:

$(".rating-stars li").click(function () {
    $(".rating-stars li").children(".rating.current").removeClass("is-active");
    $(this).children(".rating").addClass("is-active")
    $(this).prevAll("li").children(".rating").addClass("is-active");
});

JSFiddle Demo

【问题讨论】:

    标签: javascript jquery html css styles


    【解决方案1】:

    $(".rating-stars li").mouseenter(function() {
      $(this).children(".rating").addClass("is-hovered");
      $(this).prevAll("li").children(".rating").addClass("is-hovered");
    }).mouseleave(function() {
      $(".rating-stars li").each(function() {
        $(this).children(".rating").removeClass("is-hovered");
      });
    });
    
    $(".rating-stars li").click(function() {
      $(".rating-stars li").children(".rating.is-active").removeClass("is-active");
      $(this).children(".rating").addClass("is-active")
      $(this).prevAll("li").children(".rating").addClass("is-active");
    });
    .rating-stars {
      list-style: none;
      margin: 0 0 20px 0;
    }
    
    .rating-stars li {
      float: left;
    }
    
    .rating-stars .text,
    .rating-stars [type=radio] {
      position: absolute;
      left: -5000px;
    }
    
    .rating-stars .rating {
      display: block;
      width: 16px;
      height: 16px;
      background: url(http://i64.tinypic.com/2mnep79.png) center 0 no-repeat;
    }
    
    .rating-stars .is-active {
      background-position: center -16px;
      opacity: 1;
    }
    
    .rating-stars .is-hovered {
      background-position: center -16px;
      opacity: 0.4;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul class="rating-stars">
      <li>
        <input id="rating_1" name="rating" type="radio" value="1">
        <label class="rating is-active" for="rating_1" title="1 Star"><span class="text">1 Star</span>
    					</label></li>
      <li>
        <input id="rating_2" name="rating" type="radio" value="2">
        <label class="rating is-active" for="rating_2" title="2 Star"><span class="text">2 Star</span>
    					</label></li>
      <li>
        <input id="rating_3" name="rating" type="radio" value="3">
        <label class="rating is-active" for="rating_3" title="3 Star"><span class="text">3 Star</span>
    					</label></li>
      <li>
        <input id="rating_4" name="rating" type="radio" value="4">
        <label class="rating" for="rating_4" title="4 Star"><span class="text">4 Star</span>
    					</label></li>
      <li>
        <input checked="checked" id="rating_5" name="rating" type="radio" value="5">
        <label class="rating" for="rating_5" title="5 Star"><span class="text">5 Star</span>
    					</label></li>
    </ul>

    使用:

    $(".rating-stars li").click(function() {
      $(".rating-stars li").children(".rating.is-active").removeClass("is-active");
      $(this).children(".rating").addClass("is-active")
      $(this).prevAll("li").children(".rating").addClass("is-active");
    });
    

    取消选择

    【讨论】:

    • 哎呀...刚刚意识到我的错误。但是您没有回答第一个问题...为什么将鼠标悬停在选定的项目上时,悬停类会显示在选定的类上
    • 因为如果您不想将悬停类添加到选定的类上,则将悬停类添加到所有类,因此不要将其包含在选择器中
    • 知道了!最后一个问题......到处使用 .children 似乎很乱。有没有可能更干净一点?
    猜你喜欢
    • 2015-01-20
    • 2011-04-11
    • 2013-06-02
    • 2013-07-26
    • 2013-02-26
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多