JavaScript
Chrome

Chromeで日本語入力を禁止する

More than 3 years have passed since last update.

Chromeで日本語入力を禁止したい

・IEやFFと同じようにChromeで日本語の入力を禁止したい
・ChromeはCSSのime-mode:disabledに対応していない
・「とにかくヤレ」と神の声を賜ったので、JavaScriptで頑張ってみる

2015/9/17編集
masa-kunikataさんアドバイスの正規表現方式に変更。
textareaで改行・タブもとおるようにしました。

filter_mbc.js
jQuery(document).ready(function() {

    // ime-modeが使えるか
    var supportIMEMode = ('ime-mode' in document.body.style);

    // 非ASCII
    var noSbcRegex = /[^\x00-\x7E]+/g;

    // 1バイト文字専用フィールド
    jQuery('.sbc_field')
    .on('keydown blur paste', function(e) { 

        // ime-modeが使えるならスキップ
        if (e.type == 'keydown' || e.type == 'blur')
            if (supportIMEMode) return;

        // 2バイト文字が入力されたら削除
        var target = jQuery(this);
        if(!target.val().match(noSbcRegex)) return;
        window.setTimeout( function() {
          target.val( target.val().replace(noSbcRegex, '') );
        }, 1);        

    });

});
test.css
.sbc_field { ime-mode: disabled; }
test.html
<input type="text" value="abcde" class="sbc_field" />

デモ

Demoはこちら

●確認した環境
Chrome 36b
Internet Explorer 10
Firefox 30
(Windows 7)

●自賛
IMEが有効でもテンキーで数字の入力はできる
(先にevent.keyCodeの監視で書いてました)

●欠点
一瞬チラチラみえてかっこわるい