jQuery.mcInputEvent

jQuery.mcInputEventはIME入力中にinputイベントを発火させたくない時に使用するプラグインです。

概要

jQuery.mcInputEventについて

特徴

  • Internet Explorer系においてのinputイベントをChromeや、Firefoxと同じようなタイミングで発火するようにします。
  • IME入力中に発火しない独自イベント(mcinput)を備えます。
  • input、textareaからの発火か、contenteditable="true" を設定したエレメントからの発火からを判定することができます。
  • input、textareaからの発火か、contenteditable="true" を設定したエレメントからの発火からに関わらずエレメントの最終値を簡単に取得できます。

IE系でinputイベントが発火しないタイミング(jQuery.mcInputEventで修正されるもの)

IE9

  1. BackSpace、Deleteキーでの文字の削除
  2. 「切り取り」「Ctrl+x」
  3. 「元に戻す」「Ctrl+z」
  4. 選択した範囲を別のエレメントにドロップして内容が変わったとき

IE全般

  1. contenteditable="true"を設定したエレメント
  2. ESCキーで入力文字列が取り消されたとき
  3. IME入力終了時

確認済みのブラウザ

「windows7 64bit」で下記のブラウザを使用して確認しています

  • Chrome
  • Firefox
  • Internet Explorer11
  • Internet Explorer9(Internet Explorer11でエミュレーション)
バグや改善項目がありましたら、GitHubのissueにあげてもらえると助かります。

はじめ方

プラグインの読み込み・適用

プラグインの読み込み

<script src="path/to/jquery.mcInputEvent.js"></script>

エレメントへプラグインの適用

$(element).mcInputEvent();

プラグインイベントの再適用

$(element).mcInputEvent("on");

プラグインイベントの一時不使用

$(element).mcInputEvent("off");

プラグイン適用の破棄

$(element).mcInputEvent("destroy");

プラグインイベントの強制発火

$(element).mcInputEvent("triggerEvent");

イベントの取得

// IME入力中以外でエレメントの値が変わった時のイベントを取得
$(element).on("mcinput", function (event) {
  // ここに何かの処理

  // イベントを発火したエレメントのタイプを取得する
  event.tagType
    input → input, textarea
    html  → input, textarea以外

  // イベントを発火したエレメントの値を取得する
  event.lastVal
    input, textarea → $(this).val();の値と同じ
    input, textarea以外 → $(this).html();の値と同じ
});
// inputイベントの代わりのイベントを取得
$(element).on("input2", function (event) {
  // ここに何かの処理

  // イベントを発火したエレメントのタイプを取得する
  event.tagType
    input → input, textarea
    html  → input, textarea以外

  // イベントを発火したエレメントの値を取得する
  event.lastVal
    input, textarea → $(this).val();の値と同じ
    input, textarea以外 → $(this).html();の値と同じ
});
// inputイベントを取得
// イベントを発火したエレメントのタイプやエレメントの値を取得することは出来ない
$(element).on("input", function () {
  // ここに何かの処理

});

デモ

<input type="text">のデモ

<textarea></textarea>のデモ

<div contenteditable="true"></div>のデモ