1

我正在尝试像在Slider 下的 jQuery UI Slider Labels中那样标记滑块。但是,我不是在处理 ui-slider,而是在处理来自 oTree 的滑块小部件。

oTree/django 中对 Mandatory slider问题的出色回答解释了如何使用 jQuery 选择器来选择 oTree 滑块:

$('[data-slider] input[type="range"]')

我有一个显示当前选定值(0-100)的滑块。我想做的是在滑块下方添加一些标签(例如,如果滑块值为温度,则为“冷”、“中性”、“暖”)。我尝试使用以下代码选择 oTree 滑块并附加标签,但没有出现任何标签。

{% formfield player.mySliderInput type="Slider"}

{% block scripts %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
    var mylabel = $('<label>25</label>').css('left', '25%');
    $('[data-slider] input[type="range"]').append(mylabel);
});
</script>
{% endblock %}

页面的 HTML 如下所示:

<div class="form-group required">     
  <label class="col-form-label" for="id_myInput">How hot is it? (0-100):</label>
  <div class="controls  field-myInput">
    <div class="input-group slider" data-slider>
      <input type="range" name="myInput" value="None"
        step="1"
        min="0"
        max="100"
        required
        id="id_myInput"
        class="form-control"
      />

      <div class="input-group-append">
        <span class="input-group-text" data-slider-value title="current value"></span>
      </div>
    </div>
  </div>
</div>

我不确定要选择并将标签附加到哪个对象(div?输入?)。

4

2 回答 2

2

从那时起,oTree 稍微改变了表单类的命名。

使用下面的代码:

{% block scripts %}
<script>
    $(function () {
        var SliderTouched = false;
        var selector = $('[data-slider] input[type="range"]');
        selector.change(function () {
            SliderTouched = true;
        });

        $("#form").submit(function (event) {
            if (!SliderTouched) {
                event.preventDefault();
            }
        });
    });

</script>
{% endblock %}

它的作用如下:

  1. 它将一个变量设置为false页面加载的时间。
  2. 除非此变量 ( SliderTouched) 保持为假,否则表单将不会提交
  3. 当您触摸滑块时,变量设置为 True,以便可以提交表单。
于 2018-03-15T23:06:12.047 回答
1

更新..

根据 OP 评论,最终附加到 oTree 滑块的选择器是.controls

var $label = $('<label>sometext</label>').css('left', '10%'); 
$('.controls').append($label);

原来的...

使用 has 属性选择器 ( https://api.jquery.com/has-attribute-selector/ ),您可以按属性进行选择。

<input type="range" data-slider="someval">

给定上面的html ..你可以选择它...

[data-slider] 

添加input[type="range"]将进一步限定结果仅包括类型范围。

于 2018-03-15T23:10:26.890 回答