+ JavaScript の質問用スレッド vol.124 +
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。 >>2-6 のテンプレを読んだ上で質問してください。次スレは>>950 が>>2 のテンプレ案(本スレで改善案があれば考慮)を元に立ててください ■質問を書く上で (1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。 (2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。 (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など) (3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。 (4) 常に自発的に調べる心構えを持ってください。 具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。 わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。 (5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。 (6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。 ※必ず「問題の事象が再現されること」を確認してください。 必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。 (7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。 (8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2 の質問テンプレートを活用してみてください。 (9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。 (10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 ※前スレ + JavaScript の質問用スレッド vol.123 + https://mevius.5ch.net/test/read.cgi/tech/1491143438/ VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured arr = null もしくは arr = [] じゃダメなの? 自分は arr.length = 0 を使う >>466 arr が let ならそれでもいいけど、const の場合は再代入出来ない >>468 constなのに長さ0にしちゃっていいの? >>469 constが禁止するのは再代入 プロパティ変更は禁止しない >>470 そういう意味ではなく constで定義している配列の長さを0にするってことは変更不可として定義してる配列なのになぜか0になってるというバグを生みやすいんじゃないか? >>471 「変更不可」と「再代入禁止」の区別を付けられるようになろう 君のその認識こそ、不具合を生み出す原因になるよ やっぱjavascriptは欠陥言語だよな 定数とオブジェクトでconstの使い方変わるし Ruby でも、入れ物と各要素は別。 shallow copy と同じ。動的言語は全てそう。 deep copy, deep freeze などは、誰かが作る必要がある 入れ物をフリーズしても、各要素は変更できる ary = %w(a b).freeze ary[ 0 ].upcase! p ary #=> ["A", "b"] だから、入れ物と各要素の両方を、フリーズする必要がある ary_2 = %w(x y).map( &:freeze ).freeze ary_2[ 0 ].upcase! #=> エラー。変更できない! <input type="button" value="aaaaaa" id="test1"> <br> <input type="button" value="bbbbbb" id="test2"> <スクリプト> var id_list = ["test1","test2"]; for(let n=1;n<=id_list.length;n++){ var elm = document.getElementById(id_list[n-1]); elm.addEventListener( "click", function(e){ alert(elm.value); } ); } </スクリプト> aaaaaaボタンをクリックしてもbbbbbbと表示されてしまいます どこが間違っているんですか? >>482 スコープまわりの認識とか? var を使わずに const, let 使えば意図した通りに動くはず alert (elm.value)をalert(e.currentTarget.value)に変えたればおけ alert(this.value) または const elm = document.getElementById(id_list[n-1]) これから新規でスクリプト書くなら、特別な理由がない限りvarは使わずletかconstだけ使うほうが、変なミス起こらなくていいと思う 初心者は、jQuery を使えばよい 分かりにくい、this の意味も変えてある jQuery で、ボタンの外側・親にイベントを付けて、親で、子のイベントをキャッチできる <div id="btn-wrap"> <button class="BtnA BtnAll" value="1">A-1</button> <button class="BtnA BtnAll" value="2">A-2</button> <button class="BtnB BtnAll" value="3">B-3</button> </div> $( function ( ) { // 外側・親にイベントを付けて、親で、子のイベントをキャッチする $( '#btn-wrap' ).on( 'click', function ( event ) { const value = $( event.target ).prop( 'value' ) console.log( value ) alert( value ) } ); } ); または、共通のclass を付けて、そのクラスだけのイベントをキャッチできる // .BtnA のみ $( '.BtnA' ).on( 'click', function ( event ) { const value = $( this ).prop( 'value' ) console.log( value ) alert( value ) } ); >>488 に追加 セレクターをカンマで区切れば、A またはB でも出来る // .BtnA or .BtnB のみ $( '.BtnA, .BtnB' ).on( 'click', function ( event ) { const value = $( this ).prop( 'value' ) console.log( value ) alert( value ) } ); イベントのバブリングを学ぶにはいい機会(丁度よい題材)だとは思うけど、「初心者に向けて」というエクスキューズでもって今時jQueryを勧める態度には悪意に近いモノを感じる 今後廃れていくだけだもんな 新たに学習する必要はないわな こんにちはこのたびはお世話になります Javaスクリプトの質問ですが いろいろ煮詰まっておりさしあたり 変数のスコープとオブジェクトのことがよくわからないでして 変数は関数内のみのローカルありますよね でオブジェクトも var obj=new obj() といったインスタンツなら変数とおなじでローカルだったりグローバルだったりするんですかな まずは以上よろしくお願いします バーよりレッツを使うんですね承知しました。 ブラウザ画面内に表示されたDOMオブジェクトは常にグローバルなんですかね 何もかもがわからん window.document.body, window.document.head など、 windowオブジェクトはグローバル windowが無くても、document.head でも同じ window.document.head == document.head //=> true 例えば、Pjax で、ページを作っている場合、 ページ遷移したように見えても、window に追加したオブジェクトは初期化されない。 そのまま残っている ページの一部分しか変更されていないから。 ページをreload していないから 参考書に、Javaスクリプトにはクラスの概念はない、て書いてあるんですが もしかして情報が古い? その本で勉強するのやめたら varを使ってるのもそのせいだろうし >>499 「クラスの概念がない」は正しい JavaScriptはプロトタイプベースでclass文は糖衣構文だからな そういう意味で書かれているのなら正しいといえるが、書籍を持ってない人が文脈を読みとれるはずもない 書籍の正しさを保証するのはその書籍を持っている人だけ まあvar使ってる時点でES15以前だから読む価値なしですね 時間の無駄なんでその本を投げ捨てろ >>499 あと、正しさを気にするなら、カナ交じり用語を使うのを止めた方がいい ・Javaスクリプト ・バー ・レッツ こんばんはいつもお世話なります 今日でかなり学習は進みましたありがとうございます さっそく質問ですが クロッパーJSという便利ライブラリを見つけて解析しております ところが fileReaderでダイヤログを出してjpg画像なりを読んでまずは画面にプレビューしますが、 あっ間違えたのテイで再度fileReaderして別の画像を読み込むのですが プレビュー画面が前のまま変わらないのです 以上よろしくお願いします >>506 クロームdevtoolでソースcodeを解析してみればいいんじゃないかな ネタ品質が低くてすまん クロッパーJSの公式デモページ(エマワトソンの写真のやつ)でImport Image with Blob URLsというボタンは 何度でも写真を読み直しできるんですよ インスタンスをデストロイがカギとは思うのですが >>508 デモページのソースをディフってみたら? クロッパーのことですけんど なかなか敷居が高いですわ インタネッツでもたくさんの人が2回目の読み込みをどうするか質問してますね こんにちは今日も格闘しております グーグルマップのリーフレットプラグインで、写真を地図に貼り付けています 複数貼った時の処理でまた壁につきあたりました 貼り付け関数で作るインスタンスが「imgovlay」なんですがその名前なら例えばimgovlay.options.cornersってやれば四つ角の座標がとれるですけんど 3枚はったあとからでは1枚目の座標が調べられんとです これはどんな工夫したらよいのやら 以上よろしくお願いします 日記ならそろそろ個人ブログでも作ってやったら 前にレスくれてる人は無視、相変わらず中途半端なカタカナ表記で聞きたいこともわかりにくいし書いてるコードも貼らない 一応エスパーしとくと、配列でインスタンス全部持っておくだけでは? ジェーンスタイルというアプリでこのスッドレを見ておるますが、タグのあるコードのコピペはできないんですよ ID:vRC3RkLD0はネタ質問と思ってる 全く面白くないが Chrome拡張機能のjsファイルを修正しようとしているんだけど (バグが出たのに作者放置で逃亡w) JSファルダの中にいくつかjsファイルがあるけど、どれが最初に読み込まれるのですか? また、グローバル変数はファイルを超えて使えますか? >>518 まずは複数の実行コンテキストが存在することを把握するといい chromiumのmanifest V2拡張機能はこの年末にサポート終了が予定されているので、その拡張機能がV2の場合はV3に作り直すことをオススメする HTML部分 <!DOCTYPE html> <html> <head> って書いてるから無理なんかな……index.htmlじゃなくて.cgi直のURLに設定したいんだけど…… >>521 こんにちは cgiてのはperlのコトですかね perlやPHPはHTMLをまるっと吐き出せるんですよ だからjavascriptの仕掛けのあるHTMLをまず作ってみて、その内容をまるごとcgiでprint文などで出力します C#からJavaScriptをコールしたいのだが、このJavaScriptは.jsファイルに入れるのではなく、 htmlファイル内に書かないといけないのかな? setIntervalでtimer1が起動中のときはtimer2を起動させないようにするにはどうやればいいんですか? >>525 setIntervalのラップ関数を作って排他制御する >>526 なるほどー それとsetIntervalも戻り値は0になることはないのですか? >>528 返り値はただのNumber値 プロパティは埋め込めない 数日前からjavascriptやらされてるんだけど質問 ajax関係の処理が例えばJqueryだと$.ajaxとかで終わった時の処理とか エラーだったときの処理とかで分かれてるじゃない? こういうAPIへのリクエストは全部まとめたいからsuccessにreturnするfunctionにしたら 使う側では瞬間帰ってきてundefinedになってしまう・・・ asyncなんだから当たり前だと言われたらそれまでなんだけど そして毎回$.ajaxをそこら中で呼び出すことになる これってそういう言語だからあきらめろしか無い感じ? もちろんasyncをfalseにしろという話になりそうだけどブラウザがメインスレッドでやらんほうがいいとか警告出してくるし >>532 >>533 ごめん色々試してみて自己解決したかも $ajaxをfunctionに包んでたけど単にreturnするのがsuccessに与えてる無名関数へのreturnになってるからな気がした その質問者はしらんけどそんなすれあるのねスレチならあっちいくわ function getdata() { $.ajax({ type: 'post', url: 'aaaa', contentType: 'application/json', dataType: 'json', success: function(jsondata) { return jsondata; }); } 呼び出し元 var a = getdata(); これでaがnullなのはasyncとかだと思ってたけどfunctionの返し先が無名関数だからだと思う こういう場合javascript的にはどうするのが定石なの? getdataの引数に結果を入れる変数渡すの? >>534 PromiseかDeferredを使う >>535 やばいこれおもしろいね また世界が広がったわありがとう! javascript始めてみて非同期処理の世界で頭おかしくなりそう threadやforkとは微妙に違うおもしろさがある ブラウザ資源を独占できない以上非同期なのは仕方がない 隅っこに入れたWEB広告が通信するから描画スレッド止めますなんて言い始めたらぶん殴るわ >>531 強制されてるなら別だけど、とりあえずjQueryはヤメた方がいい >>539 素?のJavascriptの方が良いって事かな? ブラウザー対応考えたら楽だと聞いたけど動作対象がモダン環境なら気にしなくても良いとか? IE6ぐらいはサポートしとけ 長期デフォルトブラウザの実績は覆せない >>540 IE対応するかしないかでほぼ決まる お仕事ならお客さん次第 >>540 そうなんだありがとう caniuseで見たら一番下の緑4個の行だけがターゲットだからfetchで良いんかな Javascript=JQueryってのが当たり前になってるから意識変えれそうで良かった >>545 対応ブラウザの問題がないならfetchで良いと思う 未対応ならPolyfillの選択肢もある VScodeを使っていますが この画面のカスタマイズはできますか 具体的には、ソース全体の縦長のビューがあってそのうち今見ているところが少し明るく表示されてますよね?その色が分かりにくい! つかんでドラッグしたくても見つけにくい! もっとハッキリした色にできますか <html> <head> <meta charset="UTF-8"> <title>てすと</title> </head> <body> <スクリプト> for(let n=1;n<=300;n++){ let str = "<p>" + n + "</p>"; document.write(str); } alert(document.body.clientHeight); alert(window.innerHeight); </スクリプト> </body> </html> ページ全体の高さを求めたいけどdocument.body.clientHeightで 695と表示されウィンドウの高さと同じになってしまいます。 どうすればちゃんとページの高さが求まりますか? web 系の質問は、web制作管理板の方のスレで聞いてください! この板のスレは以前、荒らしが出た時に、緊急避難用に立てたもので、 本来はweb制作管理板の方です >>550 document.body.scrollHeight document.documentElement.clientHeight >>551 はただのコピペなので気にしないように Web制作板の現状は>>213 ,253 ここはプログラム板 HTML, DOM, CSS/SASS や、ブラウザ・サイトのページの知識などは、 web制作管理板の方がよい。ウェブ制作 それ以上のフレームワークなどは、WEBプログラミング板。ウェブ開発 YouTube で有名な、雑食系エンジニア・KENTA の本でも、 ウェブ制作はフロントエンド・コーダー、 ウェブ開発はバックエンド・SE みたいに、異なる分野となっている >>552 ありがとう <!DOCTYPE html>をつけたらdocument.body.clientHeightで取得できるようになりました。 オブジェクトの中で別のプロパティを参照するのはどうすればいいのでしょうか? thisを使うとundefinedが返ってきて、thisを付けないとまだ定義されてないと エラーが出ます。下記の例だとsideSpaceを参照したいのですが うまくいきません。 const sp = { width: 640, sideSpace: 20, space: this.sideSpace * 2, inner: this.width - this.space, } 書き直してみたんですがやはりgetSpace()が未定義エラーが出てしまいます。 const sp = { width: 640, sideSpace: 20, get getSpace() { return this.sidespace * 2; }, space: getSpace() }; >>558 const sp = { width: 640, sideSpace: 20, get space() { return this.sideSpace * 2; }, get inner() { return this.width - this.space; }, }; console.log(sp.space); // 40 console.log(sp.inner); // 600 >>558 spaceとinnerをgetterにすれば良い 関数の引数にオブジェクトを使ってる時要素を固定する方法ってある 例えば function main(obj){ obj.a; obj.b; } みたいなときaとbだけの要素を受け入れたいんだけど 一応その要素があるかで判断して返すって方法はわかるどそれ以外でシンプルな感じで出来ないかなと思って 理解できないから適当に答えるが objに必要なメンバーだけを抽出複製するメソッドを作ってみては? aysncとawaitで頭がこんがらがってきました function sleep() { return new Promise(resolve => { setTimeout(()=>resolve(),2000); }); } async function run(x) { var a = await sleep(); var b = await sleep(); return x; } run(10).then(v=>console.log(v)); //これは4秒後に10と表示されます //しかし、、 async function run2(x) { var a = sleep(); var b = sleep(); var _a=await a; var _b=await b; return x; } run2(20).then(v=>console.log(v)); //これは2秒後に10と表示されます //一体なぜ・・ var _a=await a; //ここで2秒待ち、 var _b=await b;//ここで2秒待ち、 だと思ったのですが・・・ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる