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

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

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

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

jQuery

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

Q&A

解決済

1回答

1274閲覧

【Jquery】errorメソッドが実行されない【Javascript】

sanset

総合スコア186

JavaScript

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

jQuery

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

0グッド

2クリップ

投稿2018/01/15 03:08

Twitter APIで自身のプロフィールを取得しているのですが、プロフィール画像を変更した時に自動で最新の画像を読み取り、変更するような設定したいと思います。

プロフィール画像を変更した時、前の画像のURLを読みに行くと404エラーになるのは確認済みだったので、Jqueryのerrorメソッドで、画像がエラー出したらAjaxで最新の画像を読みに行き、保存するようなプログラムを考えていました。

ところが、何故かエラーメソッドが実行されません。

試しに適当な他のドメインでも試してみたのですが、.errorが上手く実行されたのは、ドメインがそもそも間違っている場合のみでした。
https://example/xxxxxxxx.jpgなど、サーバーに接続できない系)

以下はサンプルコードです。

HTML

1<img class="image_test" data-name="image1" src="https://pbs.twimg.com/profile_images/123456789/xxxxxxxxx.jpg"> 2<img class="image_test" data-name="image2" src="https://example/xxxxxxxx.jpg"> 3 4<script> 5jQuery(function(){ 6 jQuery('.image_test').error(function(){ 7 console.log(jQuery(this).data('name')); 8 }); 9}); 10</script>

この場合、consoleに表示されるのは「image2」のみです。

「image1」のほうでエラーイベントを実行させるにはどうしたら良いのでしょうか…。

ブラウザは「Chrome 63.0.3239.132」(最新版)で、https化されたサイトで実行しています。

どなたかご教示お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、それ以前の問題として、.errorはjQuery 1.8で非推奨、jQuery 3.0で廃止となります(公式)。

そして、状況によっては「JavaScriptをセットする前に読み込みエラーとなっていた」となるので、onerrorイベントをセットしても手遅れとなります。このような場合は、「画像のDOM.complete == trueかつ画像のDOM.naturalWidth == 0」のような条件でチェックすれば、画像が読み込めているかを判定できます。

投稿2018/01/15 04:04

編集2018/01/15 07:18
maisumakun

総合スコア145183

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

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

sanset

2018/01/15 06:33

前回に引き続き、maisumakunさん回答ありがとうございます。 非推奨なのは見逃しておりました。 jQuery(document).on('error', '.image_test', function() {}); に置き換えさせていただきました。 申し訳ありません、分からない点の質問なのですが、 「画像のDOM.completed == trueかつ画像のDOM.naturalWidth == 0」 DOM.naturalWidthは把握できたのですが、DOM.completedというメソッドは初見で、ググッても分かりませんでした。 エラーは出ていないので現存するメソッドだと思うのですが、「jQuery('.image_test').completed == true」の場合は、画像が読み込めていないということになるのでしょうか? また、 「そして、状況によっては「JavaScriptをセットする前に読み込みエラーとなっていた」となるので、onerrorイベントをセットしても手遅れとなります。」 というのは、jQuery(document).ready(function(){ などで画像の読み込みを済ませた後に、「画像のDOM.completed == trueかつ画像のDOM.naturalWidth == 0」などでチェックした方が良い、という解釈で合ってますか? お手数おかけしますが、よろしくお願いいたします。
maisumakun

2018/01/15 07:17

すみません、completedではなくcompleteです(本文の方も後で修正します)。これは「ロード中」にfalse、「ロード終了」(成功・失敗を問わず)していればtrueという値を取ります。 ●complete==true→すでに読み込みが終わっているので、naturalWidthを見て画像が読み込めているか確認する(onerrorをセットしても、もはや動かない) ●complete==false→読み込み中なので、onerrorで処理をセットする(読み込む前なのでnaturalWidthは拾えない) というような切り分けが適当かと思います。
sanset

2018/01/16 05:41

回答ありがとうございます! エラー処理は最新の記述で、加えてcompleteも記述して万全を期したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問