質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1893閲覧

ブラウザ毎の入力された値の取得タイミングについて

senachi

総合スコア96

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/09/05 13:26

こんにちは。
私はJS初心者なのですが、仕事でjQueryを使って以下のような、テキストボックスの入力を検知したら、その入力値を取得してAPIの引数として与える処理を書いています。
が、Firefoxでテストした場合だけどうしても上手く動いてくれません。
英語の記事なども調べたんですがなかなか良い解答が見つかりません。お知恵をお貸しいただけないでしょうか?

javascript

1var timer; 2 3//テキストボックスの入力を検知したら、入力された値を取得して別の関数に渡す。 4$('#textBox').on('keypress', function(key){ 5 var inputText = $('#textBox').val(); 6 adjustTiming(inputText); 7}); 8 9function adjustTiming(params) { 10//1秒経つ前に入力があったら、setTimeout関数のカウントを0に戻す。 11if (timer) { 12 clearTimeout(timer); 13} 14 15//1秒経ったらhogehogeAPIを叩く。 16timer = setTimeout( 17 function(){ 18 hogehogeApi(params); 19 }, 20 1000); 21}

上記のソースですが、例えばテキストボックスに「北海道」と入力した場合、ブラウザ毎に変数inputTextには次のような値が入ります。

ChromeとIEの場合: 「北海道」
Firefoxの場合:「ほっかいど」

ChromeやIEと同様に、Firefoxから入力した場合でもinputTextには「北海道」という値が入ることを期待しているのですが、中途半端な値が入ってしまい上手くいきません。
また、Firefoxの場合、上記の「北海道」と入力した後に何か別の任意のキー(例:「あ」「i」「 」など)を1回入力するとそこではじめてinputTextに「北海道」という値が入ります。

要するにFirefoxの場合、ChromeやIEに比べて何か余計な文字を1文字入力しないと期待する値がinputTextに入らないことまではわかっているのですが、それが何故なのかがさっぱりわかりません。

どなたかお知恵をお貸しいただけないでしょうか、よろしくお願い致しますm(__)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

keypressは動作安定しません
oninputで処理するのが妥当です。

ただし、IEはoninput対応してないようなので除外してください

HTML

1<script> 2$(function(){ 3 if (window.navigator.userAgent.toLowerCase().indexOf('msie') != -1) { 4 $('#hoge').on('keypress',function(){ 5 console.log($(this).val()); 6 }); 7 }else{ 8 $('#hoge').on('input',function(){ 9 console.log($(this).val()); 10 }); 11 } 12}); 13</script> 14<input type="text" id="hoge">

投稿2016/09/05 13:38

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

senachi

2016/09/05 13:45

早々とご回答ありがとうございます。早速明日試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問