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

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

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

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

jQuery

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

Q&A

解決済

4回答

2425閲覧

functionは$(function(){が不要か

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/05/23 05:25

編集2019/05/23 06:53
<button onclick="functionName();">実行</button> <script> $(function(){ $('button').click(function(){ alert('hoge'); }); }; function functionName(){ alert('hoge'); } </script>

functionName()は何処に置いてもonclickで実行されますが、画面表示から速攻でonclickすると処理できないケースなどあるのでしょうか?

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

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

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

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

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

m.ts10806

2019/05/23 05:35

回答した後に気づいたのですが メソッドなのでfunction を冒頭につけておかないとエラーになりますよ。 > functionName(){
x_x

2019/05/23 08:01

質問内容が編集されて$(function(){についての文言がなくなりましたが、不要になったということなのでしょうか? 見出しと合わなくなってしまいますし、すでについた回答とも不整合を起こしています。
miyabi_takatsuk

2019/05/23 08:19

しかもくっつきの functionName()じゃなくなってるし。 それはちょっとずるいのでは?質問者さん。 そこは、指摘があったので、修正しましたなど、一言追加しましょう。
guest

回答4

0

呼び出されて初めて実行されるからです。

すごーーーく厳密にいうと、<button onclick="functionName();">実行</button>が読み込まれてからfunctionName(){が読み込まれるまでの間にボタンがクリックされれば未定義エラーになるはずです。

投稿2019/05/23 05:28

m.ts10806

総合スコア80850

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

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

m.ts10806

2019/05/23 05:36 編集

気になった > HTML→CSS→JS→画像の順番で読み込みされるはず これは、HTMLに書いた順番に読み込まれるはず、です。 読み込み=実行というわけでもないですね。
guest

0

ベストアンサー

混同されているのでは。

buttonをクリックした際の挙動でclickメソッドを使う場合は「要素がきちんと読み込まれてから」処理するために「$(function(){...});」を使用しますが、

「要素がきちんと読み込まれてから」とは、ハンドラ|リスナを定義する対象要素の話です。ここで言うとbutton要素のことです。

「onclick」でfunctionを実行する場合はそれが不要なのはなぜでしょうか?

そういうわけで、「onclick」でハンドラを定義する場合、その属性を持っている要素が存在することは自明ですから、必ず「要素がきちんと読み込まれてから」処理されることになります。

画面表示から速攻でonclickすると処理できないケースなどあるのでしょうか?

たとえば、↓これはエラーになります。

html

1<button onclick="functionName();">実行</button> 2<script> 3$('button').click(); 4</script> 5<script> 6function functionName(){ 7 alert('hoge'); 8} 9</script>

しかし、これは関数定義と実行のタイミングの問題であって、「要素がきちんと読み込まれてから」という話とは関係ありません。

質問の変更にあわせて追記

functionName()は何処に置いてもonclickで実行されますが、画面表示から速攻でonclickすると処理できないケースなどあるのでしょうか?

上記のとおり、ありえます。
さらに言えば、イベントとかDOMとか、その辺のわずらわしい話を取っ払って、↓このように書いてもエラーになります。

html

1<script> 2 functionName(); 3</script> 4<script> 5 function functionName(){ 6 alert('hoge'); 7 } 8</script>

JavaScript はこのような依存関係を記述することを苦手(というか放棄)しています。
ただ、最近のJavaScriptには便利なものがありますので、こちらをご利用になるといいでしょう。
import - JavaScript | MDN

投稿2019/05/23 06:42

編集2019/05/23 07:19
Lhankor_Mhy

総合スコア36115

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

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

miyabi_takatsuk

2019/05/23 07:30

script要素またぐパターンを忘れていた・・・。 質問者さん>あと、 <script> functionName(); </script> <script src="hoge.js"></script> hoge.jsの中身:function functionName(){} も同様にエラーになるはずですよ。
Lhankor_Mhy

2019/05/23 08:09

> miyabi_takatsukさん 補足ありがとうございます。 ついでに言えば、 $(function(){ $('button').click(function(){ …… のようにロードイベントで関数を定義しても、その前にクリックしてしまえば同様にエラーになりますね。
x_x

2019/05/23 08:13

それは何も起こらないだけでは?
Lhankor_Mhy

2019/05/23 08:20 編集

あ、そうですね。 こっちが混同してしまった。 $(function(){ function functionName(){ …… のつもりでした。
guest

0

そのコード動きますか?
functionキーワードと、メソッド名の間には半角スペースが必要です。

さて、回答ですが、functionキーワードにて関数を定義した場合は、
定義前の行にて実行をしても、しっかりと実行されます。
そして、クリックイベント追加自体が、
$(function(){});の中に記載されているため、
速攻で押そうが何しようが、そもそも、読み込みが完了してから初めてクリックイベント自体が追加されるため、読み込み前に押しても、反応しない、が正しい挙動です。
(そもそも、まだクリックイベントが追加されてないタイミングだから)
なので、functionキーワードでの定義であれば、どこに書いても基本的には大丈夫です。

ただ、下記の場合は、定義が先でないと動きません。

javascript

1var Name = function(){ 2 // 処理 3};

function定義と、変数定義、これの違いに関しては、なんでかと言うと、申し訳ございません、私自身も今調べてるところです。

そして、

HTML→CSS→JS→画像

これどこで得た知識ですか?
JSの方がCSSより先に読み込ませてたら、当然JSの方が先に読み込み開始しますが。
正しくは、書いた順に、読み込まれる、です。
たとえ、async属性をつけても、読み込みしてる間に次の読み込みも開始できるってだけで、
書いた順に読み込みが開始されるのは変わりません。

投稿2019/05/23 05:43

miyabi_takatsuk

総合スコア9528

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

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

退会済みユーザー

退会済みユーザー

2019/05/23 06:18 編集

書いた順に読み込まれるということは、最下層にfunctionを定義した場合にタイミングによっては未定義エラーにならないでしょうか。 グローバルの場合は何処に記述しても未定義エラーにならないということでしょうか 例えば、var window.Name = function(){の場合など
miyabi_takatsuk

2019/05/23 06:21

そうですね、var定義の場合は、関数呼び出しが先にあれば、未定義エラーになります。 function定義の場合はエラーになりません。 というか、自分でやって試した方が早いのでは・・・・。
guest

0

コールバックの仕様というだけ
必ずしも無名関数は必須ではない

javascript

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script> 3$(function(){ 4 $('#func2').click(function(){ 5 functionName(); 6 }); 7 $('#func3').click(functionName); 8}); 9 10function functionName(){ 11 alert('hoge'); 12} 13</script> 14<button onclick="functionName();" id="func1">1</button> 15<button id="func2">2</button> 16<button id="func3">3</button>

投稿2019/05/23 06:14

編集2019/05/23 06:47
yambejp

総合スコア114843

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問