所以我有两个时间字段timeFrom
和timeTo
。我想要做的是,如果时差等于或大于2,请将标签向下滑动。但我无法弄清楚我在这里做错了什么。这是我的代码:
$(document).ready(function() {
$("#timeTo").change(function()) {
var timeTo = $("#timeTo").val();
var timeFrom = $("#timeFrom").val();
var diff = timeTo - timeFrom;
if (diff >= 2){
$("#cost_label").slideDown();
}
else{
$("#cost_label").slideUp();
}
});
$("#cost_label").hide();
$("#timeTo").trigger("change");
});
答案 0 :(得分:1)
尝试
$(document).ready(function () {
$("#timeTo").on('input', function () {
var timeTo = $("#timeTo").val();
var timeFrom = $("#timeFrom").val();
var diff = parseFloat(timeTo) - parseFloat(timeFrom);
alert(diff);
if (diff >= 2) {
$("#cost_label").slideDown({
complete: function () {
$("#cost_label").hide();
}
});
} else {
$("#cost_label").slideUp({
complete: function () {
$("#cost_label").hide();
}
});
}
});
});
on('input')
代替on(change)
,这是检测文本字段更改的正确方法您可以随时调试问题并使用逻辑来解决这些问题。
答案 1 :(得分:0)
如果您使用+
输入且具有合理的最小/最大限制,则可能不需要Math.abs
来进行类型转换,并且可能不需要type="number"
。
当一个键从下到上位置时,'keyup'
事件将触发,因此您不需要对输入框进行非聚焦(单击或标签离开)。您也可以使用'keydown'
,如果您太急于等待,并且不介意当用户在键盘上睡着时每14毫秒触发一次。
使用$ .on代替事件命名方法,以便您可以侦听多个事件(作为空格分隔列表)并在两个输入上侦听事件(选择器需要以逗号分隔的列表)。
$(function(){
$('#cost_label').hide();
$('#timeFrom,#timeTo').on('keyup change', timeChange);
function timeChange(){
var from = +$('#timeFrom').val();
var to = +$('#timeTo').val();
if(Math.abs(to - from) >= 2)
$('#cost_label').slideDown();
else $('#cost_label').slideUp();
}
timeChange();
});
http://jsfiddle.net/LDB5X/使用input type="text"
http://jsfiddle.net/6M5V6/使用input type="number"
(可能无法在所有浏览器中使用)
这个'输入'事件是什么?我在jquery docs
中找不到它