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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Q&A

解決済

4回答

1076閲覧

jsでalertを入れないと動かないです...

Masakim

総合スコア7

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/02/04 15:30

前提・実現したいこと

下記ソースで、alertを入れなくても、挙動するようにしたいです。
現状、loadが終わった後、alertがあるとクリックファンクションが動くのですが、
無いと何も動かない状況です。

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

エラーメッセージが特にございません。

該当のソースコード

js

1$(function(){ 2 var header=$("header"); 3 var footer=$("footer"); 4 var menu_content=$("#menu"); 5 header.load("http://noanoa913.com/financial/header.html"); 6 footer.load("http://noanoa913.com/financial/footer.html"); 7 menu_content.load("http://noanoa913.com/financial/menu.html"); 8 9 alert(1); //これを消したいです。 10 11 var menu = $('#menu'), 12 menuBtn = $('.header-right.is-sp'), 13 body = $(document.body), 14 menuWidth = menu.outerWidth(); 15 16 menuBtn.click(function(){ 17 menu.animate({'right' : 0 }, 'fast'); 18 body.animate({'right': 0 }, 'fast'); 19 $('#main').css({'position':'fixed' }); 20 $('.top_bg').css({'margin-top':'0' }); 21 $('#black').css({'display': 'block'}); 22 }); 23 24 $('#black').click(function(){ 25 menu.animate({'right' : -menuWidth }, 'fast'); 26 body.animate({'right':0 }, 'fast'); 27 $('.top_bg').css({'margin-top':'40px' }); 28 $('#black').css({'display': 'none'}); 29 $('#main').css({'position':'static' }); 30 }); 31 32}); 33

試したこと

onloadとかがよくわからず。。。

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

お忙しいところ、ご確認ありがとうございます。

html

1//index.html 2 3<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 4 <script src="http://noanoa913.com/financial/js/index.js"></script> 5 </body> 6</html>

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

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

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

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

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

guest

回答4

0

namnium1125さんの回答に乗っかる形ですがこれならどうでしょう。load自体がDeferredオブジェクトを返すわけではないようなので、自らDeferredオブジェクトを生成し、loadのコールバック内でresolveを呼び出して同期を取るようにしてみました。

JavaScript

1$(function(){ 2 var header=$("header"), 3 footer=$("footer"), 4 menu_content=$("#menu"), 5 var L1 = $.Deferred(); 6 L2 = $.Deferred(); 7 L3 = $.Deferred(); 8 header.load("http://noanoa913.com/financial/header.html", function() {L1.resolve();}), 9 footer.load("http://noanoa913.com/financial/footer.html", function() {L2.resolve();}), 10 menu_content.load("http://noanoa913.com/financial/menu.html", function() {L3.resolve();}); 11 12 $.when(L1,L2,L3) 13 .done(function(){ 14 var menu = $('#menu'), 15 menuBtn = $('.header-right.is-sp'), 16 body = $(document.body), 17 menuWidth = menu.outerWidth(); 18 19 menuBtn.click(function(){ 20 menu.animate({'right' : 0 }, 'fast'); 21 body.animate({'right': 0 }, 'fast'); 22 $('#main').css({'position':'fixed' }); 23 $('.top_bg').css({'margin-top':'0' }); 24 $('#black').css({'display': 'block'}); 25 }); 26 27 $('#black').click(function(){ 28 menu.animate({'right' : -menuWidth }, 'fast'); 29 body.animate({'right':0 }, 'fast'); 30 $('.top_bg').css({'margin-top':'40px' }); 31 $('#black').css({'display': 'none'}); 32 $('#main').css({'position':'static' }); 33 }); 34 }); 35});

投稿2018/02/05 01:42

masaya_ohashi

総合スコア9206

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

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

namnium1125

2018/02/05 02:00

私も今調べていたところだったのですけど、返り値はjQオブジェクトみたいですね…(^ ^; 勘違いしてしまっていました、なんというか、ありがとうございます。m(_ _)m
Masakim

2018/02/12 05:57

ご連絡遅くなっておりまして、申し訳ございません。 こちら再度作業に入る際に、試させていただき、ご報告いたします。
Masakim

2018/02/19 02:20

masaya_ohashi様 ご連絡遅くなり、申し訳ございませんでした。 こちらも確認できました。 ありがとうございました。 今回は、LineOfLightning様のご回答が、既存ソースに一番近い形だったため、BAにさせていただきました。 ご了承下さいませ。 引き続き宜しくお願い致します。
guest

0

$.ajaxで処理してみては?

javascript

1 2$(function(){ 3 var d = $.Deferred(); 4 $.when( 5 $.ajax({url:"http://noanoa913.com/financial/header.html"}).done(function(data){$("header").text(data);d.resolve();}), 6 $.ajax({url:"http://noanoa913.com/financial/footer.html"}).done(function(data){$("footer").text(data);d.resolve();}), 7 $.ajax({url:"http://noanoa913.com/financial/menu.html"}).done(function(data){$("#menu").text(data);d.resolve();}) 8 ).done(function(){ 9 console.log("end"); 10 }); 11}); 12

参考までに

以下、sampleで試してみて下さい

  • self.htm

HTML

1<div id="start"></div> 2<div id="d1"></div> 3<div id="d2"></div> 4<div id="d3"></div> 5<div id="end"></div>
  • get.php

パラメータsleepで指定した秒数後に、その値を表示する

PHP

1<?PHP 2$sleep=filter_input(INPUT_GET,"sleep"); 3sleep($sleep); 4print $sleep; 5?>

パターン1($.ajax)

javascript

1$(function(){ 2 $("#start").text("start"); 3 var d = $.Deferred(); 4 $.when( 5 $.ajax({url:"get.php?sleep=3"}).done(function(data){$("#d1").text(data);d.resolve();}), 6 $.ajax({url:"get.php?sleep=1"}).done(function(data){$("#d2").text(data);d.resolve();}), 7 $.ajax({url:"get.php?sleep=5"}).done(function(data){$("#d3").text(data);d.resolve();}) 8 ).done(function(){ 9 $("#end").text("end"); 10 }); 11});

パターン2(deferredをwhen)

javascript

1$(function(){ 2 $("#start").text("start"); 3 var d1 = $.Deferred(); 4 var d2 = $.Deferred(); 5 var d3 = $.Deferred(); 6 $("#d1").load("get.php?sleep=3",function(){d1.resolve()}); 7 $("#d2").load("get.php?sleep=1",function(){d2.resolve()}); 8 $("#d3").load("get.php?sleep=5",function(){d3.resolve()}); 9 $.when( 10 d1,d2,d3 11 ).done(function(){ 12 $("#end").text("end"); 13 }); 14}); 15

パターン3(deferredをwhen + promise)

javascript

1$(function(){ 2 $("#start").text("start"); 3 var d1 = $.Deferred(); 4 var d2 = $.Deferred(); 5 var d3 = $.Deferred(); 6 $.when( 7 $("#d1").load("get.php?sleep=3",function(){d1.resolve()}),d1.promise(), 8 $("#d2").load("get.php?sleep=1",function(){d2.resolve()}),d2.promise(), 9 $("#d3").load("get.php?sleep=5",function(){d3.resolve()}),d3.promise() 10 ).done(function(){ 11 $("#end").text("end"); 12 }); 13});

パターン4(promiseを利用)

※jQueryの他に、非対応ブラウザ(とくにIE)向けにライブラリを追加

javascript

1<script src="https://www.promisejs.org/polyfills/promise-6.1.0.min.js"></script>

その上で

javascript

1$(function(){ 2 $("#start").text("start"); 3 Promise.all([ 4 new Promise(function(resolve){$("#d1").load("get.php?sleep=3",function(){resolve(this);})}), 5 new Promise(function(resolve){$("#d2").load("get.php?sleep=1",function(){resolve(this);})}), 6 new Promise(function(resolve){$("#d3").load("get.php?sleep=5",function(){resolve(this);})}), 7 ]).then(function(){ 8 $("#end").text("end"); 9 }); 10});

投稿2018/02/05 01:05

編集2018/02/05 08:03
yambejp

総合スコア114839

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

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

Masakim

2018/02/12 05:57

ご連絡遅くなっておりまして、申し訳ございません。 こちら再度作業に入る際に、試させていただき、ご報告いたします。
Masakim

2018/02/19 02:21

yambejp様 ご連絡遅くなり、申し訳ございませんでした。 こちら確認できました。 様々な方法のご提案ありがとうございました。 今回は、LineOfLightning様のご回答が、既存ソースに一番近い形だったため、BAにさせていただきました。 ご了承下さいませ。 引き続き宜しくお願い致します。
guest

0

試していないので確証はありませんが、.when().done()を使えばうまくいくと思います。

js

1$(function(){ 2 var header=$("header"), 3 footer=$("footer"), 4 menu_content=$("#menu"), 5 L1 = header.load("http://noanoa913.com/financial/header.html"), 6 L2 = footer.load("http://noanoa913.com/financial/footer.html"), 7 L3 = menu_content.load("http://noanoa913.com/financial/menu.html"); 8 9 $.when(L1,L2,L3) 10 .done(function(){ 11 var menu = $('#menu'), 12 menuBtn = $('.header-right.is-sp'), 13 body = $(document.body), 14 menuWidth = menu.outerWidth(); 15 16 menuBtn.click(function(){ 17 menu.animate({'right' : 0 }, 'fast'); 18 body.animate({'right': 0 }, 'fast'); 19 $('#main').css({'position':'fixed' }); 20 $('.top_bg').css({'margin-top':'0' }); 21 $('#black').css({'display': 'block'}); 22 }); 23 24 $('#black').click(function(){ 25 menu.animate({'right' : -menuWidth }, 'fast'); 26 body.animate({'right':0 }, 'fast'); 27 $('.top_bg').css({'margin-top':'40px' }); 28 $('#black').css({'display': 'none'}); 29 $('#main').css({'position':'static' }); 30 }); 31 }); 32});

投稿2018/02/04 16:26

編集2018/02/04 16:29
namnium1125

総合スコア2043

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

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

Masakim

2018/02/04 16:34

ご回答ありがとうございました。 ただできませんでした。 http://noanoa913.com/financial/index.html ID test PASS test でございます。 もしよろしければ、再度確認していただけませんでしょうか?
guest

0

ベストアンサー

jQueryのload関数は非同期処理です。
同期処理というのは、処理が上から順に行われるものですが、非同期の場合、処理が終わるのを待たないため、順番が逆転することがあります。

つまり、下記のような場合、headerやfooterやmenu_contentのload関数が終わる前に、
click関数が呼び出されてしまうと、menuやblackというid属性を持つ要素がないため、
イベントが登録されなくなってしまいます。

Javascript

1 header.load("http://noanoa913.com/financial/header.html"); 2 footer.load("http://noanoa913.com/financial/footer.html"); 3 menu_content.load("http://noanoa913.com/financial/menu.html"); 4 5 6 var menu = $('#menu'), 7 menuBtn = $('.header-right.is-sp'), 8 body = $(document.body), 9 menuWidth = menu.outerWidth(); 10 11 menuBtn.click(function(){ 12 menu.animate({'right' : 0 }, 'fast'); 13 body.animate({'right': 0 }, 'fast'); 14 $('#main').css({'position':'fixed' }); 15 $('.top_bg').css({'margin-top':'0' }); 16 $('#black').css({'display': 'block'}); 17 }); 18 19 $('#black').click(function(){ 20 menu.animate({'right' : -menuWidth }, 'fast'); 21 body.animate({'right':0 }, 'fast'); 22 $('.top_bg').css({'margin-top':'40px' }); 23 $('#black').css({'display': 'none'}); 24 $('#main').css({'position':'static' }); 25 });

当然、load関数やajaxのような非同期処理の場合、処理が終わった後に特定の処理を呼び出したいということはよくあることです。なので、コールバック関数を引数として指定することにより、load関数が終わった後に処理を行わせる仕組みが用意されています。

例)

Javascript

1 2 var header=$("header"); 3 var footer=$("footer"); 4 var menu_content=$("#menu"); 5 header.load("http://noanoa913.com/financial/header.html"); 6 footer.load("http://noanoa913.com/financial/footer.html"); 7 8 9 // menu_contentの読込処理が終わった後に下記の無名関数(クリックイベントの登録等)を行う 10 menu_content.load("http://noanoa913.com/financial/menu.html",function(){ 11 12 var menu = $('#menu'), 13 menuBtn = $('.header-right.is-sp'), 14 body = $(document.body), 15 menuWidth = menu.outerWidth(); 16 17 menuBtn.click(function(){ 18 menu.animate({'right' : 0 }, 'fast'); 19 body.animate({'right': 0 }, 'fast'); 20 $('#main').css({'position':'fixed' }); 21 $('.top_bg').css({'margin-top':'0' }); 22 $('#black').css({'display': 'block'}); 23 }); 24 25 $('#black').click(function(){ 26 menu.animate({'right' : -menuWidth }, 'fast'); 27 body.animate({'right':0 }, 'fast'); 28 $('.top_bg').css({'margin-top':'40px' }); 29 $('#black').css({'display': 'none'}); 30 $('#main').css({'position':'static' }); 31 }); 32 33}); 34

投稿2018/02/05 05:33

LineOfLightning

総合スコア253

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

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

Masakim

2018/02/12 05:56

ご連絡遅くなっておりまして、申し訳ございません。 こちら再度作業に入る際に、試させていただき、ご報告いたします。
Masakim

2018/02/19 02:19

ご連絡遅くなり、申し訳ございませんでした。 できました。ありがとうございました。 LineOfLightning様のご回答が、既存ソースに一番近い形だったため、BAにさせていただきました。 引き続き宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問