如何使用jQuery选择器标记oTree Slider小部件?

时间:2018-03-15 22:49:25

标签: jquery otree

我正在尝试将滑块标记为jQuery UI Slider Labels Under Slider。我不是在处理ui-slider,而是使用来自oTree的滑块小部件。

问题Mandatory slider in oTree/django的优秀答案解释了如何使用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?input?)并将标签附加到。

2 个答案:

答案 0 :(得分: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)仍为false,否则表单将不会提交
  3. 当您触摸滑块时,变量设置为True,以便可以提交表单。

答案 1 :(得分: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"]将进一步限定结果,仅包括类型范围。