Skip to main content
 首页 » 编程设计

jquery-mobile之jQuery 移动 slider 值重置为最小值或最大值

2024年12月31日12qlqwjy

我正在使用 jquery 移动 slider ,当输入到控件文本部分的值超出我设置的最小值和最大值范围时,我遇到了问题。当控件失去焦点时,它会将其值重置为最小值或最大值,以更接近无效输入值的值为准。

我遇到的问题是用户键入了一个无效值,然后单击表单提交按钮,并认为他们输入的值已被保存。但是,由于在单击提交按钮时一旦失去焦点, slider 就会将值重置为最小值或最大值,因此这是实际保存的值,而不是用户输入的值。

如果出现这种情况,我想为用户弹出一条消息,让他们知道他们输入了一个无效值。有没有人对如何实现这一目标有任何建议?测试 slider 的 .change 事件中的值并不好,因为它返回新重置的值。

非常感谢任何帮助。

示例代码,根据要求:

<script type="text/javascript"> 
  $("#Answer").change(function() { 
     alert($("#Answer").val()); // this value is already the adjusted value, rather than the user entered value 
  }); 
</script> 
 
<label for="Answer" class="ui-input-text"><%=question.Prompt%></label> 
<br /> 
<span id="sliderspan"> 
   <input style="min-width: 3em;" type="range" name="Answer" id="Answer" value="<%=this.Value%>" min="<%=question.MinimumValue %>" max="<%=question.MaximumValue %>" step="0.1" /> 
   <span>&deg;<%=question.Units.ToString()%></span> 
</span> 

请您参考如下方法:

为此,我建议为范围输入绑定(bind)到 KeyUp 事件并将值存储到内部字段(我在输入本身中使用了 LastValue),然后绑定(bind)到 Change 事件以将 LastValue 与最小/最大值进行比较。

$("#Answer") 
    .bind("keyup", function (e) { 
    e.target.LastValue = $(e.target).val(); 
}) 
    .bind("change", function (e) { 
    if (typeof e.target.LastValue == 'undefined') return; 
    var min = parseInt(e.target.min); 
    var max = parseInt(e.target.max); 
    if (e.target.LastValue > max || e.target.LastValue < min) 
        alert("Wrong Data!"); 
});