+ JavaScript の質問用スレッド vol.131 +
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【条件】期待する回答の条件を書いてください。(ex: jQuery不可, フレームワーク不可)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです >>491
だからHTMLに直接変数名を書くことが
間違いだって話だよ
他のやつもやる必要のないことを書くな >>494
その理屈だと、腐った環境やクソなコーディング規約に
したがって開発しろって言ってるように見えるが? だからHTMLに直接変数名を書くことが
腐った環境やクソなコーディング規約だって話だ ページごと、ユーザーごとのパラメータをHTMLに書くことはあるぞ
どうせlocalStorageかHTMLに書くかAjaxで取得するかくらいしかないし 今話をしてるのはJavaScriptの変数の話だ
分かってないなら黙ってろ HTML内で
var userData = {}
外部JSファイル内で
(function(){
something(userData.何か);
})();
こういうことだろ >>497
常に何から何までXHRで済ませられるわけじゃないしな >>499
細かいことだがそれ(function(){ })(); で囲う意味ある? window.now = performance.now;
now();
こう書くと"オブジェクトの呼び出しが無効です"と怒られるんすよ
なんででしょうね thisの問題ですね。
now()で呼び出したときもthisがperformanceを指すように以下のようにbindしときましょう。
window.now = performance.now.bind(performance); とりあえずthisを拘束すればいいという考えはあまり良いとは思えないな
エイリアスという点では今は
fn = ( ...args ) => performance.now( ...args )
と書く方が良い
bind構文が実装されて記述が容易になるとともに
bindを常日頃から使う文化が広がったらbind構文の方が基本になると思う より「ハック」っぽくないのはどちらかっていう意味ね ハックっぽいかなぁ?
>>503はbindした新しい関数返してるだけで別になんにもハックしてなくない?
bindなんてES5から入ってるし実装されてるかどうか気にするレベルにないのでは… Google Maps (Javascript) API に関することはここでいい?
他に適当な質問スレがあれば教えてください。 >>474
Windows8.1はダメなので、IE自体の問題のような感じです。
開発者ツールでみると
else { //* not MSIE browser
wid1.location.href=wz1;
}
で止まっているのですが、Windows7では不具合なく動いているので、どこがおかしいかわからないのです。 フォーム内のあるアイテムの入力文字数が
たとえば 5文字あるいは10文字あるいは空白の場合だけ入力できるようにするにはどうすればよい? サロゲートペアと結合文字の問題があるからな
サロゲートペアで結合文字のものもある
例えばアクセント付付点8分音符「"𝅘𝅥𝅮𝅻𝅭"」は一文字でlengthは10だ >>492
ありがとうございました。
無事にこちらの方法で変数名を変えずに圧縮することができました。 >>508
ありがとう。しかしそっちはちと寂しかったです。 基本的なことだと思うんだけど、分かってないので
click event についてなのですが
event発生のタイミングって、カーソルのpushが対象から抜けた時ですよね
表現がヘンで伝わってるか不安だけど
ブラウザゲームっぽいの作ってまして
touchしたときにevent発生させることってできるんでしょうか? タッチならタッチ専用のイベントが有る
タッチ専用のイベントは有るがマウスにも対応しようとしたら
いろいろ面倒なので、統合的に使えるライブラリを探したほうが良いかもね
俺の知識は古いので何が最善かまで言えない マウスならmousedown、タッチならtouchstart
まあ両方やっとけばいい タッチは300ms問題とかもあったはず。ライブラリ使うべき。 300ms問題はtapやで
だからtouchstart使うんや >>517
えっ!あっそか
と思ってやってみました (jqueryでね)
$('#hoge').on('click', function () {
console.log('ムフフ');
});
を
$('#hoge').on('mousedown', function () {
desktop版firefox お〜動くー!
iOS safari あれ?挙動が click と同じだなぁ あー、思い出した FastClick.js だ
300ms問題を解決するライブラリ >>522
そういうこと。
ブラウザによって挙動が違ってよく分からんw
そういやタッチとマウスを統一的に扱えるようにした
Pointer Eventsってどうなったんだろうね
https://caniuse.com/#search=pointer%20events
結局Chromeは実装したみたいだけど 皆様ありがとう!
スマホはmouseじゃないからなのか
ぐぐってやってみて、ちゃんと動くようになったのが
var clickEventType = ((window.ontouchstart!==null) ? 'mousedown':'touchstart');
$('.slotBtn').on(clickEventType, function () {
socket.emit($(this).attr('id'));
});
// thankYou!!! タッチパネルつきパソコンはどうなるのか?って考えると
両方onしたほうがいいのかもしれないけどな
イベント2つ扱うときはこういう書き方な
$('.slotBtn').on("mousedown touchstart", function () {
socket.emit($(this).attr('id'));
});
あとどうでもいいけど、イベントハンドラ内のthisみたいに
必ず要素が一個であると断定できる時は、this.id と最近は書いてる 内部でvarしない関数定義もしない即時関数って、即時関数にする意味なんかある? >>526
mousedown と touchstart 併記したら
safariのやつが2つとも反応しちゃうんですよ
this.id の件了解!きっとこの方が速いんですよね >>527
$('.slotBtn').on(clickEventType, socket.emit(this.id));
ってことですね
習慣でいたるところに… 例えばbuttonの中に生の文字と<img>があってbuttonにイベントリスナつけたとき >>530
それ動くの?
>>527で言ってるのは例えばこんな感じの記述
(function(){
document.getElementsByClassName('slotBtn')[0].addEventListener('mousedown', function(){
call.some.function();
}, false);
})(); >>534
関数そのものを渡さなきゃいけない
function(){}を渡すのはいいが、
socket.emit(this.id)ではsocket.emit(this.id)を実行した結果が渡される
って感じか? >>533
やってないんで、やらんで良かった
コードさんきゅです、理解できた >>534
それだとその行にきた段階でリスナー登録じゃなく socket.emit() が実行される
もとのやつでいい そのうえ
画面のスクロールとかスクロールバー付き要素のスクロールとか
2本以上の指のタッチとか
アホかってほどいっぱい面倒なもんが出てくるからな ただ単にタッチを検出したいだけなら
touchstartとかでいいが
タッチを利用したカルーセルのような
インターフェースを作りたいのなら
自作するより使ったほうが楽
理由は>>539が書いているとおり >>515
自分も作るけど使い分けなくて便利だからPointer Events使ってる
来年にはFxとSafariでも使えそうな雰囲気だし
今はChromeとEdgeだけでもいいでしょ >>541
カルーセル作りたいなら、の意味がわからん touch, mouse を透過的に扱うのは、
Electron, Cordova, React などのフレームワーク
>>533
ECMA5 では、ブロックスコープが無かったから、
関数でスコープを作る >>544
内部でvarしない関数定義もしない場合、スコープ作る必要ある? 前提知識として学ばないといけないことが多すぎ複雑すぎなのが嫌なのに
ライブラリの構造とか使い方とか
さらにさらにバージョンごとの差異とか
そんなん使ってられませんわ JSの仕組み自体はシンプル・イズ・ザ・ベストなのに >>543
> カルーセル作りたいなら、の意味がわからん
考えることがたくさんあるからだよ
要件次第だが
カルーセルで横スクロールする時、
縦スクロールしたらページはスクロールするか?とか
ピンチ、ピンチアウト機能と両立できるか?とか
スクロールはスムーズか?とか
(スムーズにするためのCSSの機能があるが使えない機種がある) カルーセルの基礎構造って
・操作に応じて横方向に画像が切り替わりループするスライド
・スライドを操作する「<」「>」ボタンや「□■□□」のようなナビゲーションを兼ねたボタン
これだけじゃないのか
touchendが使えればtouch*、でなきゃclickやmousedown、だけで普通にpure jsで書けね 初心者が失礼します
http://fast-uploader.com/transfer/7073696781713.jpg
このコードで28行目の関数の引数eventはクリックしたときに引き渡されると思うんですが何が引数として引き渡されているのでしょうか?
event.clientXとevent.clientYでそれぞれ左上から縦横の位置を示してるのはわかるんですが、
じゃぁ.clientXと.clientYをとったときのeventってなんなんだろうって疑問になります。
この引数はいったい何でいつどんな変数が入ってるのでしょうか? イベントオブジェクトの一種、マウスイベントオブジェクト
clickされたときにブラウザがイベントオブジェクト作って引数eventとして引き渡してくれる
.clientXや.clientYはマウスイベントオブジェクトが持っているプロパティ
だからevent.clientXでマウスX座標が取れる
https://developer.mozilla.org/ja/docs/Web/API/MouseEvent/clientY >>542
pointer events って便利そうだけど
今、動作するのは chrome と edge だけってことですか?
作ってるサービスの対応ブラウザとしては、できるだけ多くを相手にしたいです。
自分が作ってる中で
押したらすぐ反応して欲しい部分は、プレイ画面中のボタンだけなんです
ある機械の状態をWebRTCでリアルタイムに流してて、ボタンはその機械を操作するものです
これスレと関係なかった >>554
なるほど、リスナーに引数を持つ関数を登録するとブラウザが自動で引数にイベントオブジェクトを入れてくれるんですね。
ありがとうございます。 スレ違だろうなぁ、でも他に
知見のある人のいるスレが見つけられない m_m
もう諦めてるんですが
画面サイズから video を90度回して縦方向いっぱいに計算して表示してるのですが
スマホ画面の上とか下に出てくるじゃまなやつのせいで動画が
ちっちゃくなってしまうのは、どうにもならないですか >>558 ありがとう!
これも、なんぞそれ!?
ってことで調べながらやってみてます
が、90度回してる影響かうまくいってないです 下で「START」ボタン押してもなにもおこらないんですがなぜでしょう?
エラーは出ません。
chromeです。
<div class="container operate">
<ul>
<li><button class="button" id="start" onclick="click()" >START</button></li>
</ul>
</div>
<script type="text/javascript" charset="utf-8" >
function click() {
window.alert("2");
}
</script> click()の関数名がまずいっぽいね
click1()に変えたら動いたよ そういうのもあるし、onclick属性とは
HTMLのonなんたらで処理呼び出すのやめなよ >>561
ありがとうございます!
>>562
最初は別ファイルからインポートしてたんですけど
はじめてスクリプト埋め込んだのでなんで動かないのかわからなかったので
とりあえず動かなくなる地点を探そうとして
順番に埋め込むところを移動させていました。 >>562
reactさんをバカにするのはやめるんだ >>565
細かい話をするとreactとJSXも関係ない。別にJSX使わなくても全部関数で書ける。
で、JSXで書いて、reactが生成する生DOM確認してみた?onclick属性使われてるよ。 >>566
reactとJSXは関係ない。
だからreactは持ち出してくるなって話なんだが? >>567
根拠なくon*属性にハンドラ書くの否定するなという話なんだが? reactがHTMLのon*使ってるかどうかはon*が良いか悪いかの指標にはならん |ヽ∧_
ゝ __\ やめなよ
||´・ω・`| >
/  ̄ ̄ 、ヽ _______
└二⊃ |∪=| |─── /
ヽ⊃ー/ノ  ̄ ̄ ̄ ̄
 ̄`´ ̄ こう言う文字列を作成して
var str ='文字列';
var func = '<button onclick="func(¥'' + str + '¥')">実行</button>';
funcをhtmlのページに埋め込みました。
そのhtmlを表示すると、文字列strが英数字なら問題ないのですが、文字列中にシングルクォーテーションとかダブルクォーテーション
が混じっているとエラーが出ます。
正しい解決方法を教えてください。 埋め込みました、て・・・document.writeしたりelement.innerHTMLに入れたりしてんだろ
なんでcreateElementしてaddEventListenerしてappendChildしないんですか >>577
もろもろエスパーするとこれはサーバーサイドテンプレート…
expressかなにかでやってる? やっぱたぶんサーバーサイドテンプレートなんだろうな。
質問するのになんで隠すのか分からんが。
ほらよ>>573
出力確認のためのconsole.logもつけたから良く確認するように。
var str = 'こんにちは\'赤"ちゃん'; // 念のため言っとくがこの場合ここシングルクォートにエスケープ必要
console.log(str); // こんにちは'赤"ちゃん
str = str.replace(/'/g, "\\'"); // ブラウザJSのコンテキストでシングルクォートエスケープ処理
console.log(str); // こんにちは\'赤"ちゃん
str = str.replace(/"/g, '"'); // HTMLのコンテキストでダブルクォートエスケープ処理(文字参照に変換)
console.log(str); // こんにちは\'赤"ちゃん
var func = '<button onclick="alert(\'' + str + '\')">実行</button>';
console.log(func); // <button onclick="alert('こんにちは\'赤"ちゃん')">実行</button> あ、すまん確認のためfuncをalertに変えてたんだった。alertはfuncに置換してくれ babelって今は末尾再帰最適化をサポートしてくれないんですか?
せっかく気軽に再帰で開発できると思ったのに…… >>582
プラグインになっただけじゃねーの?
https://www.npmjs.com/package/babel-preset-optimized
This is a list of plugins this uses. Do note that by default, not all of these may run:
babel-plugin-minify-constant-folding
babel-plugin-loop-optimizer
babel-plugin-closure-elimination
babel-plugin-tailcall-optimization https://w3techs.com/technologies/overview/javascript_library/all
w3techsによると2017年1月の時点で71.9%のサイトが
JavaScriptのライブラリとしてjQueryを使用していることが判明したが
それから1年たった2018年1月現在、73.2%に1.4%も増えていることが判明した。
またAngularは0.5%、だがReactが伸びてきており0.5%
とAngularを逆転したことがわかる
だがjQueryには大幅なさをつけられており取って代わるのは
いつになるのか動向が注目される 軽く使えるDOM操作ライブラリってほとんどないから jqueryに大幅な差というよりangularやreactが木っ端なだけだろ 自前でwebサービス立ち上げてる会社以外reactもangularも出番ないんですもの。 自社でがっつりやるなら自社で組む手があるからなぁ
他所のポリシーに合わせる必要なくなる >>573
jQuery を使え
<button id="btn1">押して</button>
$('#btn1').click (function() {
// ここに処理を書く
console.log("クリックされた");
}); >>585
取って代わるてw
使われ方が全く違うだろ > 使われ方が全く違うだろ
ちゃんとした考え方できる人はそうわかるんだけどね。
今のところjQueryがなくなることはない。
jQueryの代替技術はない
だけど一部のjserどもが、jQueryはオワコン
これからはAngular、Reactやで!
jQuery使わなくて頑張ればコストがかかるだけでできる!
などと言い始めたからね。 ■ このスレッドは過去ログ倉庫に格納されています