jQuery 'input'イベント


206

inputこのjsfiddleを見るまで、jQueryで呼び出されるイベントを聞いたことがありません。

なぜそれが機能しているのか知っていますか?それはkeyup何かのエイリアスですか?

$(document).on('input', 'input:text', function() {});


12
ただしchange、フィールドがフォーカスを失ったときにのみ起動します。inputすぐに発射します。
jcsanyi 2013年

3
検索してみましたか?
未定義

2
@undefinedはい、そうでなければ、質問を作成しませんでした。Googleで登場するのは、input 要素とその要素にイベントをアタッチする方法に関する記事だけです。
シルクファイヤー2013年

3
-この質問は美しくすべての概念回答stackoverflow.com/questions/15727324/...を
GemK

回答:


197

要素のテキストコンテンツがユーザーインターフェイスを介して変更されたときに発生します。

キーが何もしない場合でもが起動するkeyupため、これはまったくエイリアスでkeyupはありません(たとえば、Ctrlキーを押してから放すとkeyupイベントがトリガーされます)。

それを考える良い方法は次のようなものです。これは、入力が変化するたびにトリガーされるイベントです。これには、入力を変更するキーを押す(たとえば、Ctrlそれ自体ではイベントはトリガーされませんが、Ctrl-Vテキストを貼り付けるために)、オートコンプリートオプションの選択、Linuxスタイルのミドルが含まれますが、これらに限定されません。クリック、貼り付け、ドラッグアンドドロップ、および他の多くのこと。

詳細については、このページとこの回答に関するコメントを参照してください。


11
jQueryが不足しているブラウザーサポートを構成しているかどうかを知っていますか?(IE8、IE9の不整合など)
jcsanyi 2013年

4
私は「js input event」をググっただけです。Googleで必要なものを見つけるために使用する用語を知るコツがあります。それには経験が伴います。そしてもちろん、グーグルはすべてを記録し、それを使ってあなたが実際に欲しいものを学ぶ。私の検索のほとんどはAPIドキュメントとプログラミングの質問のためのものです。そのため、時間をかけて物事を検索すると、おそらくAPIドキュメントとプログラミングの回答が表示されるはずです。
J David Smith

3
さて、「jQuery入力イベント」を探していたのですが、それがオリジナルのJSイベントだとは思いもしませんでした。ここでも同じですが、最初の結果は通常SOからのものです。これは、ほとんどが事実上の回答/公式の情報源と見なしています。
シルクファイア2013年

18
input実際には単なるフィルタリングkeyupではありませんinput。たとえば、以前に使用された値のリストから値が選択されたときにも起動します... イベントがない場合は、処理が非常に困難でした。
szeryf 2013年

2
oninputマウスでテキストが変更されたときにも発生します(ドラッグアンドドロップ、または右クリックメニューまたは中クリックで貼り付け)。
DenilsonSáMaia 14

157

oninput イベントは、入力フィールドの変更を追跡するのに非常に役立ちます。

ただし、バージョン9未満のIEではサポートされていません。ただし、古いバージョンのIEにonpropertychangeは、と同じ独自の独自のイベントがありoninputます。

したがって、次のように使用できます。

$(':input').on('input propertychange');

クロスブラウザを完全にサポートします。

propertychangeは、任意のプロパティの変更に対してトリガーされる可能性があるため、たとえば、disabledプロパティが変更された場合、次のように含める必要があります。

$(':input').on('propertychange input', function (e) {
    var valueChanged = false;

    if (e.type=='propertychange') {
        valueChanged = e.originalEvent.propertyName=='value';
    } else {
        valueChanged = true;
    }
    if (valueChanged) {
        /* Code goes here */
    }
});

10
まさに私が必要としたもの。ありがとうございました。(私は<IE9をサポートする必要があるのは嫌いです。)
DaleyKD 2014年

一部の詳細情報:「入力フィールドにテキストをドロップした後、Operaは入力イベントを発生させません。IE9は、ユーザーがキーボード、カット、またはドラッグ操作によって入力された文字を削除しても、入力イベントを発生させません。」developer.mozilla.org/en-US/docs/Web/Events/...
tkane2000

このコードに問題があります。入力要素でmaxlengthが設定されている場合、最大長に達しても値が変更されない場合でも「input」イベントがトリガーされます
nivcaner

しかし、なぜ2つの別個の関数ではないのですか?これにより、イベントタイプやプロパティ名を確認する必要がなくなります。コードは、3番目の共有関数内にある可能性があります。
ADTC、16

17

jQueryを使用すると、以下は実質的に同じです。

$('a').click(function(){ doSomething(); });
$('a').on('click', function(){ doSomething(); });

inputただし、このイベントでは、テストしたブラウザーで2番目のパターンのみが機能するようです。

したがって、あなたはこれが機能することを期待していますが、(少なくとも現在は)機能していません:

$(':text').input(function(){ doSomething(); });

繰り返しになりますが、イベントの委任を利用したい場合(たとえば、がDOMに追加される#container前にイベントを設定する場合input.text)、これが頭に浮かぶはずです。

$('#container').on('input', ':text', function(){ doSomething(); });

悲しいことに、再び、それは現在動作しません!

このパターンのみが機能します:

$(':text').on('input', function(){ doSomething(); });

より最新の情報で編集

私は確かにこのパターンを確認できます:

$('#container').on('input', ':text', function(){ doSomething(); });

NOW WORKSも、すべての「標準」ブラウザで機能します。


2

claustrofobが言ったように、oninputはIE9 +でサポートされています。

ただし、「oninputイベントはInternet Explorer 9ではバグがあります。文字が挿入された場合にのみ、ユーザーインターフェースを介してテキストフィールドから文字が削除されても発生しません。onpropertychangeイベントはInternet Explorer 9でサポートされていますが、 oninputイベント、バグもあり、削除時に起動されません。

文字はいくつかの方法で削除できるため(BackspaceおよびDeleteキー、CTRL + X、コンテキストメニューの[Cut and Delete]コマンド)、すべての変更を検出するための適切な解決策はありません。コンテキストメニューの[削除]コマンドで文字を削除すると、Internet Explorer 9のJavaScriptで変更を検出できません。

入力とキーアップの両方にバインドする良い結果があります(バックスペースキーを押しながらIEでキーダウンしたい場合はキーダウンします)。



1

ここでは、「input」はDOM Level Oイベントモデルの「oninput」と同じように機能するだけだと思います。

ちなみに:

Silkfireがコメントしたように、私も 'jQuery input event'をググった。したがって、私はここに導かれ、「入力」がjqueryのbind()コマンドの受け入れ可能なパラメーターであることを知って驚いていました。で処置でのjQueryた(p。102、2008年版)「の入力が」(20人の他人に対して、「アンロード」に「ボケ」から)可能イベントとしてmentionnedされていません。それは、p。92、逆は、再読込から(すなわち、レベル0とレベル2モデル間の異なる文字列識別子への参照から)推測される可能性があります。それはかなり誤解を招くものです。


入力をありがとう(しゃれは意図されていません)、これは現在公式スレッドのようです!:)
シルクファイヤー2013

0

jQueryには、.on()メソッドの次のシグネチャがあります。.on( events [, selector ] [, data ], handler )

イベントは、この参照にリストされているイベントのいずれかである可能性があります。

https://developer.mozilla.org/en-US/docs/Web/Events

ただし、すべてのブラウザでサポートされているわけではありません。

Mozillaは入力イベントについて次のように述べています。

または要素の値が変更されると、DOM入力イベントが同期的に発生します。さらに、コンテンツが変更されたときに、コンテンツ編集可能なエディターで起動します。


-8
$("input#myId").bind('keyup', function (e) {    
    // Do Stuff
});

IEとChromeの両方で動作


bind非推奨、使用on
Tushar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.