私はこの恥ずかしい状況に直面しています。まず、私は現在 IE 10 を使用していますが、この問題は IE9 でも検出されています。この入力フィールドがあり、それを操作するには 2 つのイベントが必要です。 - フィールドの値が数値かどうかをチェックする onKeyUp。- onChange、正しい数字が入力されたときにいくつかの JS を実行する
個別に割り当てられている場合、それらは問題なく機能します。ただし、これら 2 つのイベントを入力フィールドに設定すると、何があっても 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) でも問題なく機能します。この恥ずかしい状況を誰か助けてくれませんか?ご意見をお寄せいただきありがとうございます。
編集 - 入力フィールドが個別に表示されるようになりました