Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 是什么导致IE 7中出现这种情况?_Javascript_Jquery - Fatal编程技术网

Javascript 是什么导致IE 7中出现这种情况?

Javascript 是什么导致IE 7中出现这种情况?,javascript,jquery,Javascript,Jquery,我有一个功能,可以检查用户是否在输入框中写入数字: var letters = 'ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZabcçdefghijklmnñopqrstuvwxyzàáÀÁéèÈÉíìÍÌïÏóòÓÒúùÚÙüÜ'; var numbers = '1234567890'; var signs = ',.:;@-\''; var mathsigns = '+-=()*/'; var custom = '<>#$%&?¿'; function a

我有一个功能,可以检查用户是否在输入框中写入数字:

var letters = 'ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZabcçdefghijklmnñopqrstuvwxyzàáÀÁéèÈÉíìÍÌïÏóòÓÒúùÚÙüÜ';
var numbers = '1234567890';
var signs = ',.:;@-\'';
var mathsigns = '+-=()*/';
var custom = '<>#$%&?¿';


function alpha(event) {
    var k;
    k = document.all ? parseInt(event.keyCode) : parseInt(event.which);
    return (numbers.indexOf(String.fromCharCode(k)) != -1);
}
var-letters='ABC棼DEFGHIJKLMNñopqrstuvxyzabc棼DEFGHIJKLMNñopqrstuvxyzáÀ;
变量编号='1234567890';
变量符号=',.:;@-\';
变量mathsigns='+-=()*/';
var custom='#$%和?';
函数alpha(事件){
var-k;
k=document.all?parseInt(event.keyCode):parseInt(event.which);
return(numbers.indexOf(String.fromCharCode(k))!=-1);
}
此函数与以下函数一起使用,该函数获取数字并将其发送给控制器,控制器将数字保存在数据库中。但只有当数字与原始数字不同时,输入框中的数字才是第一位的。它还更新另一个输入框,并使用与触发事件的输入框具有相同行id属性的所有特定输入的总和:

function initializeUpdateNumberProcentMatrix() {

    $(".numberfield").live('keypress', alpha);

    //$(".numberfield").live('keypress', alpha(numbers));


        $('.numberfield').live('focus', function () {
            $(this).attr('oldvalue', $(this).val());
        });

        $('.numberfield').live('blur', function () {

            // Dette er den nuværende værdi i tekstboksen
            var value = $(this).val();
            var oldvalue = $(this).attr('oldvalue');

            // Reference til tekstboksen
            var obj = $(this);

            // Hvis værdien ikke har ændret sig, skal der ikke foretages noget (hvis man tabulerer)
            if (value == $(this).attr('oldvalue')) {
                return;
            }

            else {

                var dif = value - $(this).attr('oldvalue');
                var newval;


                $('.procentsumfield').each(function (index) {
                    if ($(this).attr('row-id') == obj.attr('row-id')) {

                        newval = (parseInt($(this).val()) + parseInt(dif));

                        // Hvis summen overstige 100, skal der ikke foretages nogle ændringer - Textboksens værdi skal tilbagestilles, og sumfeltet skal ikke odateres                
                        if (newval > 100) {
                            obj.val(oldvalue);
                            alert("Summen for det pågældende år må ikke overstige 100%");
                            return;
                        }
                        else {
                            $(this).val(newval);
                            return false;
                        }
                    }
                });

                var number = { Column_ID: $(this).attr('column-id'),
                    Row_ID: $(this).attr('row-id'),
                    Question_ID: $(this).attr('question-id'),
                    Value: $(this).val(),
                    Type: "Procent"
                };

                // Hvis den nye værdi overstiger 100, skal det ikke gemmes
                if (newval <= 100) {
                    saveNumberMatrix($(this), number, "/SaveSurveyAnswers/SaveProcentMatrix");
                }
            }
        });
    }
函数初始化updateNumberProcentMatrix(){
$(“.numberfield”).live('keypress',alpha);
//$(“.numberfield”).live('keypress',alpha(数字));
$('.numberfield').live('focus',function(){
$(this.attr('oldvalue',$(this.val());
});
$('.numberfield').live('blur',function(){
//新技术的发展方向
var值=$(this.val();
var oldvalue=$(this.attr('oldvalue');
//参考til tekstboksen
var obj=$(本);
//Hvis værdien ikke harændret sig,ikke的先例是noget(Hvis man Tabuller)
if(value=$(this.attr('oldvalue')){
返回;
}
否则{
var dif=value-$(this.attr('oldvalue');
var newval;
$('.procentsumfield')。每个(函数(索引){
if($(this.attr('row-id')==obj.attr('row-id')){
newval=(parseInt($(this.val())+parseInt(dif));
//第100届世界气候变化峰会,诺格兰·德林格气候变化先例-文本博克森斯与蒂尔巴格斯特列斯气候变化会议,og sumfeltet气候变化会议
如果(newval>100){
对象值(旧值);
警报(“100%的死亡人数总和”);
返回;
}
否则{
$(this.val)(newval);
返回false;
}
}
});
var number={Column_ID:$(this.attr('Column-ID'),
行ID:$(this).attr('Row-ID'),
问题编号:$(this.attr('Question-ID'),
值:$(this).val(),
类型:“Procent”
};
//第100号公路上的værdi Oversiger公路

如果(newval
NaN
是病毒/毒药。如果值是
NaN
,则(几乎)计算中的任何其他值都可能是原因。在这种情况下:

  • parseInt($(this).val())
    可能正在返回
    NaN
  • parseInt(dif)
    可能返回
    NaN
    ,这可能是由于
    • NaN
      ,或
    • $(this.attr('oldvalue')
      返回无法强制为数字的内容
  • 等等

(旁注:为什么要
parseInt()
ing
dif
?它已经是一个数字了,或者
NaN
。而且,即使它是一个字符串,在循环中使用
parseInt()
也很愚蠢。)

value
$(this).attr('oldvalue')
都是字符串。
-
只对int有效,因此
string-string
NaN

您需要在这些上使用
parseInt

var value = parseInt($(this).val(), 10);
var oldvalue = parseInt($(this).attr('oldvalue'), 10);
注意
,10
,这确保值为“基数10”

编辑:如注释中所述,
NaN
来自
$(this).val()
为空(
'
)。您可以这样检查:

if($.trim($(this).val()) === '')
或:

您设置了
oldvalue
,但从未使用它,应该使用它,而不是每次都获取属性

var dif = value - oldvalue;
同时将此行
newval=(parseInt($(this).val())+parseInt(dif));
更改为:

newval = parseInt($(this).val(), 10) + dif;
dif
已经是int,不需要
parseInt

另一个注意事项:在jQuery中是规范化的(应该是int),所以您不需要“检查”它


在jQuery中是规范化的(并且应该是一个int),仅供参考:
文档。所有检查都是错误的。建议:不要使用live();它已被弃用,请使用on();仅供参考:当使用
parseInt
时,您应该将
10
作为第二个参数传递。这样可以确保数字被读取为“base 10”。如果您使用了
parseInt('021')
这将返回
17
,而不是
21
,因为它被解释为“基8”(起始
0
使其成为“八进制”)。
parseInt('021',10)
将返回
21
-
仅对int有效,因此
string字符串
NaN不一定是真的。请尝试一下
'123'-'456'
谢谢你的回答。我会做所有的更正。我发现当onblur触发时,有一些输入框是空的(没有值),它们在循环中是NaN。我如何解决这个问题?@Kenci:空值!是的,就是这样!
parseInt(“”,10)
NaN
。您可以检查
是否($(this).val()='')
是NaN(value)
@Kenci,而不是使用
parseInt()
,您实际上可以使用一元
+
,它更优雅地处理空字符串。例如:
+'=0
+'123'=123
+'abc'=NaN
。更多阅读:您是对的。当我循环输入bo时
var dif = value - oldvalue;
newval = parseInt($(this).val(), 10) + dif;
function alpha(event) {
    return (numbers.indexOf(String.fromCharCode(event.which)) != -1);
}