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公路
如果(newvalNaN
是病毒/毒药。如果值是NaN
,则(几乎)计算中的任何其他值都可能是原因。在这种情况下:
parseInt($(this).val())
可能正在返回NaN
parseInt(dif)
可能返回NaN
,这可能是由于
值
为NaN
,或
$(this.attr('oldvalue')
返回无法强制为数字的内容
- 等等
(旁注:为什么要parseInt()
ingdif
?它已经是一个数字了,或者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);
}