2017-01-25 18 views
0

Chrome(55.x)では、ユーザーが入力に不一致タイプを入力しようとしました(私の場合は数字入力)。ユーザビリティを向上させるために、ポップアップを表示して、入力が「壊れている」と思うよりもむしろ無効なデータを入力しようとしていることを知らせるようにしたいと考えています。入力フィールドに間違ったタイプが入力された場合、Chromeにメッセージを表示します。

これは、簡単にFFで純粋なJSで達成(不一致のタイプを入力することを可能にする、それだけで有効ではありません)されています

input.addEventListener('input', function() { 
    if (!this.checkValidity()) { 
     this.value = ''; 
     console.log('please enter a number!');    
    } 
} 

クロムが、しかし、有効性を実際に入力されていない何もしないので入力が空であるため、チェックは常にパスします。間違った入力を無視する以外は何もしないように見えます。

この動作を無効にする方法はありますか、そうでなければ意図した効果を達成できますか?

答えて

0

もちろん、keyupのリスナーを実行すると、押されたキーが表示されます。

<script> 
    var numInput = document.getElementById("num"); 
    numInput.addEventListener("keyup", function(e) { 
     if (isNaN(String.fromCharCode(e.which))) { 
      alert("Must be a number"); 
     } 
    }); 
</script> 
+1

私はこの方法と考えられるが、それはかなり厄介得ることができるようにそれを割り引いたのだ - あなたが削除考慮に入れており、バックスペースだけでなく、入力フィールド上で操作することができます任意のキーボードショートカット。素敵でシンプルな関数の代わりに、複雑なコードですばやく終わることができます。私はあなたの答えに感謝しますが(それは私のコードよりもエレガントです)、それがデフォルトの振る舞いの中から選択するなら、私は怠惰なオプションをとるつもりです。 ;) – chrBrd

1

最後の入力値を設定してこのようにチェックしますか?

let input = document.querySelector('input'); 
let lastInput = input.value; 
input.addEventListener('input', (e) => { 
    if (e.target.value === lastInput) { 
     alert("Input must be a number"); 
    } 
    lastInput = e.target.value; 
}); 
+0

不一致型は入力値にまったく影響を及ぼさないので、 'input.value'は常に空です。つまり、コードを使用すると、有効な数値が削除されるとメッセージがポップアップします。ここでの難しさは、ユーザーが何かを削除したために無効なデータが送信されているのに対して、入力が空であることを認識させることです。 – chrBrd

+0

入力イベントが発生するたびにlastInputを更新して、削除を検出できるようにしました。私はクロムを試してみて、削除しているように思える。 –

+0

ちょっと誤っているように見えますが、これはChromeのバグが原因である可能性がありますが、これは異常な動作です。コードを使用し、フィールドに文字を入力します。あなたは警戒を得るでしょう。フィールドはまだ空であり、 'lastInput'と' target.value'の両方に値はありません。 'Backspace 'を押すと、警告が再度表示されます。なぜこれが起こっているのかわからない、削除するものがないからです。私はそれがあなたのせいではありませんが、それは非常に完璧ではない答えとしてこれを受け入れるつもりではないと思うが、それは良い試みであると賞賛された。 – chrBrd

関連する問題