我正在使用 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>°<%=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!");
});