Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery移动函数on.change有时才起作用_Javascript_Jquery_Jquery Mobile - Fatal编程技术网

Javascript jquery移动函数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这样的无效数值。因此,如果我键入一个无效的数值(如-12-11),就会出现错误,它会删除输入(这是预期的行为),奇怪的是,第二次它没有调用document.on change函数

重现问题的步骤如下所示:

  • 例如,输入12

  • 单击其他类似于另一个文本框的位置,该数字将显示为
    转换为十进制(12.00)

  • 键入不正确的数字,如-12-12,然后单击其他位置,然后 文本框将被清除(这是预期的行为)
  • 第二次在文本框中键入该数字时,它不会更改 输入值或清除文本框

    这是我不理解的,当你第二次插入一个错误的数字时试图调试代码,这个函数没有被调用,所以我想知道为什么

感谢您的帮助

我的javascript代码:

$(文档).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);
    }
});