Javascript jquery移动函数on.change有时才起作用
我有这段代码,这段代码应该检查像-12-12这样的无效数值。因此,如果我键入一个无效的数值(如-12-11),就会出现错误,它会删除输入(这是预期的行为),奇怪的是,第二次它没有调用document.on change函数 重现问题的步骤如下所示:Javascript jquery移动函数on.change有时才起作用,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,我有这段代码,这段代码应该检查像-12-12这样的无效数值。因此,如果我键入一个无效的数值(如-12-11),就会出现错误,它会删除输入(这是预期的行为),奇怪的是,第二次它没有调用document.on change函数 重现问题的步骤如下所示: 例如,输入12 单击其他类似于另一个文本框的位置,该数字将显示为 转换为十进制(12.00) 键入不正确的数字,如-12-12,然后单击其他位置,然后 文本框将被清除(这是预期的行为) 第二次在文本框中键入该数字时,它不会更改 输入值或清除文本框
- 例如,输入12
- 单击其他类似于另一个文本框的位置,该数字将显示为
转换为十进制(12.00) - 键入不正确的数字,如-12-12,然后单击其他位置,然后 文本框将被清除(这是预期的行为)
- 第二次在文本框中键入该数字时,它不会更改 输入值或清除文本框 这是我不理解的,当你第二次插入一个错误的数字时试图调试代码,这个函数没有被调用,所以我想知道为什么
$(文档).on('change','input[type=“number”]”,函数(事件){
var target=$(event.target);
var max=target.attr('max')-0;
var min=target.attr('min')-0;
var step=target.attr('step');
var val=parseFloat(target.val());
如果(最大值的类型!=“未定义”&&val>max){
target.val(最大值);
}
else if(最小值的类型!='undefined'&&val
我看到了您的问题,并且能够解决它。我建议您使用blur
事件,而不是textbox
的change
事件。这会很有效的
代码如下:
$(文档).on('blur',input[type=“number”]”,函数(事件){
var target=$(event.target);
var max=target.attr('max')-0;
var min=target.attr('min')-0;
var step=target.attr('step');
var val=parseFloat(target.val());
如果(最大值的类型!=“未定义”&&val>max){
target.val(最大值);
}
else if(最小值的类型!='undefined'&&val
数量
检查#
当在数字类型输入中输入了无效数字时,浏览器会将其视为空白(因为该数字无效,而且它不会费事保留该值,因此当询问有效性时,返回false)。因此,如果再次键入-12-12,则不会触发change
事件,因此不会清除,因为基础值仍然为空。你会看到,如果你首先从输入-12到空白输入-它也不起作用。
您最好的选择是将onchange
更改为onblur
,因为它将更加一致,因为它不会查看值。对于您的预期行为,它工作正常。12次更改为12.00,-12次更改为0.01,-12-12将清除该框。在您第二次输入此号码时,该号码不起作用:-12-12我知道了,似乎是浏览器支持问题。每次清除文本框后填充文本框时都会发生此错误。请参阅此链接,这里有一些解决方法。但是我建议不要使用数字类型输入,因为它不稳定。
$(document).on('change', 'input[type="number"]', function(event) {
var target = $(event.target);
var max = target.attr('max') - 0;
var min = target.attr('min') - 0;
var step = target.attr('step');
var val = parseFloat(target.val());
if(typeof max !== 'undefined' && val > max) {
target.val(max);
}
else if(typeof min !== 'undefined' && val < min) {
target.val(min);
}
else if(typeof step !== 'undefined') {
if(step < 1) {
target.val(parseFloat(target.val()).toFixed(step.split('.')[1].length));
}
else {
debugger;
}
}
else if(val + '' != target.val()) {
target.val(val);
}
});