+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 >268
>269
>271もかな。
ありがとうございます。
>269の発想はJavaScriptに慣れてないとできそうじゃないねえ。
勉強になりました。参考にさせていただきます。 JavaScript は難しすぎる。
バグってばかりで、アホらしい
漏れは、Ruby, jQuery ぐらいしか書けない 疑似的に、sablimeTextとか、VisualStudioCodeを模して
ソースコードに対して、キーワード毎に色付けるような、
javascriptのパッケージてないですか? すいません。わかりづらいので修正。
ソースコードに対して×
htmlに書かれた、スニペットに対して〇 これで音がなるのですが、zingle.mp3は10秒程度の長さです。
3秒ぐらいで音をストップさせるにはどうすればいいですか?
const sound_c = new Audio('sound/zingle.mp3');
sound_c .play(); setTimeout()で解決しました。おさわがせしました。 <!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
<title>サンプル</title>
</head>
<body>
<input type="button" value="再生" id="button">
<script>
if ($('#button').val() === "再生"){
$('#button').click(function() {
console.log($('#button').val());
console.log($('#button').val() === "再生");
console.log("再生をはじめました。");
$('#button').val('停止');
});
}
</script>
</body>
</html>
今すっごくハマっているところですが、input要素のvalue値を変化させると、ボタンをクリックさせないように設定しているのですが、
そんなの関係なしに、ボタンがクリックできてしまいます。
これは、どういった理由で変な処理が可能になっているのでしょうか?今後ハマらないためにどのような注意をすればよいでしょうか? <!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
<title>サンプル</title>
</head>
<body>
<input type="button" value="再生" id="button">
<script>
var playing_flag = false;
if (playing_flag === false){
$('#button').click(function() {
console.log('ボタンが押された');
console.log(playing_flag);
$('#button').val('演奏中止');
playing_flag = true;
console.log(playing_flag);
// run();
});
}else{
console.log(playing_flag);
// reset();
}
</script>
</body>
</html>
flag用の変数を使ってもダメだった。どこで躓いているんだろ。。 こういうこと?
ボタンを無効化させる意図がよく分からんけど
disableかstyleのpointer-eventかければいいだけかと
https://i.imgur.com/Nf7k076.jpg もちろん、もともとの目的は無効化なんだけど。
それより、
if(false){
実行A
}
の状態なのに、実行Aが実行されているのが気になって。 <script>
var playing_flag = false;
if (playing_flag === false){
$('#button').click(function() {
console.log('ボタンが押された');
console.log(playing_flag);
$('#button').val('演奏中止');
playing_flag = true;
console.log(playing_flag);
// run();
});
}else{
console.log(playing_flag);
console.log('2回目はこっちが押されるはずでは?');
// reset();
}
</script>
1回目のクリックは、if文の実行で問題ないのだけど。
2回目のクリックは、else文を実行するのでは? <input type="button" value="再生" id="button">
<script>
var playing_flag = false;
const btn = document.getElementById("button");
var run = () => {
console.log(playing_flag);
console.log("再生中");
playing_flag = true;
};
var reset = () => {
console.log(playing_flag);
console.log("停止");
playing_flag = true;
};
if (playing_flag === false) {
btn.addEventListener("click", run, false);
} else {
btn.addEventListener("click", reset, false);
}
</script>
jQueryが悪いのかと思って、イベントリスナーでクリックしてみたけど。
やっぱり2回目のクリックでelse文を実行しない。
なんか、おれ勘違いしてる???? ちょっと訂正。
var reset = () => {
console.log(playing_flag);
console.log("停止");
playing_flag = true;
};
↓
var reset = () => {
console.log(playing_flag);
console.log("停止");
playing_flag = false;
}; その2回通ると思い込んでるif文はイベントハンドラでも何でもないんだからボタン押される前の1回しか通らないよ え。意味がよくわからない。イベントハンドラじゃないから、1回しかとおらない。。?? ずっとコードを眺めてみたら、
>>290のコードは確におかしいことは分かってきた気がする。 >>291,292のコードも、イベントリスナー使ってますけど。
2回クリックしてもelse文にはならず、if文を2回実行しているのでしょうか? playing_flag = false;
var run = () => {
if(playing_flag === false){
console.log(playing_flag);
console.log("再生中");
playing_flag = true;
}else{
reset();
}
};
var reset = () => {
console.log(playing_flag);
console.log("停止");
playing_flag = false;
};
const btn = document.getElementById("button");
btn.addEventListener("click", run, false);
納得いかないけど、>>291,292を上のように変えたら、
期待した通りに動いた。
ボタンの状態に、フラグをつけて、実行に条件を入れるときは注意しないと
いけんのかもなあ。 納得いかない、ねえ?
開発者ツールでどういう順番でどの行の処理がされるか確認したらいいんじゃないかな >>297
むしろ、>>291でフラグ立ててイベントハンドラ振り分けてるのが最高に意味不明なんだが
イベント駆動について勉強してみたら? よくわかってなかったようだ。
下の認識でOKですか?雑ですが。。
「Javascriptはブラウザが開いたとき、上の行から下の行へ基本一回だけ実行する。
しかし、イベントが起きたら例外的にその箇所を実行する。」 >>301
HTMLスクリプト要素のdefer属性(DOMContentLoadedからの実行)とasync属性(HTMLScriptElement#onloadからの非同期実行) >>302ありがとうございます。詳しく調べてみます。
>>291,292を
開発者モードでトレースしてみたのですけど。
ボタンをクリックすると、直前の条件の評価をせずに、
いきなりrun()の中を実行はじめました。
カレントの変数を無視して、初回時の条件が適応されているようです。
多分。疑問に思う方が変なのかもしれませんが、これは慣れですかね。。 例えば、HTMLスクリプト要素にasync属性が指定してあると、次の二つは共に実行されない。
new Promise(addEventListener.bind(this, 'DOMContentLoaded')).then(e => console.log(e));
await new Promise(addEventListener.bind(this, 'DOMContentLoaded')).then(e => console.log(e));
例えば、次は1回クリックしたら次は無い。
new Promise(document.addEventListener.bind(document, 'click')).then(e => console.log(e));
>>301
これら当たり前過ぎる例を説明できますか?
今のJSは巨大なフレームワーク、1997年レベルから2022年レベルにするの大変だろうけど頑張ってね。 >>297
>var playing_flag = false;
>if (playing_flag === false){ 処理 }
playing_flag が真偽値・bool 型なら、単にこう書けば?
if ( playing_flag )
基本、boolを比較してはならない。
すでに、boolになっているから jQuery のon で、任意の要素に、任意のイベントを追加できる
<button id="btn_1" class="btn btn-primary">
<span class="show-when-enabled">送信</span>
<span class="show-when-disabled">送信中...</span>
</button>
<button id="btn_2">送信ボタンをenable にする</button>
<style>
button .show-when-enabled { display: initial; }
button[disabled] .show-when-enabled { display: none; }
button .show-when-disabled { display: none; }
button[disabled] .show-when-disabled { display: initial; }
</style>
$( function ( ) {
$( '#btn_1' ).on( 'click', function ( event ) {
$( this ).prop( 'disabled', true ); // disable にする
} );
$( '#btn_2' ).on( 'click', function ( event ) {
$( '#btn_1' ).prop( 'disabled', false ); // enable にする
} );
} ); もうjqueryスレと統合すべきだと思うの
両者の関連スレ合わせても勢い1すらないんだし jqueryを使わずにpure jsで、ていう質問も大いにありえるから
分けたほうがいいとおも JSスレはプログラム板のスレもあるんだよなあ
既にどちらも人がいないし、今から整理するのは無理そう
+ JavaScript の質問用スレッド vol.124 +
https://mevius.5ch.net/test/read.cgi/tech/1636525464/ どっちでも良い。
答える方としては、素のJS で書くのは非常に面倒
jQuery は可読性が高いので、読めない香具師はいないから、
ひとまず、jQueryで書いて、
それを質問者が書き直したければ、素のJSで書き直せばよい jQueryスレやプログラム板でもいわれてるが、今は統合とかテンプレ修正とか、意欲ある人がいない
+ JavaScript & jQuery 質問用スレッド vol.7 + [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/hp/1478002550/683-687
+ JavaScript の質問用スレッド vol.124 +
https://mevius.5ch.net/test/read.cgi/tech/1636525464/253
>>307も統合を示唆してるが、「やりたいなら、お前が責任持ってやれ」といわれてもやらないだろ?
昔の風潮なら俺も手を貸しただろうが、今はやる気が全く起きないわ
まともな感性で保守する人は皆無だし、jQuery信者は健在だし、俺一人でどうにかなる問題でもないからな jQueryスレはタイトル詐欺だから「jQuery質問用スレッド」にして
jQuery使わない人が迷い込まないようにすれば万事解決 >>312
リンク先をよく読め
jQueryスレは既にある
+ jQuery 質問用スレッド vol.7 + [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/hp/1466750494/ >>313
じゃ、タイトル詐欺スレを削除すれば解決だね 【環境】iOS Catalina 10.15.7,GoogleCrome104.0.5112.101
【何をしたのか】Editor.jsでデータを受け渡す方法について知りたいです。
【エラーメッセージ】そもそも方法がわからないのでエラー等は発生してません。
【期待する結果】Editor.jsで入力したデータを次のページで内容チェックし、更にMySQLへ登録したい。また、記事の編集の際にはMySQLからデータを読み出し、Editor.js上で編集したい。
【サンプルコード】このサイトとまったく同じ状態です。https://reffect.co.jp/html/block-styled-editor-js#i-2
勉強のため自作のブログ投稿用CMSを作成しています。
formとphpで基本的な記事投稿(入力→実際の表示確認→MySQL登録)、記事の再編集(MySQLからのデータ読み込み→投稿フォームへの再表示→編集→MySQL更新)は完成しました。
ただ、現状では画像や表、リストなどを挿入するときにいちいちhtmlタグを入れなければいけないことから、WYSIWYGのひとつEditor.jsを使ってタグを自動生成したいと思っています。
phpのときには教科書どおりinputにnameをつけてPOSTでデータを受け渡してましたが、Editor.jsではdivにテキストエディタを表示させることから、どうやってデータを受け渡すのかつまずいています。
上記サイトではボタンを押すとconsoleに取得データを表示していますが、ボタンを押すと実際の記事表示を確認できるようにしたいと思っています。
どのようなやり方があるでしょうか。お力を貸してください。 >>315
console.logする代わりにデータ(JSON)を確認画面に渡して
確認画面側でEditorJSをreadonlyで表示するか
同じ画面でreadonly viewとedit viewとtoggleさせる(EditorJSのreadonly.toggle)
サーバーにPOSTするのはJSON Ruby on Rails では、WYSIWYG エディターは、
Railsの作者・DHH の会社である、Basecamp 製のtrix を使う JavaScriptスレは荒らされる前は平和だったんだけどね
今は見る影もない 今何とか機能してるのって愚痴スレとHTMLCSS質問スレとPHP質問スレがギリギリって感じか
語ることなんて特にないし仕方ないね HTMLスレは板基準にすれば進んでるよなぁ
まあ最初にやるのがそれってのもあるけど。
初学者がくるようになればこっちも盛り上がるんだろうな?なるよな? 正直調べりゃ分かるからこっちに書き込むエネルギーなんて一々使わないだろってとこは思ってる
jsまで興味を持ったのなら調べるスキルっつーか知識欲も持ち合わせてるだろうし
その結果がこれよ >>321
PHPの質問スレは板が違う
まあ向こうも同じようなもんだけど javascriptもPHPもオワコン。
そしてプログラミングの初学者には難しすぎる
初心者はRubyから学習を始めるべき。
そしてRuby on Railsを習得すればPHPは不要
こっちのスレで質問すれば親切な達人プログラマーがどんな質問にも懇切丁寧に答えてくれる。
↓
Ruby 初心者スレッド Part 67
https://mevius.5ch.net/test/read.cgi/tech/1608837867/ >>325
https://mevius.5ch.net/test/read.cgi/tech/1608837867/512
> 512 デフォルトの名無しさん (ワッチョイ 027c-5Ix7) sage 2022/08/19(金) 13:31:40.23 ID:Gwz5c/EG0
> Rubyガイジがこのスレに誘導しているみたいだけど
> 今更Rubyなんて流行らないし>>503でも指摘されているけど
> 新規案件でRubyやRailsなんて採用しないから初心者が勉強するだけ無駄だぞw RUNTEQ
【知らないと転職無理】未経験エンジニアの疑問全て回答!
www.youtube.com/watch?v=5IzjaC6vEg0
この動画では、Ruby on Rails から始めろと言っている
ウェブ系で最も使われているフレームワーク。
スタートアップでよく使われる
高速開発で、日本語の情報が多い JSで「日付が変わると自動で音が鳴る」というものを作りたいです。 >>328
すいません
JavaScriptで日付が変わると自動で音が鳴るというものを作るにはどうしたらいいですか? >>330
このスレじゃ無理
こっちのスレで質問してみよう。親切な達人プログラマーが懇切丁寧に教えてくれるよ
Ruby 初心者スレッド Part 67
https://mevius.5ch.net/test/read.cgi/tech/1608837867/ >>325,331
4ヶ月前もRuvyスレ移行で受け入れられなかったのに、懲りない人だね 画面遷移に伴って、リクエストヘッダを追加したいときどうすればいいか教えてください。
・1 サーバサイドで「Location」レスポンスヘッダを指定してリダイレクトさせるときに、
リダイレクト先アクセスにリクエストヘッダを添付させることは可能ですか?
・2 ブラウザ側で画面遷移するときに、リクエストヘッダをつけることは可能ですか?
<a>タグ、JavaScriptの「location.href」にリクエストヘッダ追加できますか?
・3 同じく<form>を飛ばすときにリクエストヘッダ付けられますか?
(補足)リクエストヘッダをつけるときに、思い浮かぶのはAjax, XHRを使うことですが、
これを使うと画面遷移は伴いません。
OAuthの勉強をしていて、アクセストークンをブラウザで保持して、それをAuthorizationヘッダーに
添付しないといけないことが分かったので、それをどうやってリクエストヘッダにセットするのかを調べています。
もしあるなら、その実装方法が載っているサイトが見つからなかったので教えてください。 >>335
これを質問した者と同じ者ですが、解決方法が分かったかもしれないので書きます。
まず一度、認証情報なしでアクセスすると、
サーバ側が「401: Authorization Requed」ステータスを返してきて、
そこに「WWW-Authenticate」というレスポンスヘッダで認証が必要である指定が返ってくるので、
それが返ってくるとブラウザは自動でAuthorizationヘッダをセットして再アクセスするので、
サーバサイドは、401を返して、WWW-Authenticateヘッダをレスポンスするように実装しておいて、
一度401でわざと失敗させればよいため、最初から自分でAuthorizationヘッダを添付しなくてもいいのかもしれません。
しかし、ブラウザはそれで自動的に正しいアクセストークンを選んでくれるのでしょうか?
認証サーバ(IdP)から払い出されたアクセストークンをブラウザのローカルストレージか何かに保存しとくと思いますが、
それを適切に選んでくれるかが心配です。 リダイレクト時にカスタムヘッダーを追加するのは無理
ブラウザがローカルストレージから自動的に特定のアクセストークンを取得してヘッダーに追加するようなことがあればセキュリティ的に大問題なのでこれも無理
(カスタムヘッダー無しのCookieだけでいいなら可能)
XHRで取得したレスポンス使ってクライント側JavaScriptで画面を更新する他ない >>337
そのクライアント側JavaScriptで画面を更新するときに、
Authorizationヘッダーを要求されませんか?
そもそも、アクセストークンを要求するのはデータ取得用のAPIだけにとどめておいて、
画面を描画するようなURLに対してアクセストークンを要求してはいけないということでしょうか? 最近までAuthorizationヘッダーがそのままリダイレクトされてたみたいw
https://github.com/whatwg/fetch/pull/1544
HTTPの仕様的にはAuthorizationは削除したほうがいい的なことを書いてるのに・・・
Consider removing header fields that were not automatically generated by the implementation (i.e., those present in the request because they were added by the calling context) where there are security implications; this includes but is not limited to Authorization and Cookie.
https://www.rfc-editor.org/rfc/rfc9110#name-redirection-3xx Ruby on Rails では、Turbolinks を使って、
pjax(ajax と、historyAPI(popState, pushState))を利用して画面遷移する。
通信データを減らすために、body 部分しか変わらない
認証は、退屈な雛形を自動生成する
github.com/abhaynikam/boring_generators
Devise とか、Devise Omniauth(Facebook, GitHub, Google, Twitter)
一番分かりやすい OAuth の説明
qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
基本、日本の未経験者用のバックエンドで採用しているのは、
YouTube で有名な雑食系エンジニア・KENTA の言う通り、Rails優先 >>339
XHRで非同期でリクエストヘッダを付けてサーバへ送信すると
サーバサイドでLocationヘッダーでリダイレクトすると次のリクエストにも暗黙的に前のリクエストヘッダーが引き継がれるのか?
なかなか複雑だな。
だけどXHRでリダイレクトが帰ってきても自動的には画面遷移しない。
ブラウザ側でlocation.hrefしないと画面遷移しないがこの時はさすがに非同期の戻りのリクエストヘッダは引き継げないだろ。
それと、クロスオリジンでリダイレクトする時もリクエストヘッダー引き継がれるの? 初学者の者です
「Pixiv Filter」というChromeの拡張機能の話なんですけど、この拡張機能の一つに、Pixivの検索結果画面で、イラストごとの割り振られたタグを、本来は表示されない検索結果の画面で表示してくれるというものがある
この機能なんだけど、コード(GitHubで公開されている。URLはスパム対策で貼れない、申し訳ない)を読んでも仕組みがどうにも理解できなかった。
「イラストのURLに飛んで、そこからリンクを取得してくる」といったものかとも思ったが、どうやら違う模様
詳しい方いらっしゃったら、ご教授頂きたいです ざっと見たところ
・作品ごとのタグは検索結果画面には表示されないものの検索結果データとして飛んできている
www.pixiv.net/ajax/search/artworks/***のリプライ内のdata[].tags[]という配列がそれ
・バックグラウンドで取得し直してそれをストレージに格納している
background.tsの123行目あたり
type.d.tsのWorksData型にtags配列あり
・検索画面にそれを表示している
search_page.tsの97行目あたり
実際に拡張機能入れて動かしたわけでもないしソース追っただけだから適当だけど ちょっとしたデータを取得するのに、
「イラストのURLに飛んで、そこからリンクを取得してくる」みたいな、
副問い合わせをやっていたら大変 >>345
ですよね…なんかちょっと変かな?という気はしていました、ありがとうございます
「API」とか「ストレージ」「トークン」「クッキー」みたいな通信の部分がからっきしなもので、色々調べながらやらせて頂きます 漏れらだって、Ruby on Rails, Linux, Docker, AWS Solution Architect しか分からない
>>340
に書いたように、誰かが作った、退屈な雛形を自動生成して作っている
CSRF, Strong Parameter, pjax, place holder、データベースの設計など、
全部Railsで勉強しているだけ >>346
察するにその拡張機能を調査分析するのに必要なスキルがまだ足りてないから
もう少し基礎知識を身につけてから挑んだ方がいいと思うよ
分不相応な挑戦は時間のムダにしかならない
あとRailsはNGワードに入れといた方がいい cssファイルのセレクタに、別のjsonファイルの値をインポートして使える方法とかありませんか?
【jsonファイルの値】{color:green;}
みたいな。 sassファイルに、jsonファイルの読み込みとかってできたりする? コードを1人で書いてます。他人が見ることは100%ありません。
(a) function hoge(){ }
(b) var hoge = function(){ };
の区別や管理はどうしてますか?
・返り値のないものはa、あるものはb
・宣言のみは冒頭、実行の伴うものは後述
というルールで書いていましたが、
1万行近くなって見通しよくするために大まかな機能ごとにまとめるようになり
bが順序的に後述になる箇所が出てきました。
”機能ごと”は今後順序変更する可能性があります。
関数リテラルのメリットがいまいちわかりません。どんなメリットがあるのでしょうか?
また返り値有無関係なく全てaにして不便はありますか? >>351
不便はありません
動的に変数の中身の関数を入れ替えたい場合だけ(b)で >>352
動的に全く違う関数に入れ替えられるのですね、なるほどです。
この件では各関数や引数の目的が明確固定ばかりなのでその場合はなさそうです。
極一部名前付き引数を使用していますが、関数内処理はほぼ一定で、その程度です。
ありがとう。 このJavascriptでdivをタブで切り替え表示のサンプルで
Works、Contactタブにimg srcで画像を埋め込んでた場合
Works、Contactタブを選んだ時にだけ画像や内容を読み込む動作ってどうやるの
ttps://posipan.com/js-tab/ >>351
細かい話をするとb自体は関数式であって関数リテラルというのはbの右辺を指す用語
aとbの違いについてはこのへんを参照のこと
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/function
あと個人的な感覚としては返り値の有無で区別をするのはナンセンスだと思う そんな自分のウンチク言ってないで質問に答えてやればいいのに なんで上から目線で「質問に答えてやればいいのに」といえるのだろう? >>360
それは上から目線である理由になってないね
>>358が聞きたいのはそっちだろう 上から目線を感じてしまうのはあなたが小さい人だからよ 356はケチつけられても仕方ない
回答もせず、どうでもいい知識自慢、「このへんを参照のこと」なんて上から目線、自己主張
362の通り気にしすぎ >>364が気にし過ぎでフフッてなる
なるほど同レベルだね 以前はスコープの問題でfunction expression派のライブラリが数多くあった
strict modeができてからはfunction declaration派が増えたように思う MathJaxってVer3になって、レンダリングされた文字列を範囲選択出来なくなった?