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

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

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

Q&A

解決済

2回答

4275閲覧

jQueryで、ある処理の『完了後に』を判定できますか?

murato

総合スコア16

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

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

0グッド

2クリップ

投稿2019/02/19 23:34

編集2019/02/19 23:47

前提・実現したいこと

jQueryで片方の処理の『完了後に』もう片方の処理を実行すること。

発生している問題・エラーメッセージ

発生している問題としては、
「処理Aの『完了後に』処理Bをする」ができず、
「処理Aの『実行後に』処理Bをする」になってしまう点です。

つまり、実行の順番は指定できても、『完了後に』ができないというところに躓いています。

エラーはありません。

該当のソースコード

まず「whenとdone」を試しましたが、『完了後に』はできませんでした。

jQuery

1$(document).ready(function(){ 2 $.when( 3 console.log('処理A'); 4 ).done(function(){ 5 console.log('処理B'); 6 }); 7}); 8

試したこと

続いて試したのが「then」ですが、こちらも『完了後に』はできませんでした。

jQuery

1function execA() { 2 var def = $.Deferred(); 3 console.log('処理A'); 4 def.resolve(); 5 return def.promise(); 6} 7function execB() { 8 var def = $.Deferred(); 9 console.log('処理B'); 10 def.resolve(); 11 return def.promise(); 12} 13$(document).ready(function(){ 14 execA().then(execB); 15});

補足情報(FW/ツールのバージョンなど)

上では「console.log」で出しているためにわかりにくいですが、実際には「autosize」という関数で、テキストエリアの高さを自動調整するものです。

autosize 4.0.2
http://www.jacklmoore.com/autosize/

この計算に時間がかかり計算の前後で高さがカクっとなってしまうために、まず「処理A(autosizeでの高さ計算)」の『完了後に』、「処理B(そのコンテンツを表示する)」という動作を考えているイメージです。

カクっとなる瞬間を隠したいというのが目的になります。

よい方法がございましたら教えてください。

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

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

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

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

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

murato

2019/02/19 23:46

はい、そちらです。「autosize 4.0.2」ですね。質問を訂正しておきます。ご指摘に感謝致します。
guest

回答2

0

ベストアンサー

autosizeは、完了後にautosize:resizedイベントを発生させますので、それを拾いましょう。

javascript

1var $target = $('textarea.some-selector'); 2 3// 最初1回だけの実行、ということでone 4$target.one('autosize:resized', function(){ 5 console.log('処理B'); 6}); 7 8autosize($target);

投稿2019/02/19 23:49

maisumakun

総合スコア145184

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

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

murato

2019/02/20 00:45 編集

そのようなものがあったとは!ありがとうございます。
guest

0

命題にあるとおり非同期を待つのはDeferredでできます
複数Deferredを発行すれば多重で処理できます

javascript

1$(function(){ 2 var def = Array(4).fill(null).map(function(){return $.Deferred();}); 3 $.when(execA(def[0],400,'処理400')).then(function(){ 4 $.when(execA(def[1],300,'処理300')).then(function(){ 5 $.when(execA(def[2],200,'処理200')).then(function(){ 6 execA(def[3],100,'処理100'); 7 }); 8 }); 9 }); 10}); 11 12function execA(def,sec,mes) { 13 setTimeout(function(){ 14 console.log(mes); 15 def.resolve(); 16 },sec); 17 return def.promise(); 18}

投稿2019/02/20 00:55

yambejp

総合スコア114843

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

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

murato

2019/02/21 02:50 編集

遅くなりましてすみません。ありがとうございます。今後の参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問