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

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

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

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

jQuery

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

Q&A

解決済

2回答

544閲覧

Javascriptのonloadプロパティ

pegy

総合スコア243

JavaScript

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

jQuery

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

0グッド

1クリップ

投稿2018/01/28 16:17

編集2018/01/29 03:29

重ねての質問で恐縮ですが、どうしても理解できなかったため問い合わせさせてください。

【要旨】
下記のように、

  1. .todofukenクラスをクリックすると
  2. クリックした要素のdata-valueを元に
  3. <script src="+src+"></script>が生成されスクリプトが読み込まれる
  4. その読み込まれた先のスクリプトを操作する

という流れになります。

【ご質問】
//ここが不明です。の点が質問の箇所なのですが、

  1. Object.onlaodをMDNで調べてもwindow.onlaodしか出てきません。

MDN
ここでは、windowオブジェクトのプロパティとして設定されるイベントハンドラであり、読込後にfunction
windowの読込(DOMの構築)▶︎処理の実行と言う流れが理解できます。
ここで、xml.onlaodとは一体なんなのでしょうか?
プロトタイプチェーンでwindowまで辿って、プロパティを使用しているのでしょうか?としても、自分で定義した”xmlオブジェクトをロードした時に処理を実行する”の意味がわからないのです。。
つまり、なぜ自分で定義したオブジェクトにonlaodを設定することが可能で、さらに自分が設定したオブジェクトがloadされるという状態が直感的に理解することができないため、アドバイスをいただきたいということになります。
例えばobj={1:'apple',2:'orange'}でobj.onlaod=function(alert('taste good!'))としても、何をloadしているのかよくわからない、、、と言った症状です。。

2)上記の疑問があってのことなのですが、pureJavaScriptと混在しているため、これをJqueryに仮に置き換えようと思い調べたのですが、window.onlaodは$(document).on('ready',function(){})は同義であるかのような記事を拝見しました。
参考記事
実際に書き換えてもundefinedすらもlogに表示されないのですが、jqueryに書き換えは可能なのでしょうか?
$(document).on('ready',function(){
console.log(xml.data);
})

長文となり、誠に申し訳ございませんが、何卒、
よろしくお願い申し上げます。

HTML

1<head> 2</head> 3<body> 4 5 6<div class="item todofuken" data-value="13">東京都</div> 7<div class="item todofuken" data-value="14">神奈川県</div> 8 9<script> 10$(function(){ 11$(document).on('click','.todofuken',function(){ 12 var code =$(this).data('value'); 13 var src = "http://www.ekidata.jp/api/p/" + code + ".json"; 14$('head').append('<script type="text/javascript" charset="UTF-8" src="'+src+'" ></script>') 15xml.onload=function(){//ここが不明です。 16console.log(xml.data); 17} 18}) 19}); 20</script> 21</body>

Javascript

1//"http://www.ekidata.jp/api/p/13.json";リンク先の外部ファイル 2if(typeof(xml)=='undefined') xml = {}; 3xml.data = {"line":[{"line_cd":11301,"line_name":"JR東海道本線(東京~熱海)"},{"line_cd":11302,"line_name":"JR山手線"}]} 4if(typeof(xml.onload)=='function') xml.onload(xml.data);

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

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

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

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

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

think49

2018/01/28 16:33

JavaScriptコードの markdown が機能していない為、修正をお願いします
pegy

2018/01/29 03:29

ご指摘有難うございます。markdownを修正しました。
kei344

2018/01/29 19:46

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答2

0

onloadの名称に惑わされています. あなたがまず調べるべきはJSONP(とそのバリエーション)についてです.

  • 駅データ.jpが公開しているJSONPの仕様が「変数xml.onloadにJSON取得後のコールバック関数を設定しておく」となっているのです. WEBブラウザ組み込みのGlobalEventHandlers.onloadメソッドとは一切関係ありません.(ただ命名上しっくり来るため, たまたま同じ名称となったのです)
  • たとえjQueryを使ったとしても, 変数xmlの使い方に変更はありません.

NOTE:
駅データ.jpの変数xmlの命名は(あなたが嵌ったとおり)本来のXMLと混同する恐れがあるため適切ではありません.


Object.onlaodをMDNで調べてもwindow.onlaodしか出てきません。

以下のページがloadイベントに関わるものです.

https://developer.mozilla.org/en-US/docs/Web/Events/load
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload

window.onlaodは$(document).on('ready',function(){})は同義であるかのような記事を拝見しました。

いいえ, 全く違います.
jQueryのreadyイベントはDOMにおけるDOMContentLoadedイベントに相当します. これはHTML構造の解析が完了した(DOMツリーとしてアクセス可能となった)ことを表すもので, windowオブジェクトが発するloadイベントよりもに発生します.

投稿2018/01/28 22:25

defghi1977

総合スコア4756

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

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

pegy

2018/01/29 12:37

ご回答ありがとうございます。onloadについて、根本から勘違いをしておりました。 無事、理解することができました。ご回答をくださった、皆様とteratailに深謝をいたします。 よろしくお願い申し上げます。
guest

0

ベストアンサー

先程の質問と同様にグローバル変数 xml を宣言している側のコードを読めば、理解できます。

JavaScript

1if(typeof(xml.onload)=='function') xml.onload(xml.data);

xml.onload が関数ならば、xml.onload(xml.data) を呼び出す、という意味です。
従って、予め xml.onload に関数を代入しておけば。自動的に onload プロパティに代入された関数が呼び出されるわけです。
当然ですが、onload プロパティを定義してから xml.onload(xml.data) が呼び出されなければなりません。
後は分かると思います。

Re: pegy さん

投稿2018/01/28 16:38

think49

総合スコア18164

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

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

pegy

2018/01/29 12:36

ご回答ありがとうございます。 一日中本件について、考えておりました。xml.onload=function(){}で関数として定義されたのであれば、 if(typeof(xml.onload)=='function') がtrueとなり、xml.onload(xml.data);が呼び出されると言う仕組みなんですね。お力添えをいただき、誠にありがとうございます。 前進することができそうです。 よろしくお願いもうしあげます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問