X



+ JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net
0001Name_Not_Found
垢版 |
2015/08/08(土) 12:43:43.71ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
0213Name_Not_Found
垢版 |
2022/02/03(木) 13:16:12.01ID:???
>>212
できました!ありがとうございます!
0214Name_Not_Found
垢版 |
2022/02/06(日) 13:35:18.15ID:???
>>209
document.addEventListener('keydown', (e) => {
で、何回もイベント登録されたら、大変。
イベント登録は1回だけでよい

登録しておけば、keydown される度に処理される
0215Name_Not_Found
垢版 |
2022/02/16(水) 11:41:08.50ID:???
ヘイ、ジャックス!で括ったら辛せに慣れるかも
0216Name_Not_Found
垢版 |
2022/02/25(金) 00:38:48.27ID:CkkK8ZAi
見てる人いるかわかりませんが
ellipseでcanvasに楕円を描写したあと中央の部分をくり抜いて透明にしたいです
ellipseで緑色に描写した後arcで中心に円を描いてclipしても円の線が切り抜かれるだけで円形の穴はできませんでした。
0217Name_Not_Found
垢版 |
2022/02/25(金) 17:01:23.34ID:???
「html canvas 図形 切り抜き」などで検索すれば?
0218Name_Not_Found
垢版 |
2022/03/03(木) 20:47:13.54ID:FU1IYJw+
スレ間違えたので、こちらで出直します

拠ない事情でフロントエンドを作ってるんだけど
<a><img></a>でaにaddEventListener(‘click’)したのに、飛んできたイベントのtargetプロパティがimgになってる
aを探して遡るのはなんか負けの気がする

aにイベント飛ばさせるテクはありますか?
0220Name_Not_Found
垢版 |
2022/03/04(金) 02:30:11.83ID:???
jQuery では、外側・親にイベントを付けて、親で、子のイベントをキャッチできる。
event.target で、子のvalue の値、1,2,3 を取得できる

<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>

// 外側・親にイベントを付けて、親で、子のイベントをキャッチする
$( '#btn-wrap' ).on( 'click', function ( event ) {
const value = $( event.target ).prop( 'value' )
console.log( value )
alert( value )
} );
0221Name_Not_Found
垢版 |
2022/03/04(金) 02:38:11.01ID:???
「js event.target vs event.currenttarget」で検索してみれば?
0222Name_Not_Found
垢版 |
2022/03/04(金) 12:04:46.12ID:vu0iDZXJ
ありがとう皆さん
currentTargetで目的を果たせました
0223Name_Not_Found
垢版 |
2022/03/06(日) 14:04:14.27ID:nmfY1egB
自分のサイトにあるフォーム
↓@
googleフォーム
↓A
googleスプレッドシート

と情報を渡す時、@の部分はどのように実装すると良いでしょうか

・自分のサイトの「送信」ボタンを押すと、submitで送信する
・自分のサイトの「送信」ボタンをaタグにし、hrefをjsで編集する

@の部分はここを参考にしています
https://stackoverflow.com/questions/51995070/post-data-to-a-google-form-with-ajax/55496118#55496118
0224Name_Not_Found
垢版 |
2022/03/06(日) 22:36:58.30ID:???
aタグは、get しか出来ないでしょ?
Ruby on Rails では、post なども出来るようにしているけど

[Rails]aタグでも「data-method="delete"」を設定すればlink_toと同じ挙動
https://qiita.com/haruya_hamasaki/items/b69de2c680bb01d88017

form = $('<form method="post" action="' + href + '"></form>'),

aタグをクリックされたら、見えないフォームを作って、post 送信している
0225Name_Not_Found
垢版 |
2022/03/06(日) 22:48:29.21ID:???
>>224
は?rubyとかもう化石じゃないですか。使いませんよ
postするならsubmitすればいいだけだし。rubyってこんなアホしか使ってないんですか?
0226Name_Not_Found
垢版 |
2022/03/06(日) 22:49:42.83ID:nmfY1egB
すいません、あまりの気持ち悪さに口が悪くなってしまいました
あとID隠してしまいましたが>>225は私です
0227Name_Not_Found
垢版 |
2022/03/07(月) 11:55:01.12ID:???
>>223
普通に前者で良いよ。
むしろ後者にする必然性が何一つない
もし合計を出す、税込みにするなどでどうしても加工したいなら、後者はありえる

あとこのrubyキチガイはrubyという言語を終わらせるために活動しているので、相手しなくていいぞ
0228Name_Not_Found
垢版 |
2022/03/07(月) 15:10:53.63ID:???
うーむ、めちゃはまってしまってる

1:スプレッドシートのE列を配列 arrColWork に格納
range = workReportSheet.getRange(1,5,150);
arrColwork =range.getValues();


2:arrColWorkから重複排除した要素だけをarrColに格納
 arrCol = arrColWork.filter(function(value, index, self){return self.indexOf(value) === index;});


上記1→2の流れやりたいんだけど 2 がうまくいかない
重複排除されずに全件arrColに格納されてしまう…

テストケースとしてE列の先頭行(1行)と最終行(150行)に"野口"と入力
2行〜149行には"田中"を入力したもので試したが全部出力されてしまってる

1の結果を Logger.log(arrColwork); で出力したら正常にE列の1行目から150行目まで入力した値がきちんと配列に格納できてる
2の結果を Logger.log(value + ":" + index + ":" + self.indexOf(value)); で出力したら
valueはきちんと150件分入力したものが入ってるが、index と self.indexOf(value) が同じ値になってしまってて
全部 True になってる self.indexOf(value) が機能してない?

原因わかるやつおる??
0229Name_Not_Found
垢版 |
2022/03/07(月) 15:58:20.23ID:???
valueがオブジェクトだったみたいな振る舞いですね
0230Name_Not_Found
垢版 |
2022/03/07(月) 16:23:09.72ID:???
試してたら1の部分を arrColwork = ["野口","野口","田中","橋本","田中","小林","入間"]; のように
ソースコード内で配列の中身を指定するように置き換えたら2のコードのまんまできちんと重複を排除できた

スプレッドシートのE列の値を配列に格納するあたりで何かひっかかってる??
0231Name_Not_Found
垢版 |
2022/03/07(月) 16:28:12.67ID:???
うーむ、getValues()で取得したものは1列分であっても二次元配列で取得されてるってことかな
んでもって、indexOf() は一次元配列にしか使えない…
0232Name_Not_Found
垢版 |
2022/03/07(月) 16:29:11.92ID:???
スプレッドシートの1列分のデータを一次元配列で取得する方法ってないのかな??
二次元配列で取得したものをforで回して一次元配列に格納しなおすしかないんだとしたらめんどい
0233Name_Not_Found
垢版 |
2022/03/07(月) 16:36:09.66ID:ua+lBOoP
A. https://www.example.com/test/form.html (有料SSL)
のフォームから
B. https://abc.example.com (無料SSL)
へPOSTでデータを渡していました。
Aのフォームでsubmitボタンに対し、
リロードさせないようにpreventDefault()を入れてBに渡していました。

Aの有料SSLを無料SSLに変えて同時にwww無しのドメインに正規化しました。
するとpreventDefault()を入れるとデータが飛ばなくなってしまいました。
結局submitボタンをtype=buttonに変えて、
JavaScriptでsubmit()することで飛ばせるようには鳴りました。

2つ(有料SSLとwww外し)を同時にやってしまったのですが、
なぜAからBへダメになってしまったのでしょうか?
0234Name_Not_Found
垢版 |
2022/03/21(月) 15:15:21.43ID:EwLxpvLS
お前ら和歌山県出身の下村拓郎様(35歳独身、元自衛隊)をご存知か、この方は将来素晴しい人物になるから覚えておいて損はないぞ
0235Name_Not_Found
垢版 |
2022/03/21(月) 16:54:18.28ID:???
javascript素の実装で
fetchした結果をreturnしたいんだけど毎度おなじみ非同期の沼に嵌ってよくわからない
これreturn書いても書かなくてもpromise返ってるんだけど
promiseから値を取り出すにはどうすればよいの?
みんなどうやってるのか聞きたいな
毎度コールバックでfetchとかコード大変なことになるし
共通jsに別関数でgetListみたいな名前でAPI問い合わせしてjson返すようなデザパタは
Javascriptではご法度なの?
0236Name_Not_Found
垢版 |
2022/03/23(水) 04:54:11.57ID:???
javascriptではというかGUIが絡むコーディングではどの言語でもご法度だよ
シングルスレッドならね
言語(&環境)によってそれをマルチスレッドで解決するか非同期で解決するかというだけ
とはいえやりたければjavascript(&ブラウザ)でそういう同期処理的なふうにできなくもないよ
当然メインスレッドブロックするけどね
おとなしくasync/await勉強すべきだと思うけど
MDN読みながら手を動かして1〜2時間もあればだいたい分かると思うけどその程度の手間も惜しいの?
0237Name_Not_Found
垢版 |
2022/03/23(水) 06:14:31.61ID:???
ちんちんシュッ!シュッ!シュッ!
0238Name_Not_Found
垢版 |
2022/03/23(水) 12:42:18.82ID:???
Callback 地獄 → Promise 地獄 → async/await

JavaScript には、こういう変遷の歴史がある。
Promise は、jQuery の時代の技術
0239Name_Not_Found
垢版 |
2022/03/28(月) 21:12:24.23ID:???
aタグを全て新規タブで開きたいと思い、
以下のコードを書いてみたのですが
Uncaught TypeError: foo.forEach is not a function
at <anonymous>:2:5
というエラーになりました
foreachの書き方が間違っているのでしょうか
それとも、fooに対してはforeachが使えないのでしょうか?

var foo = document.getElementsByTagName("a")
foo.forEach(function(bar){
window.open(bar.getAttribute);
});
0241Name_Not_Found
垢版 |
2022/03/28(月) 23:17:02.61ID:???
>>239
querySelectorAllならIE以外でforEachが使えるけど
今時のブラウザはブラクラ防止で一つの処理でwindow.openは1回しか動かないものが多いよ
0242Name_Not_Found
垢版 |
2022/04/02(土) 11:02:19.53ID:???
15年ぐらい前のlightbox環境は毎秒5フレームぐらいのカクカクした感じなんだけど
スムーズにするにはどこを触ればいい?
lightbox2はうまく動かなかった
なんとかlightbox.jsのパラメータを触って実現できたらいいんだけど
0243Name_Not_Found
垢版 |
2022/04/07(木) 21:02:43.08ID:???
cssを直で書く
jsでアニメーションはカクカクになる
0244Name_Not_Found
垢版 |
2022/04/09(土) 05:38:43.91ID:???
javascriptでブラウザの外に画像を表示したり、動かしたりする事ってできますか?
0246Name_Not_Found
垢版 |
2022/04/09(土) 15:49:49.88ID:???
条件を後出しせず、書かれた通りの質問なら、できるよ
0247Name_Not_Found
垢版 |
2022/04/10(日) 05:44:51.10ID:???
>>246
URLとか忘れたんですけど、以前ブラウザのボタンを押すとブラウザの後ろから画像がニョキッって横に飛び出る動画見た事あるんですよね
アレってjavascriptなのかなーって疑問を抱いてました
0248Name_Not_Found
垢版 |
2022/04/22(金) 15:57:04.46ID:CYTDFVnn
test.jsの中で
(function(){
var a = 1;
})();
と変数を宣言しましたがchromeのコンソールでこのaを取得するにはどうすればよいのでしょうか?
0249Name_Not_Found
垢版 |
2022/04/22(金) 16:38:41.57ID:???
breakpoint入れてその関数実行時にスコープの中に入らないと無理じゃないかな
スクレイピング用途ならhttp proxyかましてスクリプトを変更して外部からアクセスできる変数にする
0250Name_Not_Found
垢版 |
2022/04/22(金) 22:33:33.71ID:???
>>248
無名関数は、
var a = 1;
が他に影響しないようにするための便利な書き方なんだ
その中見を無理に使おうとすると

var a = 2;
(function(){
a = 1;
})();
console.log(a)

のようなアホみたいな書き方になる
aを使いたいなら、
a = 1;
だけで良い
0251Name_Not_Found
垢版 |
2022/04/23(土) 04:13:46.31ID:???
>>249 >>250
ありがとうございます。
すごい分かり易かったです。
0252Name_Not_Found
垢版 |
2022/04/29(金) 18:35:35.70ID:???
今だと非同期関数を作るときはasyncを付けます。
まだasyncが登場してない時ってどうやって自作の非同期関数を作っていたのでしょうか。
0253Name_Not_Found
垢版 |
2022/06/04(土) 19:32:18.50ID:???
どなたか教えてください。

<body>
<script>

var str = document.getElementById{"test").innerHTML;
str = str.replace(“やま”, “ほし”);
document.getElementById("test").innerHTML = str;

</script>

<div id=“test”>
<p>うみ</p>
<p>やま</p>
</div>

</body>

としてもブラウザーには

うみ
やま

と表示されてしまいます。
どこか間違っているのでしょうか?
その場合どこを直せばいいでしょうか。
よろしくお願いします。
0255Name_Not_Found
垢版 |
2022/06/04(土) 21:58:29.74ID:???
>>253
ダブルクォートやカッコが間違ってる
scriptタグを</div>より後に
0256Name_Not_Found
垢版 |
2022/06/04(土) 22:01:16.83ID:???
DOMがreadyになってから実行しろって話じゃないの?
0257Name_Not_Found
垢版 |
2022/06/04(土) 22:15:41.08ID:???
みなさんレスありがとう。
()と”を’に置き換えて下記のようにしてみました

<div id=“test”>
<p>うみ</p>
<p >やま</p>
</div>

<script>
var str = document.getElementById('test').innerHTML;
str = str.replaceAll('うみ', 'ほし');
document.getElementById('test').innerHTML = str;
</script>

しかしブラウザでは うみ やま と表示され ほし やま になってくれません。
0258Name_Not_Found
垢版 |
2022/06/04(土) 22:44:00.21ID:???
シングルクォートにしろという事ではなく全角ダブルクォートなのが間違い
<div id="test">
0259Name_Not_Found
垢版 |
2022/06/05(日) 07:14:56.13ID:???
>>258
半角だと思うのですがこれじゃだめなんですね。
0260Name_Not_Found
垢版 |
2022/06/05(日) 07:20:42.56ID:???
お騒がせしています

<div id="test">
<p>うみ</p>
<p >やま</p>
</div>

<script>
var str = document.getElementById("test").innerHTML;
str = str.replaceAll("うみ", "ほし");
document.getElementById("test").innerHTML = str;
</script>

このように書き換えましたがはやり うみ が やま に変わりません。
どこかどのようにだめなのかわかりませんか?
0261Name_Not_Found
垢版 |
2022/06/05(日) 07:25:18.96ID:???
すみません。混乱していて。
うまく表示されていたようです。
初歩的な事にレスをいただいてみなさんありがとうございました。
感謝します。
0262Name_Not_Found
垢版 |
2022/06/05(日) 16:32:21.43ID:GSVgB4j6
const express = require('express');
const server = express();

と書いた場合と、express(); の前に new を付けて、

const express = require('express');
const server = new express();

と書いた場合、何が違うのでしょうか?
同じように動作しているように見えます。
0263Name_Not_Found
垢版 |
2022/07/21(木) 18:28:05.08ID:bVEASdty
こういう鍵盤をイメージしたボタンが複数60Keyほどあって、鍵盤のキーをクリックしたらイベントを開始したい。

<span class="white-key" data-key="90" data-note="1c"><i>ド</i></span>
<span class="white-key" data-key="88" data-note="1d"><i>レ</i></span>
<span class="white-key" data-key="67" data-note="1e"><i>ミ</i></span>
.
.
.

しかし、id属性がないので、

let button = document.getElementById('xxx');
button.addEventListener('click', butotnClick);
とは記述できない。

jQueryや、Reactや、Vue.jsなどは使わず記述する方法ありますか?
0265Name_Not_Found
垢版 |
2022/07/21(木) 19:17:59.47ID:???
>>263
classなりなんなり共通してる他の属性を使えばいい
document.querySelectorAll(".white-key, .black-key").forEach(elem => elem.addEventListener("click", buttonClick));
0266Name_Not_Found
垢版 |
2022/07/21(木) 19:28:53.96ID:???
>>264,>>265
ありがとうございます。やってみます。この方法なら、keyごと(ボタンごと)に、
addEventListener()
つくらなくていいのかもしれないですね。
60個も、addEventListener()つくるのは面倒だなと思ってました。
0267Name_Not_Found
垢版 |
2022/07/21(木) 19:31:46.38ID:???
あ。いや。ボタン毎にaddEventListener()記述しないと、同じ音が出てしまうな。。
0270Name_Not_Found
垢版 |
2022/07/22(金) 08:54:33.42ID:LPjEgNsv
フリーランス向けエージェント「クラウドテック」会員数8万人突破
〜働きやすい環境構築のため、単価向上・全年齢の活躍の場創出・
地方企業のDX推進の取り組みを強化します〜

フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
累計掲載案件数25万件突破!リモートワークの累計掲載案件数35,000件突破!

新規人材の80%がフルリモート希望! IT人材市況動向レポート2021年12月版を公開

人口移動報告 家賃高い、首都圏脱出 「コロナ禍、仕事フルリモート」

クラウドテック、地方企業向け『クラウドテックDX』を開始、
7万人を超えるDX人材が、地方の非IT企業のDX推進を支援

新潟県、移住してきたテレワーカー/フリーランスに最大50万円を支給

テレワークの一般化により、11月にはテレワーク可能案件83.7%へと増加。
2021年、フリーランスのトレンドは「移住&テレワーク」と予測
0271Name_Not_Found
垢版 |
2022/07/22(金) 15:02:06.74ID:???
jQuery で、外側・親にイベントを付けて、親で子のイベントをキャッチする。
$( event.target )

<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 )
} );

これで、1,2,3 などが出力される
0273Name_Not_Found
垢版 |
2022/07/22(金) 21:45:39.09ID:???
>268
>269
>271もかな。
ありがとうございます。

>269の発想はJavaScriptに慣れてないとできそうじゃないねえ。
勉強になりました。参考にさせていただきます。
0274271
垢版 |
2022/07/22(金) 23:10:42.75ID:???
JavaScript は難しすぎる。
バグってばかりで、アホらしい

漏れは、Ruby, jQuery ぐらいしか書けない
0275Name_Not_Found
垢版 |
2022/07/23(土) 00:06:45.72ID:???
言語とライブラリを混同してる時点で理解不足としか
0276Name_Not_Found
垢版 |
2022/07/23(土) 03:29:16.41ID:FClyRvyS
疑似的に、sablimeTextとか、VisualStudioCodeを模して
ソースコードに対して、キーワード毎に色付けるような、
javascriptのパッケージてないですか?
0277Name_Not_Found
垢版 |
2022/07/23(土) 04:01:34.90ID:???
すいません。わかりづらいので修正。
ソースコードに対して×
htmlに書かれた、スニペットに対して〇
0279Name_Not_Found
垢版 |
2022/07/23(土) 14:30:30.90ID:???
ありがとうございます。まさにそれです。
0280Name_Not_Found
垢版 |
2022/07/27(水) 14:20:46.26ID:4QcDaVi1
これで音がなるのですが、zingle.mp3は10秒程度の長さです。
3秒ぐらいで音をストップさせるにはどうすればいいですか?
const sound_c = new Audio('sound/zingle.mp3');
sound_c .play();
0281Name_Not_Found
垢版 |
2022/07/27(水) 14:34:05.59ID:???
setTimeout()で解決しました。おさわがせしました。
0282Name_Not_Found
垢版 |
2022/08/03(水) 18:48:40.22ID:Nj6BOTMG
<!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値を変化させると、ボタンをクリックさせないように設定しているのですが、
そんなの関係なしに、ボタンがクリックできてしまいます。
これは、どういった理由で変な処理が可能になっているのでしょうか?今後ハマらないためにどのような注意をすればよいでしょうか?
0283Name_Not_Found
垢版 |
2022/08/03(水) 20:01:54.34ID:Nj6BOTMG
<!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用の変数を使ってもダメだった。どこで躓いているんだろ。。
0285Name_Not_Found
垢版 |
2022/08/03(水) 20:17:43.28ID:Nj6BOTMG
もちろん、もともとの目的は無効化なんだけど。
それより、
if(false){
実行A
}
の状態なのに、実行Aが実行されているのが気になって。
0287Name_Not_Found
垢版 |
2022/08/03(水) 20:23:51.02ID:Nj6BOTMG
お。
0288Name_Not_Found
垢版 |
2022/08/03(水) 20:27:15.89ID:???
そっかー。ありがとう。これに2時間悩んでたww
0289Name_Not_Found
垢版 |
2022/08/03(水) 20:32:11.88ID:Nj6BOTMG
いや。解決してない。
0290Name_Not_Found
垢版 |
2022/08/03(水) 20:36:38.79ID:Nj6BOTMG
<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文を実行するのでは?
0291Name_Not_Found
垢版 |
2022/08/03(水) 20:48:32.41ID:Nj6BOTMG
<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文を実行しない。
なんか、おれ勘違いしてる????
0292Name_Not_Found
垢版 |
2022/08/03(水) 20:52:18.36ID:Nj6BOTMG
ちょっと訂正。

var reset = () => {
console.log(playing_flag);
console.log("停止");
playing_flag = true;
};

var reset = () => {
console.log(playing_flag);
console.log("停止");
playing_flag = false;
};
0293Name_Not_Found
垢版 |
2022/08/03(水) 20:53:44.88ID:???
その2回通ると思い込んでるif文はイベントハンドラでも何でもないんだからボタン押される前の1回しか通らないよ
0294Name_Not_Found
垢版 |
2022/08/03(水) 21:00:45.56ID:Nj6BOTMG
え。意味がよくわからない。イベントハンドラじゃないから、1回しかとおらない。。??
0295Name_Not_Found
垢版 |
2022/08/03(水) 21:13:35.85ID:Nj6BOTMG
ずっとコードを眺めてみたら、
>>290のコードは確におかしいことは分かってきた気がする。
0296Name_Not_Found
垢版 |
2022/08/03(水) 21:37:07.14ID:???
>>291,292のコードも、イベントリスナー使ってますけど。
2回クリックしてもelse文にはならず、if文を2回実行しているのでしょうか?
0297Name_Not_Found
垢版 |
2022/08/03(水) 21:56:45.64ID:Nj6BOTMG
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を上のように変えたら、
期待した通りに動いた。
ボタンの状態に、フラグをつけて、実行に条件を入れるときは注意しないと
いけんのかもなあ。
0298Name_Not_Found
垢版 |
2022/08/03(水) 22:04:04.33ID:???
納得いかない、ねえ?
開発者ツールでどういう順番でどの行の処理がされるか確認したらいいんじゃないかな
0299Name_Not_Found
垢版 |
2022/08/03(水) 22:07:55.84ID:Nj6BOTMG
あ。そうですね。アドバイスありがとうございます。
0300Name_Not_Found
垢版 |
2022/08/03(水) 22:12:13.92ID:???
>>297
むしろ、>>291でフラグ立ててイベントハンドラ振り分けてるのが最高に意味不明なんだが
イベント駆動について勉強してみたら?
0301Name_Not_Found
垢版 |
2022/08/03(水) 22:42:39.79ID:Nj6BOTMG
よくわかってなかったようだ。
下の認識でOKですか?雑ですが。。
「Javascriptはブラウザが開いたとき、上の行から下の行へ基本一回だけ実行する。
しかし、イベントが起きたら例外的にその箇所を実行する。」
0302Name_Not_Found
垢版 |
2022/08/04(木) 02:45:36.83ID:???
>>301
HTMLスクリプト要素のdefer属性(DOMContentLoadedからの実行)とasync属性(HTMLScriptElement#onloadからの非同期実行)
0303Name_Not_Found
垢版 |
2022/08/04(木) 03:10:03.94ID:jGEKnkMs
>>302ありがとうございます。詳しく調べてみます。

>>291,292を
開発者モードでトレースしてみたのですけど。
ボタンをクリックすると、直前の条件の評価をせずに、
いきなりrun()の中を実行はじめました。
カレントの変数を無視して、初回時の条件が適応されているようです。

多分。疑問に思う方が変なのかもしれませんが、これは慣れですかね。。
0304Name_Not_Found
垢版 |
2022/08/04(木) 03:13:38.61ID:???
例えば、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年レベルにするの大変だろうけど頑張ってね。
0305Name_Not_Found
垢版 |
2022/08/04(木) 23:22:36.77ID:???
>>297
>var playing_flag = false;
>if (playing_flag === false){ 処理 }

playing_flag が真偽値・bool 型なら、単にこう書けば?
if ( playing_flag )

基本、boolを比較してはならない。
すでに、boolになっているから
0306Name_Not_Found
垢版 |
2022/08/04(木) 23:38:01.22ID:???
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 にする
} );
} );
0307Name_Not_Found
垢版 |
2022/08/05(金) 02:46:29.55ID:???
もうjqueryスレと統合すべきだと思うの
両者の関連スレ合わせても勢い1すらないんだし
0308Name_Not_Found
垢版 |
2022/08/05(金) 07:46:34.74ID:???
jqueryを使わずにpure jsで、ていう質問も大いにありえるから
分けたほうがいいとおも
0310Name_Not_Found
垢版 |
2022/08/05(金) 08:35:50.13ID:???
どっちでも良い。
答える方としては、素のJS で書くのは非常に面倒

jQuery は可読性が高いので、読めない香具師はいないから、
ひとまず、jQueryで書いて、
それを質問者が書き直したければ、素のJSで書き直せばよい
0311Name_Not_Found
垢版 |
2022/08/05(金) 11:51:55.86ID:???
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信者は健在だし、俺一人でどうにかなる問題でもないからな
0312Name_Not_Found
垢版 |
2022/08/05(金) 12:17:08.84ID:???
jQueryスレはタイトル詐欺だから「jQuery質問用スレッド」にして
jQuery使わない人が迷い込まないようにすれば万事解決
レスを投稿する


ニューススポーツなんでも実況