我有一个函数可以检查用户是否在输入框中写了一个数字:
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);
}
此函数与以下函数一起使用,该函数获取数字并将其发送到控制器,控制器将数字保存在数据库中。但只有当数字与原始数字不同时,那是首先在输入框中。它还会更新另一个输入框,其中包含与触发事件的输入框具有相同 row_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");
}
}
});
}
问题是,有时 IE 7 在“procentsumfield”输入框中给了我一个 NaN,它不会保存新值,因为它不是数字。
什么可能导致这种情况发生?
谢谢