javascript

Javascript:setTimeoutの中のfunctionのthis

(まだ理解が浅いので間違っているかもしれない) setTimeoutで実行するfunctionは別コンテキストで実行されるゆえに、(ブラウザで実行した場合は)thisがWindowになる: const mountains = { names: ['fuji', 'tsurugi', 'ontake'], print: function() { s…

IE11:ajaxで構文エラー

以下のコードが構文エラーを吐いて悩んでいました: $.ajax({ type: 'POST', url: '/get-products', dataType:'json', cache: false, }) .then( function (data) { // なんらかの処理 }, function () { // なんらかの処理 }, // ここのカンマを削除する必要…

Javascript:Firefox/Safariでbeforeunloadが効かない

FirefoxとSafariでは、beforeunloadが呼ばれても何も処理をしてくれないことがありました。 (ポップアップを表示するのはできるんですが…) <html> <body> <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script> <a href="https://www.google.com">Google</a> <script> window.addEventListener("beforeunload",function() { axios.get('/…</body></html>

CakePHP3:テンプレートで必要なjavascriptをレイアウトで読み込んだjavascriptの後に読み込ませる

jQuery等のライブラリをレイアウトファイルで読み込ませ、その他のJavaScriptファイルはテンプレート側で必要に応じて読み込む方法をどうやったらよいか、 前から悩んでいたのですが、以下、動く方法が1つ見つかりました。 レイアウトファイルの一部 append(…

Remodal:アンカーを通じて開くことができない

キレイなモーダルを簡単に実装できて重宝しているRemodalですが、アンカーで起動できない現象に遭遇しました: <div class="remodal" data-remodal-id="my-remodal" data-remodal-options="hashTracking: false"> <button data-remodal-action="close" class="remodal-close"></button> <h1>Remodal</h1> <p> Responsive, lightweight, fast, synchronized with CSS animatio…</p></div>

metisMenu:画面遷移の際、第2階層が全部展開するのを防ぐ

第2階層のclassにcollapseを追加すれば回避できます: <ul class='nav nav-second-level collapse'></ul>

URI.jsでURLをパースする

URLをパースするの、面倒ですよね。URI.jsが便利なので使いましょう: <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.19.0/URI.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> let uri = new URI(); let functions = ['hostna…</head></html>

HTML5 AudioとWeb Audio APIの違い

実際にやってみて、気づいた点を列挙します。 対応ブラウザ HTML5 AudioはIE11やモバイルを含めて対応しています。 Web Audio APIはIE11で未対応です オーディオファイルのダウンロード HTML5 Audioでは何もしなくても分割ダウンロードが行われます(ブラウ…

Javascript:クラスじゃないのにthisを参照できる?

以下のコードを書いても動くのであれ?と思いました: function getArea(width, height){ this.width = width; this.height = height; return this.width * this.height; } console.log(getArea(10,20)); // 200 thisと書いていますが、これはクラスをnewし…

IE11を便利に使う

普段は利用を敬遠しているIE11ですが先程、ちょうどよい用途を見つけました。 PlaycodeでJavascriptを勉強しているとき、Chromeを使うと「あれ、これES2015なのにBabel通さずに動くな…」ということがあります: そこでIE11の出番です。同じコードをIE11で動…

Javascript:変数の初期化の落とし穴

数字を格納する予定の場合は初期化必須ですね。 以下のコードを実行するとNaNが出力されます: function sum(){ var total; // total =0 とすべき for(let i=0;i

JsFiddleの代替サービス:PLAYCODE

JsFiddleって、コードを変更してからUPDATEを押してRUNするのが面倒だなと思ってました。 またconsole.logを見るにはブラウザのデベロッパツールを開かねばならない…(裏技もあるみたいですが) そこでPLAYCODEを使ってみました。書いたコードは即座に実行さ…

Javascript:varの有無の違い

明けましておめでとうございます。元日から、こちらの本でJavascriptの勉強をしています: 改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで作者: 山田祥寛出版社/メーカー: 技術評論社発売日: 2016/09/30メディア: 大型本この商…

コールバックに指定したアロー形式の関数を普通?の関数に書き直してみる

Angularのチュートリアルで、このようなコードがあります: getHero(id: number): Promise<Hero> { return this.getHeroes().then( heroes => heroes.find( hero => hero.id === id )); } findに指定しているコールバック関数は、書き直すとこうなります: (hero) </hero>…

javascriptのunary plusについて

Angularのチュートリアルをやっていて見慣れない記述が気になりました: +params.get('id') この+はunary plusといいまして、値を数値に変換してくれるそうです: developer.mozilla.org JSFiddleでテストした結果は以下の通り: console.log(+"3"); // 3 co…