使用相同 class Jquery UI 范围滑块的问题

Issue with Jquery UI Range Slider using same class

我多次使用具有相同 class 的 Jquery UI Range Slider,这是我在代码段中添加的,它会完美运行,但数据值不显示第二个滑块.

它是在更改滑块后显示的,而不是在 intilize 时显示的,所以请指导我在应用多范围滑块时做错了什么

$(document).ready(function() {
  var initialValues = [540, 1020],
    updateValue = function(ui) {
      var hours = Math.floor(ui.value / 60);
      var minutes = ui.value - (hours * 60);

      if (hours.length == 1) hours = '0' + hours;
      if (minutes.length == 1) minutes = '0' + minutes;
      if (minutes == 0) minutes = '00';
      if (hours >= 12) {
        if (hours == 12) {
          hours = hours;
          minutes = minutes + " PM";
        } else {
          hours = hours - 12;
          minutes = minutes + " PM";
        }
      } else {
        hours = hours;
        minutes = minutes + " AM";
      }
      if (hours == 0) {
        hours = 12;
        minutes = minutes;
      }
      $(ui.handle).attr('data-value', hours + ':' + minutes);
    };

  $(".slider-range").slider({
    min: 0,
    max: 1440,
    step: 15,
    range: true,
    values: [540, 1020],
    create: function(event, ui) {
      $.each(initialValues, function(i, v) {
        updateValue({
          value: v,
          handle: $('.ui-slider-handle').eq(i)
        });
      });
    },
    slide: function(event, ui) {
      updateValue(ui);
    }
  });
});
.time-range {
  padding-top: 35px;
}

*:focus {
  outline: 0;
}

.ui-slider-horizontal {
  height: 8px;
  background: #D7D7D7;
  border: 1px solid #BABABA;
  box-shadow: 0 1px 0 #FFF, 0 1px 0 #CFCFCF inset;
  clear: both;
  margin: 8px 0;
  -webkit-border-radius: 6px;
  -moz-border-radius: 6px;
  -ms-border-radius: 6px;
  -o-border-radius: 6px;
  border-radius: 6px;
}

.ui-slider {
  position: relative;
  text-align: left;
}

.ui-slider-horizontal .ui-slider-range {
  top: -1px;
  height: 100%;
}

.ui-slider .ui-slider-range {
  position: absolute;
  z-index: 1;
  height: 8px;
  font-size: .7em;
  display: block;
  border: 1px solid #424453;
  box-shadow: 0 1px 0 #edeef7 inset;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  -khtml-border-radius: 6px;
  border-radius: 6px;
}

.ui-slider .ui-slider-handle {
  background-color: #424453;
  width: 18px;
  height: 18px;
}

.ui-slider .ui-slider-handle {
  position: absolute;
  z-index: 2;
  width: 18px;
  height: 18px;
  cursor: default;
  border: none;
  cursor: pointer;
  background: transparent url(https://dummyimage.com/4x20/000/fff.png) 50% 50% no-repeat;
}

.ui-slider-horizontal .ui-slider-handle {
  top: -.5em;
  margin-left: -.7em;
}

.ui-slider-handle:after {
  content: attr(data-value);
  position: absolute;
  bottom: -24px;
  left: -20px;
  min-width: 60px;
  font-size: 10px;
  height: 20px;
  color: #333;
  padding: 1px;
  text-align: center;
}

.ui-slider a:focus {
  outline: none;
}

#slider-range {
  width: 95%;
  margin: 0px;
}

.time-range {
  width: 100%;
  margin: 10px 0px;
  display: block;
}

.time-slider-label {
  display: inline-block;
}

.sliders_step1 {
  width: auto;
}

#time-range label {
  margin-top: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
<div class="time-range">
  <div class="sliders_step1">
    <div class="slider-range">
    </div>
  </div>
</div>

<div class="time-range">
  <div class="sliders_step1">
    <div class="slider-range">
    </div>
  </div>
</div>

您需要先找到要创建的 .slider-range 滑块,然后在其中搜索 .ui-slider-handle
你可以用 .index() 找到哪一个: $(".slider-range").index(this)

$(document).ready(function() {
  var initialValues = [540, 1020],
    updateValue = function(ui) {
      var hours = Math.floor(ui.value / 60);
      var minutes = ui.value - (hours * 60);

      if (hours.length == 1) hours = '0' + hours;
      if (minutes.length == 1) minutes = '0' + minutes;
      if (minutes == 0) minutes = '00';
      if (hours >= 12) {
        if (hours == 12) {
          hours = hours;
          minutes = minutes + " PM";
        } else {
          hours = hours - 12;
          minutes = minutes + " PM";
        }
      } else {
        hours = hours;
        minutes = minutes + " AM";
      }
      if (hours == 0) {
        hours = 12;
        minutes = minutes;
      }
      
      $(ui.handle).attr('data-value', hours + ':' + minutes);
    };

  $(".slider-range").slider({
    min: 0,
    max: 1440,
    step: 15,
    range: true,
    values: [540, 1020],
    create: function(event, ui) {
      var index = $(".slider-range").index(this);
      $.each(initialValues, function(i, v) {
        updateValue({
          value: v,
          handle: $('.slider-range').eq(index).find('.ui-slider-handle').eq(i)
        });
      });
    },
    slide: function(event, ui) {
      updateValue(ui);
    }
  });
});
.time-range {
  padding-top: 35px;
}

*:focus {
  outline: 0;
}

.ui-slider-horizontal {
  height: 8px;
  background: #D7D7D7;
  border: 1px solid #BABABA;
  box-shadow: 0 1px 0 #FFF, 0 1px 0 #CFCFCF inset;
  clear: both;
  margin: 8px 0;
  -webkit-border-radius: 6px;
  -moz-border-radius: 6px;
  -ms-border-radius: 6px;
  -o-border-radius: 6px;
  border-radius: 6px;
}

.ui-slider {
  position: relative;
  text-align: left;
}

.ui-slider-horizontal .ui-slider-range {
  top: -1px;
  height: 100%;
}

.ui-slider .ui-slider-range {
  position: absolute;
  z-index: 1;
  height: 8px;
  font-size: .7em;
  display: block;
  border: 1px solid #424453;
  box-shadow: 0 1px 0 #edeef7 inset;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  -khtml-border-radius: 6px;
  border-radius: 6px;
}

.ui-slider .ui-slider-handle {
  background-color: #424453;
  width: 18px;
  height: 18px;
}

.ui-slider .ui-slider-handle {
  position: absolute;
  z-index: 2;
  width: 18px;
  height: 18px;
  cursor: default;
  border: none;
  cursor: pointer;
  background: transparent url(https://dummyimage.com/4x20/000/fff.png) 50% 50% no-repeat;
}

.ui-slider-horizontal .ui-slider-handle {
  top: -.5em;
  margin-left: -.7em;
}

.ui-slider-handle:after {
  content: attr(data-value);
  position: absolute;
  bottom: -24px;
  left: -20px;
  min-width: 60px;
  font-size: 10px;
  height: 20px;
  color: #333;
  padding: 1px;
  text-align: center;
}

.ui-slider a:focus {
  outline: none;
}

#slider-range {
  width: 95%;
  margin: 0px;
}

.time-range {
  width: 100%;
  margin: 10px 0px;
  display: block;
}

.time-slider-label {
  display: inline-block;
}

.sliders_step1 {
  width: auto;
}

#time-range label {
  margin-top: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
<div class="time-range">
  <div class="sliders_step1">
    <div class="slider-range">
    </div>
  </div>
</div>

<div class="time-range">
  <div class="sliders_step1">
    <div class="slider-range">
    </div>
  </div>
</div>