如何在页面中多次使用星级(输入)字段

时间:2013-09-30 07:14:37

标签: javascript jquery

我是jquery的新手。我想在具有相同ID的页面中多次使用此星级(输入)字段(因为它将变为动态)。请让我知道我是怎么做的。

Jsfiddle:http://jsfiddle.net/9xrkr/

<script src="http://www.radioactivethinking.com/rateit/src/jquery.rateit.js"></script>
<input type="range" min="0" max="5" value="0" step="1" id="backing1">   
<div class="rateit" id="rateitHover" data-rateit-backingfld="#backing1" data-rateit-step="1" > 
    <span class="tooltip" style="float:right; padding-left:10px;"></span>
</div>

<script>

var tooltipvalues = ['Bad', 'Poor', 'Average', 'Good', 'Excellent'];
var valueToDisplay

$("#rateitHover").bind('over', function (event, value) {
    $('.tooltip').text(tooltipvalues[value - 1]);
});

$("#rateitHover").bind('reset', function () {
    $('.tooltip').text(''); 
    $('#rateitHover').rateit('value')
});

$("#rateitHover").bind('rated', function (event, value) {
    $('.tooltip').text('R: ' + tooltipvalues[value - 1]);
});

$('#rateitHover').bind('mouseleave', function() {
    var v = $('#rateitHover').rateit('value');
    if (v == 0) {
        $('.tooltip').html('');
    } else {
        $('.tooltip').html('R: ' + tooltipvalues[v - 1]);
    }
});


</script>

2 个答案:

答案 0 :(得分:2)

您必须使用类(不是元素的唯一ID)

试试这个:

<强> HTML

<input type="range" min="0" max="5" value="0" step="1" id="backing1">
<input type="range" min="0" max="5" value="0" step="1" id="backing2">

<div class="rateit" id="rateitHover1" data-rateit-backingfld="#backing1" data-rateit-step="1" > 
    <span class="tooltip" style="float:right; padding-left:10px;"></span>
</div>

<div class="rateit" id="rateitHover2" data-rateit-backingfld="#backing2" data-rateit-step="1" > 
    <span class="tooltip" style="float:right; padding-left:10px;"></span>
</div>

<强> JAVASCRIPT

var tooltipvalues = ['Bad', 'Poor', 'Average', 'Good', 'Excellent'];
var valueToDisplay

$(".rateit").bind('over', function (event, value) {
    $(this).find('.tooltip').text(tooltipvalues[value - 1]);
});

$(".rateit").bind('reset', function () {
    $(this).find('.tooltip').text(''); 
    $(this).rateit('value')
});

$(".rateit").bind('rated', function (event, value) {
    $(this).find('.tooltip').text('R: ' + tooltipvalues[value - 1]);
});

$('.rateit').bind('mouseleave', function() {
    var v = $(this).rateit('value');
    if (v == 0) {
        $(this).find('.tooltip').html('');
    } else {
        $(this).find('.tooltip').html('R: ' + tooltipvalues[v - 1]);
    }
});

<强>小提琴 http://jsfiddle.net/9xrkr/1/

答案 1 :(得分:1)

尝试将id更改为类名,并尝试缩小选择器以与this相关联,这应该与触发的元素相关:

$('#rateitHover')

更改为:

$('.rateit')

此外,您需要获取元素内的工具提示:

$('.tooltip')

更改为:

$(this).find('.tooltip')

$('#rateitHover').rateit('value')应更改为$(this).rateit('value')

更新

显然,由于这一切都是动态提供的,因此您无法进行上述调整。因此,我建议您使用其他脚本。

我过去曾为此目的做过一些事情:http://codepen.io/bozdoz/pen/ClmLI

查看此代码是否适合您的目的。请注意,星星都有类,而不是ID。它应该更容易操纵。希望这有助于(某人)。 :)

HTML:

<div class="clearfix stars">    
  <div class="darn">Oh no!</div>
  <div class="brilliant">Thanks!</div>  
  <div class="starHolder">  
    <div class="star">  
      <div class="star">    
        <div class="star">  
          <div class="star">    
            <div class="star"></div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

CSS:

.stars {width:450px;margin:5% auto;position:relative}
.star {width:66px;height:50px;background:url(http://www.prportfolio.ca/bjd/images/star.png) no-repeat;cursor:pointer;transition: all .5s;-moz-transition: all .5s; -webkit-transition: all .5s; -o-transition: all .5s;}
.star:hover, .star.on {background-position: -66px 0px;}
.star .star { margin-left: 66px; }
.starHolder {width:345px;margin:0 auto;}
.darn {color:#5c2222}
.brilliant {color:#a0b9d8;right:0px}
.darn, .brilliant {line-height:50px;font-weight:bold;display:none;position:absolute}

JS(jQuery):

$('.star').click(function(e){
e.stopPropagation();
var i = $('.stars .star').index(this);
if(i==0||i==5){
$(this).parents('.stars').find('.darn').show().delay(100).fadeOut(1000);
}
if(i==4||i==9){
$(this).parents('.stars').find('.brilliant').show().delay(100).fadeOut(1000);
}
$(this).addClass('on').find('.star').removeClass('on').end().parents('.star').addClass('on');
});