+ 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) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 >>209
document.addEventListener('keydown', (e) => {
で、何回もイベント登録されたら、大変。
イベント登録は1回だけでよい
登録しておけば、keydown される度に処理される 見てる人いるかわかりませんが
ellipseでcanvasに楕円を描写したあと中央の部分をくり抜いて透明にしたいです
ellipseで緑色に描写した後arcで中心に円を描いてclipしても円の線が切り抜かれるだけで円形の穴はできませんでした。 「html canvas 図形 切り抜き」などで検索すれば? スレ間違えたので、こちらで出直します
拠ない事情でフロントエンドを作ってるんだけど
<a><img></a>でaにaddEventListener(‘click’)したのに、飛んできたイベントのtargetプロパティがimgになってる
aを探して遡るのはなんか負けの気がする
aにイベント飛ばさせるテクはありますか? 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 )
} ); 「js event.target vs event.currenttarget」で検索してみれば? ありがとう皆さん
currentTargetで目的を果たせました 自分のサイトにあるフォーム
↓@
googleフォーム
↓A
googleスプレッドシート
と情報を渡す時、@の部分はどのように実装すると良いでしょうか
・自分のサイトの「送信」ボタンを押すと、submitで送信する
・自分のサイトの「送信」ボタンをaタグにし、hrefをjsで編集する
@の部分はここを参考にしています
https://stackoverflow.com/questions/51995070/post-data-to-a-google-form-with-ajax/55496118#55496118 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 送信している >>224
は?rubyとかもう化石じゃないですか。使いませんよ
postするならsubmitすればいいだけだし。rubyってこんなアホしか使ってないんですか? すいません、あまりの気持ち悪さに口が悪くなってしまいました
あとID隠してしまいましたが>>225は私です >>223
普通に前者で良いよ。
むしろ後者にする必然性が何一つない
もし合計を出す、税込みにするなどでどうしても加工したいなら、後者はありえる
あとこのrubyキチガイはrubyという言語を終わらせるために活動しているので、相手しなくていいぞ うーむ、めちゃはまってしまってる
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) が機能してない?
原因わかるやつおる?? valueがオブジェクトだったみたいな振る舞いですね 試してたら1の部分を arrColwork = ["野口","野口","田中","橋本","田中","小林","入間"]; のように
ソースコード内で配列の中身を指定するように置き換えたら2のコードのまんまできちんと重複を排除できた
スプレッドシートのE列の値を配列に格納するあたりで何かひっかかってる?? うーむ、getValues()で取得したものは1列分であっても二次元配列で取得されてるってことかな
んでもって、indexOf() は一次元配列にしか使えない… スプレッドシートの1列分のデータを一次元配列で取得する方法ってないのかな??
二次元配列で取得したものをforで回して一次元配列に格納しなおすしかないんだとしたらめんどい 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へダメになってしまったのでしょうか? お前ら和歌山県出身の下村拓郎様(35歳独身、元自衛隊)をご存知か、この方は将来素晴しい人物になるから覚えておいて損はないぞ javascript素の実装で
fetchした結果をreturnしたいんだけど毎度おなじみ非同期の沼に嵌ってよくわからない
これreturn書いても書かなくてもpromise返ってるんだけど
promiseから値を取り出すにはどうすればよいの?
みんなどうやってるのか聞きたいな
毎度コールバックでfetchとかコード大変なことになるし
共通jsに別関数でgetListみたいな名前でAPI問い合わせしてjson返すようなデザパタは
Javascriptではご法度なの? javascriptではというかGUIが絡むコーディングではどの言語でもご法度だよ
シングルスレッドならね
言語(&環境)によってそれをマルチスレッドで解決するか非同期で解決するかというだけ
とはいえやりたければjavascript(&ブラウザ)でそういう同期処理的なふうにできなくもないよ
当然メインスレッドブロックするけどね
おとなしくasync/await勉強すべきだと思うけど
MDN読みながら手を動かして1〜2時間もあればだいたい分かると思うけどその程度の手間も惜しいの? Callback 地獄 → Promise 地獄 → async/await
JavaScript には、こういう変遷の歴史がある。
Promise は、jQuery の時代の技術 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);
}); >>239
querySelectorAllならIE以外でforEachが使えるけど
今時のブラウザはブラクラ防止で一つの処理でwindow.openは1回しか動かないものが多いよ 15年ぐらい前のlightbox環境は毎秒5フレームぐらいのカクカクした感じなんだけど
スムーズにするにはどこを触ればいい?
lightbox2はうまく動かなかった
なんとかlightbox.jsのパラメータを触って実現できたらいいんだけど cssを直で書く
jsでアニメーションはカクカクになる javascriptでブラウザの外に画像を表示したり、動かしたりする事ってできますか? 条件を後出しせず、書かれた通りの質問なら、できるよ >>246
URLとか忘れたんですけど、以前ブラウザのボタンを押すとブラウザの後ろから画像がニョキッって横に飛び出る動画見た事あるんですよね
アレってjavascriptなのかなーって疑問を抱いてました test.jsの中で
(function(){
var a = 1;
})();
と変数を宣言しましたがchromeのコンソールでこのaを取得するにはどうすればよいのでしょうか? breakpoint入れてその関数実行時にスコープの中に入らないと無理じゃないかな
スクレイピング用途ならhttp proxyかましてスクリプトを変更して外部からアクセスできる変数にする >>248
無名関数は、
var a = 1;
が他に影響しないようにするための便利な書き方なんだ
その中見を無理に使おうとすると
var a = 2;
(function(){
a = 1;
})();
console.log(a)
のようなアホみたいな書き方になる
aを使いたいなら、
a = 1;
だけで良い >>249 >>250
ありがとうございます。
すごい分かり易かったです。 今だと非同期関数を作るときはasyncを付けます。
まだasyncが登場してない時ってどうやって自作の非同期関数を作っていたのでしょうか。 どなたか教えてください。
<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>
としてもブラウザーには
うみ
やま
と表示されてしまいます。
どこか間違っているのでしょうか?
その場合どこを直せばいいでしょうか。
よろしくお願いします。 >>253
ダブルクォートやカッコが間違ってる
scriptタグを</div>より後に DOMがreadyになってから実行しろって話じゃないの? みなさんレスありがとう。
()と”を’に置き換えて下記のようにしてみました
<div id=“test”>
<p>うみ</p>
<p >やま</p>
</div>
<script>
var str = document.getElementById('test').innerHTML;
str = str.replaceAll('うみ', 'ほし');
document.getElementById('test').innerHTML = str;
</script>
しかしブラウザでは うみ やま と表示され ほし やま になってくれません。 シングルクォートにしろという事ではなく全角ダブルクォートなのが間違い
<div id="test"> >>258
半角だと思うのですがこれじゃだめなんですね。 お騒がせしています
<div id="test">
<p>うみ</p>
<p >やま</p>
</div>
<script>
var str = document.getElementById("test").innerHTML;
str = str.replaceAll("うみ", "ほし");
document.getElementById("test").innerHTML = str;
</script>
このように書き換えましたがはやり うみ が やま に変わりません。
どこかどのようにだめなのかわかりませんか? すみません。混乱していて。
うまく表示されていたようです。
初歩的な事にレスをいただいてみなさんありがとうございました。
感謝します。 const express = require('express');
const server = express();
と書いた場合と、express(); の前に new を付けて、
const express = require('express');
const server = new express();
と書いた場合、何が違うのでしょうか?
同じように動作しているように見えます。 こういう鍵盤をイメージしたボタンが複数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などは使わず記述する方法ありますか? >>263
classなりなんなり共通してる他の属性を使えばいい
document.querySelectorAll(".white-key, .black-key").forEach(elem => elem.addEventListener("click", buttonClick)); >>264,>>265
ありがとうございます。やってみます。この方法なら、keyごと(ボタンごと)に、
addEventListener()
つくらなくていいのかもしれないですね。
60個も、addEventListener()つくるのは面倒だなと思ってました。 あ。いや。ボタン毎にaddEventListener()記述しないと、同じ音が出てしまうな。。 繰り返しaddEventListenerでイベントハンドラ設定するのが嫌なら、
適当な親要素にイベントハンドラつけてそのイベントハンドラ内で
let button = event.target.closest(".white-key");
ってやればいいんじゃないかな
https://developer.mozilla.org/ja/docs/Web/API/Element/closest フリーランス向けエージェント「クラウドテック」会員数8万人突破
〜働きやすい環境構築のため、単価向上・全年齢の活躍の場創出・
地方企業のDX推進の取り組みを強化します〜
フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
累計掲載案件数25万件突破!リモートワークの累計掲載案件数35,000件突破!
新規人材の80%がフルリモート希望! IT人材市況動向レポート2021年12月版を公開
人口移動報告 家賃高い、首都圏脱出 「コロナ禍、仕事フルリモート」
クラウドテック、地方企業向け『クラウドテックDX』を開始、
7万人を超えるDX人材が、地方の非IT企業のDX推進を支援
新潟県、移住してきたテレワーカー/フリーランスに最大50万円を支給
テレワークの一般化により、11月にはテレワーク可能案件83.7%へと増加。
2021年、フリーランスのトレンドは「移住&テレワーク」と予測 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 などが出力される >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/