我正面临这种尴尬的局面。首先,我现在在 IE 10 上,但是在 IE9 上也检测到了这个问题。我有这个输入字段,我需要 2 个事件来处理它: - onKeyUp,检查字段的值是否为数字;和 - onChange,在输入正确的数字时运行一些 JS
如果单独分配,它们工作得很好。但是,每当我在输入字段上设置这两个事件时,无论如何都不会触发 onChange 事件。此页面上的所有其他 JS 已被剥离以防止干扰。
下面是 onKeyUp 的 JS 代码:
<script>
function CampoNumerico(campo){
var valor = campo.value;
var novoValor = '';
var pontoPosicao = '';
if (isNaN(valor)){ // se nao for numero, devemos retornar o campo ao ultimo valor valido
alert(valor + " nao eh um numero valido");
novoValor = campo.defaultValue;
}
else{ //sendo um numero, buscamos a posicao de sua eventual virgula
valor = valor.split('');
for (var i = 0; i < valor.length; i++){
if (valor[i] == '.' && pontoPosicao == ''){
pontoPosicao = i;
}
}
// se nao houver ponto, o novo valor do campo sera igual ao valor de entrada da funcao
if ( pontoPosicao == ''){
for (var i = 0; i < valor.length; i++){
novoValor += valor[i];
}
}
else{ // se houver o ponto, registramos o novo valor igual ao valor de entrada, ate o limite de casas decimais
var tamanho = ((pontoPosicao + 3) < valor.length)? pontoPosicao + 3 : valor.length;
for (var i = 0; i < tamanho; i++){
novoValor += valor[i];
}
}
if (pontoPosicao != '' && pontoPosicao < (valor.length - 3)){ // se houver um ponto e mais de 2 casas decimais, alertamos o usario e desconsideramos as casas adicionais
alert("Aviso: " + campo.value + " tem mais de 2 casas decimais; serão consideradas apenas as primeiras casas - " + novoValor);
}
}
// terminamos por atualizar o valor do campo
campo.value = novoValor;
} // fim da CampoNumerico
</script>
以下是我尝试将此脚本分配给的字段:
<input type='text' name='campo' value='0' onchange='alert("1")' onkeyup='CampoNumerico(this)'>
此时我只想在触发 onchange 时提醒“1”,但我什至无法执行这个简单的操作......
有趣的是,这种编码在其他浏览器上也能正常工作——Chrome 和 Firefox。谁能帮我解决这个尴尬的情况?提前感谢您的任何想法。
编辑 - 输入字段现在单独可见