+ JavaScript の質問用スレッド vol.117 +

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。

■投稿する上で
(1) 煽り、暴言等の他人を不快にさせる投稿はご遠慮下さい。
(2) 迷惑スクリプトの質問はご遠慮ください。
(3) 質問者及び議論を行う人は名前にレス番を入れることを推奨します。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
2デフォルトの名無しさん:2014/07/01(火) 01:40:15.72 ID:U4Rt/XmH
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■前スレ
+ JavaScript の質問用スレッド vol.116 +
http://peace.2ch.net/test/read.cgi/hp/1399764134/
■過去スレ全集
http://www2.atpages.jp/mirror/2ch/javascript/
http://usamimi.info/~mirrorhenkan/2ch/javascript/ (閲覧のみ)
■テンプレ案
http://jsfiddle.net/fH4cC/36/show/
■関連スレ
ECMAScript デス 4
http://peace.2ch.net/test/read.cgi/tech/1325448978/
JavaScript ライブラリ総合質問所 vol.4
http://peace.2ch.net/test/read.cgi/hp/1400834117/
【WHATWG】HTML5 Part6【W3C HTML WG】
http://peace.2ch.net/test/read.cgi/hp/1393153279/
Canvasについて語ろう
http://peace.2ch.net/test/read.cgi/hp/1305093769/
JavaScript 3
http://peace.2ch.net/test/read.cgi/tech/1380177260/
CSS初心者スレッド=12th=
http://peace.2ch.net/test/read.cgi/hp/1343429848/
Webサイト制作初心者用質問スレ part240
http://peace.2ch.net/test/read.cgi/hp/1400371843/
3デフォルトの名無しさん:2014/07/01(火) 01:40:40.98 ID:U4Rt/XmH
■主要FAQ (全部は http://fiddle.jshell.net/vSqKr/33/show/ )
Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
Q2. document.write()でページ内容を追加したいのですが…
A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
  DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A4. 「document.forms.myform.elements[変数名].value」でどぞ。
  JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
  グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
  IEでは要素オブジェクトのプロパティcurrentStyleを使う。
Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
  「"...this..."」とか「function(){...this...}」ではうまく行きません。
A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
  「function(x){return function(){...x...};}(this)」
Q8. input type="file"の値を設定(参照)できないのですが…
A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか。
4デフォルトの名無しさん:2014/07/01(火) 01:42:58.91 ID:U4Rt/XmH
■各種仕様 ( http://fiddle.jshell.net/vSqKr/33/show/#Link も参照 )
◆ Standard ECMA-262
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ (ECMAScript 3 和訳)
http://www.ecma-international.org/ecma-262/5.1/ (ECMAScript 5.1 HTML版)
http://people.mozilla.org/~jorendorff/es6-draft.html (ECMAScript 6 有志HTML版)
http://kangax.github.io/es5-compat-table/ (ECMAScript 5 compatibility table)
http://kangax.github.io/es5-compat-table/es6/ (ECMAScript 6 compatibility table)
◆ HTML Standard (HTML5)
http://www.whatwg.org/specs/web-apps/current-work/multipage/
http://momdo.s35.xrea.com/web-html-test/spec/WD-html51-20130528/Overview.html (HTML5.1 部分訳)
http://www.hcn.zaq.ne.jp/___/WEB/WebStorage-ja.html (Web Storage 和訳)
◆ Document Object Model (DOM) / CSS Object Model (CSSOM)
http://www.hcn.zaq.ne.jp/___/WEB/DOM4-ja.html (DOM Standard (DOM4) 和訳)
http://www.w3.org/TR/DOM-Level-3-Events/ (DOM3 Events)
http://www.w3.org/TR/uievents/ (UI Events)
http://www.hcn.zaq.ne.jp/___/WEB/cssom-ja.html (CSSOM 和訳)
http://www.hcn.zaq.ne.jp/___/WEB/cssom-view-ja.html (CSSOM View Module 和訳)
◆ その他のWeb関連仕様
http://domparsing.spec.whatwg.org/ (DOM Parsing and Serialization - innerHTML等)
http://www.hcn.zaq.ne.jp/___/WEB/XHR-ja.html (XMLHttpRequest 和訳)
http://www.hcn.zaq.ne.jp/___/WEB/File_API-ja.html (File API 和訳)
http://www.whatwg.org/specs/ (WHATWGの仕様一覧)
◆ MDN (Netscape/Mozilla)
https://developer.mozilla.org/ja/docs
◆ JavaScript Garden (ja)
http://bonsaiden.github.com/JavaScript-Garden/ja/
◆ JSON (JavaScript Object Notation)
http://www.json.org/json-ja.html
◆ MSDN Library
http://msdn.microsoft.com/ja-jp/library/yek4tbz0.aspx (JavaScript)
http://msdn.microsoft.com/ja-jp/library/cc427807.aspx (JScript)
http://msdn.microsoft.com/ja-jp/library/cc409712.aspx (DHTML)
5デフォルトの名無しさん:2014/07/01(火) 01:44:35.53 ID:U4Rt/XmH
■諸注意
vol.115でlodashを不必要に推奨して啓蒙する行為が多く確認されており、ライブラリ系の質問はvol.116から禁止されました。
vol.115,116ではライブラリ禁止する発言が見られた直後にライブラリを許可する意図で次スレを立てる行為が確認されています。
本スレッドでライブラリ許可を求める発言が確認された場合は不要な争いを避ける為、スルーすることを推奨します。
ライブラリの質問はライブラリスレへ誘導し、誘導行為への反論はスルーしてください。

*追記
>>2が32行制限に引っ掛かったから一部改行を削除して押し込んだ
テンプレここまで
6デフォルトの名無しさん:2014/07/01(火) 01:50:27.63 ID:DHnR3tiH
>>5
お疲れ様

> >>2が32行制限に引っ掛かったから一部改行を削除して押し込んだ
確かにそこは考慮してなかった
改修案を考えなければ
7デフォルトの名無しさん:2014/07/01(火) 01:54:32.54 ID:8ZN4Sp8v
WebProg
http://nozomi.2ch.net/php/

ウェブプログラムはこっちだ。
ルールぐらい守れ。
8デフォルトの名無しさん:2014/07/01(火) 01:57:04.13 ID:idEMrd8G
今はJavaScriptといっても、ブラウザだけのものじゃなくて
たとえば、Nodeみたいに、サーバーサイドで動くものもある。

このスレはブラウザのJavaScriptではなく、
純粋なJavaScript(ECMAScriptとも言う)の範疇で
やるってことでしょ?
9デフォルトの名無しさん:2014/07/01(火) 02:01:08.43 ID:uudBEfHR
既にあるのになんで建てたんだ?

JavaScript 3
http://peace.2ch.net/test/read.cgi/tech/1380177260/
10デフォルトの名無しさん:2014/07/01(火) 02:01:56.45 ID:DHnR3tiH
WebProgi板の範疇だが、荒らし対策にIDが出るプログラム板に移行したと認識してる
WebProg板がID強制なら良かったんだが、なぜID非表示なんだろう
11デフォルトの名無しさん:2014/07/01(火) 02:06:09.99 ID:uudBEfHR
だからって、既にスレあるのに新しく立てて
いいってことにはならねーよ。
12デフォルトの名無しさん:2014/07/01(火) 02:11:52.13 ID:DHnR3tiH
>>11
>>9とこのスレは微妙に趣旨が違うんじゃないか
13デフォルトの名無しさん:2014/07/01(火) 02:22:43.68 ID:uudBEfHR
微妙に違う程度で立てるなよ。
14デフォルトの名無しさん:2014/07/01(火) 02:26:55.84 ID:FC4lx0MN
>>1
ちゃんと読んだ?

http://peace.2ch.net/tech/

プログラム技術@2ch掲示板
read.cgi モード切替 ■▼
この板はプログラムを作る人のための板です。

あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。

その他、お勉強ページへのリンクスレ、
推薦図書・必読書スレ
もあります。

プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。
15デフォルトの名無しさん:2014/07/01(火) 03:00:33.42 ID:fAq3HEby
その辺は質問じゃない方のJSスレ初回で一通りやったから
興味があるなら見てみるといい
16デフォルトの名無しさん:2014/07/01(火) 04:05:37.67 ID:03D5FeNH
ウェブ制作以外の内容だったらいいんだよ。
JavaScriptといってもサーバーで使えるわけで。

分かりやすく言うのなら、Node関連はOK
ブラウザ関連はNGということ。
17デフォルトの名無しさん:2014/07/01(火) 06:04:19.27 ID:KuPNnu3i
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
18デフォルトの名無しさん:2014/07/01(火) 06:06:45.06 ID:+gZhPYcu
DOMなしシバリならいいのか?
まあわからんでもないけど。

でもJavaScriptって大概DOM関連だろ?
今は違うのかな?

まあWebと関係ない話をするのであれば
まあいいかもしれんな。
19デフォルトの名無しさん:2014/07/01(火) 09:29:02.13 ID:bjaJ/MiJ
荒らしが文句付けているだけなので無視でおk
JavaScript,Ruby,perl,php,pythonなどWebで使用する言語スレも全てここにある
当然、Web関連の話もされている
20憲法に守られる在日スパイ・創価・ヤクザ:2014/07/01(火) 10:38:55.97 ID:h93HG1TH
スパイ対策をしようとする自民党が在日に脅迫されています↓ ↓

秘密保護法の反対派が理由を白状しましたw  (※国家公務員限定の準スパイ防止法)

「外務省職員には帰化した在日韓国・朝鮮人が多数、特定秘密保護法案は彼らを切り捨てる人種条項」[12/04]
http://awabi.2ch.net/test/read.cgi/news4plus/1386159045/
↓ ↓ ↓ ↓ 
秘密保護法反対派に脅迫される自民党議員
http://uni.2ch.net/test/read.cgi/newsplus/1386116831/

「法案に賛成したらあなたのお子様はタダではいられませんよ」    ← ← ←!!!!

「特定秘密保護法案に賛成したならばあなたは、次回の選挙で落選するでしょう」
※おそらく、創価等が選挙協力しないという脅迫。
「一年生議員にさえこれほどの脅迫があるということは幹事長はじめ党役員の方々は
日々どのような目に遭われておられることでしょうか。 」

法案はメディアに猛反対され、公明党や野党に調整されて、
けっきょく、骨抜きフニャフニャ法にされている模様。 続く
21憲法に守られる在日スパイ・創価・ヤクザ:2014/07/01(火) 10:51:24.13 ID:h93HG1TH
続き
韓国と通じてる創価/公明党が与党にいる限り、スパイ対策は骨抜きにされ、
自民党は、移民政策や、在日(カジノ・パチンコ等)や隣国への利益誘導政策
の推進圧力を受け続けます↓

池田大作名誉会長 韓国から特別顕彰牌w
http://hayabusa3.2ch.net/test/read.cgi/news/1394674716/
【政治】河野談話の見直しけん制=公明幹事長  ← 韓国政府と同じスタンス!!
http://uni.2ch.net/test/read.cgi/newsplus/1392962732/  

※自民党以外の議員が帰化朝鮮人、またはその影響下にあると考えれば、
 現在の創価・在日タブーに説明がつきます。

自公解消=自民単独政権実現の最低必要条件

衆院で自民党単独2/3 か、
衆参両院で自民単独過半数
※ただし、自民にも帰化人スパイが残ってる可能性を考えると、さらに多くの議席が必要。

現在クリアしてるのは、衆議院での単独過半数のみ。
22デフォルトの名無しさん:2014/07/01(火) 11:13:31.99 ID:c/RAuQ54
既存のjavascriptスレでも誘導せずWeb絡みの質問を扱ってたから
この板的にはこれまでと何も変わらん
23デフォルトの名無しさん:2014/07/01(火) 11:50:47.57 ID:BX0NjDsh
>>22
ちゃんと読んだ?

> プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
> Javascript は Web 制作板、CGI は Web プログラミング板へ。
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 業界談義、愚痴はプログラマ板へどうぞ。
24デフォルトの名無しさん:2014/07/01(火) 13:29:29.11 ID:LdszS1F2
というか、Web製作板のスレを立てるときに誤爆しただけだろ?w
25デフォルトの名無しさん:2014/07/01(火) 13:31:06.63 ID:fw/OKEC5
こっちは間違えて立ててしまったスレです。

本スレに誘導

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/hp/1403330196/
26デフォルトの名無しさん:2014/07/01(火) 13:46:15.10 ID:hoZFyRqy
向こうのスレからコピペしただけだろうけど、
この板でやるなら、この板向けにテンプレの修正は必要だろうな。
今のはどう見てもウェブ関係に偏り過ぎだし。

まず前提としてウェブ無し(ウェブはWeb制作版なので)のJavaScriptとして
テンプレを修正する所から始めるか。

意見よろしく。
27デフォルトの名無しさん:2014/07/03(木) 12:04:23.04 ID:njV3CGdj
>>26
テンプレ修正始めるか、といいながらも他人任せなのね
28デフォルトの名無しさん:2014/07/03(木) 18:23:50.58 ID:2aOnwFW5
letが使えるなら全てletにするべきですか?
29デフォルトの名無しさん:2014/07/03(木) 21:00:42.73 ID:Tr0ANLtY
>>28

こちらでどうぞ

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/hp/1403330196/
30デフォルトの名無しさん:2014/07/03(木) 22:43:00.54 ID:RYDDXnfu
>>28
letを使うことにしたなら、そうした方が見通しがいいだろうね。
31デフォルトの名無しさん:2014/07/04(金) 03:33:26.35 ID:leUEKH+e
>>30
ありがとうm(__)m
32デフォルトの名無しさん:2014/07/11(金) 21:28:02.98 ID:V+oadpAf
get演算子と__defineGetter__ってどう違うの?
33デフォルトの名無しさん:2014/07/11(金) 23:50:40.18 ID:va0zSPqJ
機能的にどういう違いがあるかわ知らんけど、__defineGetter__はECMAScript エディションで未定義なので非推奨。
34デフォルトの名無しさん:2014/07/17(木) 10:31:47.77 ID:Q5y1Yz1u
【環境】IE9・IE10・Firefox・Chrome
【何をしたのか】ファイルをPOSTした
【エラーメッセージ】特になし
【期待する結果】画面遷移をせずに選択したファイルをPOST送信したい
【サンプルコード】
こちらでの質問でよいのか判断がつきかねるのですが
type=fileで選択した画像をPOSTしたいと考えておりますが

var image = $("#registerd [name=image]").val();

としてもimageには何も入っておりません。
その他のtype=textなどは取得できてPOST出来ております。

選択された画像を取得するにはどのようにすれば良いのでしょうか?
識者の方たちのアドバイスいただけると助かります。
35デフォルトの名無しさん:2014/07/17(木) 19:00:13.29 ID:o7MRN8nV
36デフォルトの名無しさん:2014/07/17(木) 23:34:29.11 ID:Pzezw70Y
しかもライブラリは専用スレがあるという
37デフォルトの名無しさん:2014/07/18(金) 00:50:19.15 ID:JzLlvBv4
>>34
+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/hp/1403330196/

こっちで回答するわ
38デフォルトの名無しさん:2014/07/18(金) 07:25:56.03 ID:kS/l9hIG
>>37
まだ?
39デフォルトの名無しさん:2014/07/19(土) 01:41:40.21 ID:UrCKZkzh
>>38
とっくにしてるよ。

http://peace.2ch.net/test/read.cgi/hp/1403330196/ 495-
4038:2014/07/19(土) 07:55:28.84 ID:wN8dQ7Yi
>>39
本人ではないけどありがとう見逃してた
41デフォルトの名無しさん:2014/07/19(土) 13:03:36.19 ID:RytGMAo6
>>34
http://stackoverflow.com/questions/19476532/send-post-data-from-html-form-with-javascript
$('#form_id').on('submit', function(e){
e.preventDefault();
$.ajax({
type: "POST",
url: "/postinfo.php",
data: $(this).serialize(),
success: function() {
alert('success');
}
});
});

サブミットボタンをpreventDefaultしてポストデータはformをserializeして持たせればいい。
42デフォルトの名無しさん:2014/07/19(土) 13:04:51.71 ID:RytGMAo6
ちなみに、>>37が誘導しているスレは荒らされて機能していないのでまともな回答も返ってこない
43デフォルトの名無しさん:2014/07/19(土) 13:16:31.81 ID:UrCKZkzh
>>42
返って来てるじゃん。必死だなw
44デフォルトの名無しさん:2014/07/19(土) 13:20:24.61 ID:yqHcsRDG
板が違うんだから誘導自体は普通のことよ
45デフォルトの名無しさん:2014/07/19(土) 13:22:09.78 ID:UrCKZkzh
むしろこのスレが機能してないよなw
>>41のような間違った回答まであるし。

正しい回答はこちら
http://peace.2ch.net/test/read.cgi/hp/1403330196/495-
46デフォルトの名無しさん:2014/07/19(土) 13:56:35.66 ID:RytGMAo6
File APIは関係ない。必要ない。画面遷移無しでPOSTを実行すればいいだけだろ。

>>44
荒らされていて機能していないスレに誘導するのは普通ではない
47デフォルトの名無しさん:2014/07/19(土) 14:11:45.93 ID:UrCKZkzh
>>46
勝手にやってろw
48デフォルトの名無しさん:2014/07/19(土) 14:16:47.34 ID:CCrbwHDM
結論から言えば件の質問はスレチ

まず運営側から板ルールはあくまで便宜上のもので
実際の判断は用途に応じて個別具体的に判断しろとの見解が出ている
よって既存のJSスレやここは板チではない

>>34は環境を明確にブラウザと限定しているからWeb制作の領分
あっちのスレに荒らしが巣食っていても行うべきは削除申請であって
ここでは向こうへの誘導に留めるべきである
49デフォルトの名無しさん:2014/07/19(土) 14:35:04.47 ID:7xjfHLig
>>41
.serialize() で値が取れるんなら .val() でもとれるはずだろ
50デフォルトの名無しさん:2014/07/19(土) 14:42:23.62 ID:RytGMAo6
>>49
serializeで取れないんだっけ。
FormDataオブジェクトのblobを使えば投稿された画像データを取得できるんだが、
実際のコードの書き方は忘れてしまったわ
51デフォルトの名無しさん:2014/07/19(土) 15:40:04.53 ID:UrCKZkzh
だから向こうで既に解決済みの話題をなんでやってるの?
52デフォルトの名無しさん:2014/07/19(土) 15:54:48.77 ID:7xjfHLig
FormDataはIE10からじゃないか
53デフォルトの名無しさん:2014/07/20(日) 14:34:17.97 ID:w7G2rcj5
総合スレから飛んできました。現在、selectのidごとに関数を呼び出していますが、もっと
簡略化してどのオプションから選択されたかに変えることはできるでしょうか?

$(function(){
$("#f1").each(function(){
        var pos;
        function call_list(){省略}
$(this).each(function(){call_list();});
$("#sel1").change(function(){
pos = $("#sel1 option:selected").val();
call_list();
});
$("#sel2").change(function(){
pos = $("#sel2 option:selected").val();
call_list();
});
});
});
</script>
</head>
<body>
<form id="f1">
<select id="sel1">
</select>
<select id="sel2">
</select>
<select id="sel3">
</select>
</form>
</body>
54デフォルトの名無しさん:2014/07/20(日) 14:35:17.73 ID:w7G2rcj5
省略部分

$.ajax({
url:"ajax_call.php" ,type:"post",data:{"send":pos}
}).done(function(ret){
//alert(ret);
$("#sel2").children().remove();
$("#sel3").children().remove();
var i;
var sels = new Array("#sel1","#sel2","#sel3");
var pack = ret.split(":");
for( var i=0 ; i < pack.length; i++){
var sep = pack[i].split("@");
for(j=0;j< sep.length -1;j++){
var option = $("<option>");
var opt = option.html(sep[j]);
option.val(sep[j]);
var sel = opt.appendTo(option);
sel.appendTo(sels[i]);
}
}
}).fail(function(){
alert("error");
55デフォルトの名無しさん:2014/07/20(日) 14:37:11.95 ID:w7G2rcj5
補足
ajax,call.phpではMysqlに接続し、コールした値を連結してretに返します。@と:は区切り記号として使っているだけです
56デフォルトの名無しさん:2014/07/20(日) 16:07:27.56 ID:w7G2rcj5
向こうのスレで親切に回答してくれました。ありがとうございます
57デフォルトの名無しさん:2014/07/20(日) 18:49:11.58 ID:CmCT339J
どういたしました。
こっちでレスするつもりが間違えたから
もういいやって書いた。

本当はここに、長々と書き込むつもりだったんだけどな。
58デフォルトの名無しさん:2014/07/20(日) 18:52:16.95 ID:CmCT339J
ん? ここじゃねーな。

こっちに書き込むつもりだった。

+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/hp/1403330196/
59デフォルトの名無しさん:2014/07/21(月) 11:10:32.42 ID:zmB4HNGm
>>53
idでセレクトしてるのに$(this).each()はおかしいな。
どのオプションから選択されたかは、単にselectのidをデータに添付すればいいだけだな。
60デフォルトの名無しさん:2014/07/29(火) 19:32:24.51 ID:k133hjHW
clientsideなjavascriptはsandbox内でしか動かないので、
OS内のコマンド実行はできないとは思うんですが、
sshのjs実装で、ssh経由でlocalhostのコマンド実行とかできないでしょうか?
ぐぐってもserversideのjs実装しか見当たらず、無理なのかなーと諦めかけてはいるのですが、
念のためここに質問させていただきました。
よろしくお願いいたしますm(_ _)m
61デフォルトの名無しさん:2014/07/29(火) 21:26:31.77 ID:MKJ0PQFK
>>60
sshのjs実装とは具体的には?
62デフォルトの名無しさん:2014/07/30(水) 19:47:38.39 ID:3lRKGj/X
>>1
web制作板で長年育ったスレタイをぱくってんじゃねえよチョン
63デフォルトの名無しさん:2014/07/30(水) 23:58:36.98 ID:hBAAUw+j
>>60
できないんじゃないかな
仮にJSで実装したSSHがあったとしてもコマンド実行されるのはSSH先の環境でだし
諦めてNode.js使った方がいいよ
64デフォルトの名無しさん:2014/07/31(木) 16:06:56.65 ID:hDafxEkp
>>63
すいません。やっぱ無理なんですかね。
webSocketとかよくわかってないんですが、sshプロトコルとかjsで実装すれば
通信可能になるのかなーといろいろ探していました。

ちなみにlocalhostにsshするイメージで操作しようとしていました。
65デフォルトの名無しさん:2014/07/31(木) 16:14:32.45 ID:s+wCugIr
>>64
要するに、自分のマシン上にsshサーバー立ててそこにブラウザからjsでアクセスしてコマンド実行したいってこと?
それならsshにこだわらずにそういうサーバーサイドプログラム書けばできると思うけど
66デフォルトの名無しさん:2014/07/31(木) 16:31:14.00 ID:dvJFFgNx
>>65
githubからgit cloneをある程度自動で実行するユーザスクリプトを書こうとしていました。なんでクライアントサイドだけで解決できないかなーと
67デフォルトの名無しさん:2014/08/02(土) 01:22:09.38 ID:tvZxKsuR
node使えば出来るでしょ?

あなたが出来ないと言ってるのはブラウザという実行環境の話。
ブラウザという実行環境はセキュリティが高いことが要求されるので
危険な操作はできないようになってる。
68デフォルトの名無しさん:2014/08/02(土) 21:49:31.27 ID:Z0UUARam
var b2=999;

var a = {
f: function() {
alert(this.b2)
},b2:123
};

a.f.call(null);//999
a.f();//123

(0, a.f)();//999
('unset this', a.f)();//999

http://qiita.com/chick307/items/01907fd4d69be6d264e5

(0, a.f)();と('unset this', a.f)();っていう書き方を初めて見ました。
なんでこれで動くかのさっぱりわかりません。
教えて下さい。
69デフォルトの名無しさん:2014/08/02(土) 22:11:25.20 ID:WSM+xnii
>>68
> (0, a.f)();//999
> ('unset this', a.f)();//999
どちらも無意味なコードを書いているようにしか見えない
とりあえず、カンマ演算子を理解すべし
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator
70デフォルトの名無しさん:2014/08/02(土) 22:41:35.86 ID:Z0UUARam
>>69
ありがとうございます。
(a.f)();を(〜,a.f)();って記述して、カンマで復数の式を記述すると
グローバルオブジェクトを指定することを見つけましたって
記事ってことですか。
なんかトリッキーなことやって可読性が悪くなっただけに見えます。
71デフォルトの名無しさん:2014/08/02(土) 22:45:57.40 ID:WSM+xnii
>>70
だから、無意味なコードといってる
コメントを書けば済むのに、わざわざカンマ演算子で不要な処理を増やしてる
72デフォルトの名無しさん:2014/08/03(日) 08:06:05.05 ID:KHwMExMo
>>70
可読性が悪くなっただね。中二病コードだなw
絶対に真似したらダメだよ。

だいたいタイプ数を減らそうとか考えるのは意味がない。
どんだけタイプ速度遅いんだよって話。

重要なのは読みやすさ、意味の理解の明確さ
一般的に書くのは一回で終わるが、読むのは何回も行われる。
コードレビューの時、修正する時、バグが見つかった時。

君がこれなんで動くのかさっぱりわからないと言ってる通り、この書き方は意味が明確ではない。
意味が明確で無いのは、たとえ動くことがわかってもなんでこんなことしてるの? って
思われるようなコードはダメということ。

「callはthisを変更する時に使うもの」というJavaScriptプログラマなら
だれでも知っている知識を用いればthisを変えたいんだなと意味が明確になる。
73デフォルトの名無しさん:2014/08/03(日) 21:45:25.77 ID:JiJqen6+
qiitaって酷い記事も結構あるし、
yahoo知恵袋も酷い質問に酷い回答のオンパレードだからな。
参考になるのもいっぱいあるけどな
玉石混交ってとこだな
74デフォルトの名無しさん:2014/08/04(月) 09:34:03.94 ID:EHpBCAda
>>73
qiitaて駄目だしする機能ないのがひどいよね。
コメントに書くことはできるけど、切れられるしめんどくさい。
参考にしちゃダメボタン欲しいわ
75デフォルトの名無しさん:2014/08/04(月) 17:29:43.78 ID:HYrSm8W9
>>72
そもそもthisを変えて呼びたくなるようなa.f()が駄目駄目
76デフォルトの名無しさん:2014/08/04(月) 18:53:34.88 ID:6147CJ7y
やっぱ、酷い記事は2chに貼って駄目だししたらいいな。
匿名で批判ってのは気が楽だし
77デフォルトの名無しさん:2014/08/04(月) 19:18:28.70 ID:oUhu7WDJ
>>76
批判目的ならコメントで返信した方がいいと思うが
2chでは本人の目に届かないから、本人はいつまでも気がつかず、質の低い記事を量産し続ける
78デフォルトの名無しさん:2014/08/04(月) 23:02:14.01 ID:O7gnQe0p
批判目的というか、プゲラ目的。
上から目線目的なんで、本人特定されるとまずいのよw
79デフォルトの名無しさん:2014/08/04(月) 23:07:53.37 ID:6147CJ7y
qiitaで高校3年生に投稿した記事のダメだしされてオレ氏(30)
80デフォルトの名無しさん:2014/08/05(火) 01:07:44.19 ID:IwBNplNy
>>78
そんなくだらないことの為にスレッドを使うな
81デフォルトの名無しさん:2014/08/06(水) 09:08:04.63 ID:UQ4kOY/W
突然初心者向けに語りだした>>72わろた
82デフォルトの名無しさん:2014/08/07(木) 00:26:53.99 ID:Hdkh7nV5
一瞬、仕様のどの辺の機能つかってんのかと考えたが、
var f = a.f;
f();
ってやるのをトリッキーに書いてるだけやンw
83デフォルトの名無しさん:2014/08/07(木) 00:31:57.95 ID:KOv3T7TP
だから無駄だとw

”コメントで説明する” ことを考える前にコードで説明しないとダメなんだよ。
コメントで説明すると、コードと二重管理になってしまうからね。

a.f.call() が一番うまくコードで説明出来てるので、
それをかっこわるい書き方しないように。
84デフォルトの名無しさん:2014/08/07(木) 00:56:21.90 ID:oMpKWy4J
a.f.function(*)
85デフォルトの名無しさん:2014/08/09(土) 20:41:06.69 ID:fCN5tiLL
var foo = "win";
Object.prototype.foo = "obj2";
Object.prototype.foo2 = function(){document.writeln("hello<br/>");}
var apple={}
this.foo2();//hello
document.writeln("this.foo="+this.foo+"<br/>"); // win
document.writeln("apple.foo="+apple.foo+"<br/>"); //obj2
apple.foo2();//hello
(グーグルクロームで実行)

Objectを拡張するときって、関数の場合はグローバルオブジェクトに
継承されて、変数の場合はグローバルオブジェクトに継承されない
っていう仕様なのでしょうか?
86デフォルトの名無しさん:2014/08/09(土) 20:58:16.04 ID:BJDH/Lbc
function foo2() {} をグローバルに定義したらそっちつかわれるんじゃ
87デフォルトの名無しさん:2014/08/09(土) 21:08:26.94 ID:fCN5tiLL
>>86
今、定義して確認しました。ありがとうございます。
88デフォルトの名無しさん:2014/08/09(土) 21:13:13.08 ID:AVyldlRR
>>85
prototypeチェーンは継承とは違う
チェーンを辿る際に自身のプロパティがあるなら、そっちを優先するから何もおかしなことはないと思うが
8988:2014/08/09(土) 22:24:03.42 ID:AVyldlRR
90デフォルトの名無しさん:2014/08/09(土) 22:51:37.43 ID:+K2FtsXR
>this.foo2();//hello

これ嘘だろ、ちゃんと精査してから書けよ
91デフォルトの名無しさん:2014/08/10(日) 00:34:35.63 ID:Sc++4qqi
>>90
undefined だな
グローバルオブジェクトはセキュリティ上の理由でプロトタイプチェーンの影響を受けない
92デフォルトの名無しさん:2014/08/10(日) 01:37:13.89 ID:Zb+KAjkq
94だけど、焦りすぎて焼かれた…

HTMLもまだ半分しか報告してません、もう少々お待ちください。
93デフォルトの名無しさん:2014/08/10(日) 01:46:06.35 ID:u1URIHVh
あせり過ぎて未来からの書き込みとは。。。
94デフォルトの名無しさん:2014/08/10(日) 01:48:25.33 ID:Zb+KAjkq
>93
携帯からの表示と自分のパソコンからの表示が違うのでおどおどしてます
パソコンからは94があるんですよー自分のブラウザだけかもしれませんが
95デフォルトの名無しさん:2014/08/10(日) 01:58:57.11 ID:u1URIHVh
scに書いてあるわw
ちょっくら晒してくるわw
96デフォルトの名無しさん:2014/08/10(日) 02:00:27.54 ID:xdwi6sFr
俺は105だけど、さてはて一体何になるかな?
9794:2014/08/10(日) 02:02:13.65 ID:Zb+KAjkq
<!-- 外側のボックス -->
<div id="text-wrapper">
<!-- ボックスの中に切り替えるspanを記述、始めに表示するspanタグはclassに"display-none"を付けない -->
<span class="switched-text display-none"><h1>a</h1><p></p></span>
<span class="switched-text display-none"><h1>b</h1><p></p></span>
<span class="switched-text display-none"><h1>c</h1><p></p></span>
<span class="switched-text display-none"><h1>d</h1><p></p></span>
<span class="switched-text display-none"><h1>e</h1><p></p></span>
<span class="switched-text display-none"><h1>f</h1><p></p></span>
<span class="switched-text display-none"><h1>g</h1><p></p></span>
<span class="switched-text display-none"><h1>h</h1><p></p></span>
<span class="switched-text display-none"><h1>i</h1><p></p></span>
<span class="switched-text display-none"><h1>j</h1><p></p></span>
<span class="switched-text display-none"><h1>k</h1><p></p></span>
<span class="switched-text display-none"><h1>l/h1><p></p></span>
<span class="switched-text display-none"><h1>m</h1><p></p></span>
<span class="switched-text">TOP PAGE!</span>
</div>
98デフォルトの名無しさん:2014/08/10(日) 02:07:35.83 ID:TNaWGn4J
divの下には当然bodyとかがあります

CSS

@charset"Shift_JIS";

/* 表示を消すclass */
.display-none{display:none;}

/* ボタンの配置 */
div#button{
margin:20px auto;
text-align:center;
}

/* 外側のボックスのスタイル */
div#text-wrapper{
width:500px;
height:auto;
margin:40px auto;
text-align:center;

}
9994:2014/08/10(日) 02:10:42.66 ID:TNaWGn4J
HTMLの前半が消えてる・・・ ややこしくてごめんなさい

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="Shift_JIS">
<title>sample</title>
<link rel="stylesheet" href="newstyle.css">
<script type="text/javascript" src="script.js"></script>
</head>

<body>



<!-- 切り替えボタン -->
<div id="button">
<input type="button" class="switch-text" value="A">
<input type="button" class="switch-text" value="B">
<input type="button" class="switch-text" value="C">
<input type="button" class="switch-text" value="D">
<input type="button" class="switch-text" value="E">
<input type="button" class="switch-text" value="F">
<input type="button" class="switch-text" value="G">
<input type="button" class="switch-text" value="H">
<input type="button" class="switch-text" value="I">
<input type="button" class="switch-text" value="J">
<input type="button" class="switch-text" value="K">
<input type="button" class="switch-text" value="L">
<input type="button" class="switch-text" value="M">
<input type="button" class="switch-text" value="TOP">
</div>
10094:2014/08/10(日) 02:12:37.69 ID:TNaWGn4J
javascript 前半

(function(){
var l = function(){
//切り替え用テキストが書かれた要素、span class="switched-text"を抽出
var elS = getElementsByClass('span','switched-text');
//切り替えボタンの要素、input class="switch-text"を抽出してonclickイベントを追加
getElementsByClass('input','switch-text',function(i){
this.onclick = function(){
addClassName('display-none',elS);
removeClassName('display-none',elS[i]);
};
});
//クラス名を追加する関数。
//className:追加したいクラス名
//el:クラス名を追加する要素(または要素のリスト)
function addClassName(className,el){
if(el.length === undefined)el = [el];
for(var i = 0; i < el.length; i++)
if(!el[i].className.match(className))
el[i].className = el[i].className + '' + className;
}
//クラス名を消す関数
//className:消したいクラス名
//el:クラス名を消す要素(または要素のリスト)
function removeClassName(className,el){
if(el.length === undefined)el = [el];
for(var i = 0; i < el.length; i++)
el[i].className = el[i].className.replace(className,'');
}
10194:2014/08/10(日) 02:13:17.13 ID:TNaWGn4J
Javascript 後半

//class名で該当する要素を取得する関数
//tagName:取得する要素のタグ名
//className:取得する要素のclass名
//callback:イベント追加等の処理をするための関数を渡す
function getElementsByClass(tagName,className,callback){
var nodeList = [];
var el = (this.getElementsByTagName == undefined ? document : this).getElementsByTagName(tagName);
for(var i = 0,j = 0;i < el.length;i++)(function(el){
if(el.className.match(className)){
nodeList.push(el);
if(callback)callback.call(el,j++);
}
})(el[i]);
return nodeList;
}
};
if(window.addEventListener)
window.addEventListener('load',l,false);
else if(window.attachEvent)
window.attachEvent('onload',l);
})();
10294:2014/08/10(日) 02:15:50.58 ID:TNaWGn4J
全部書き込んだ後に質問文も消えてることに気づきました。
困っているのは、<span class="switched-text">TOP PAGE!</span>の文章が
他のボタンを押した後も消えないことです。
知恵袋を一言一句移してやってるのですが、上手くいきませんでした…
ラジオボタンで切り替えなどのページも調べてみたのですが、
初心者の自分には応用もなにも分かりません。
なにとぞよろしくお願いします。
103デフォルトの名無しさん:2014/08/10(日) 02:27:49.42 ID:xdwi6sFr
ひでぇコードだな。
104デフォルトの名無しさん:2014/08/10(日) 02:31:40.83 ID:u1URIHVh
>function addClassName(className,el){
>//(ry
>el[i].className = el[i].className + '' + className;
>//(ry
>}

よくわからんが、addClassNameの半角スペースは入ってるの?

なんか、小手先ってかjsついては結構勉強してる印象はあるが、
なかなか残念なプログラムだなぁw
まぁ、現場でここまで知ってくれてるやつ居らんから評価するけど。
ちなみにaddClassName/removeClassNameとかって
'display-none2みたいなクラス名作ったらアウトだよね。
10594:2014/08/10(日) 02:52:33.87 ID:TNaWGn4J
>103さん
正直自分が書いたコードではないのでなんともかんとも

>104
半角スペースはどこへ入れたらいいのでしょうか?

こんなことを言っても信じてもらえないかもしれませんが、
JavaScriptを触るのは昨日がはじめてです。
じゃあもっと初歩をやれよと言われればごもっともなのですが、
ネットで色々コードを調べているうちに興味の持てそうなこの機能を見つけてしまい、
挑戦してみたところうまくいかずにムキになっている状態です。

4月からPCの専門学校に通いもっときちんと勉強する予定ですが、
それまでにできることはしておきたいと思っています。
Javascriptを使ってゲームなども作りたいと思っていますが、それはまだ先の話とも理解しています。

どうでもいい話ではありますが。
10694:2014/08/10(日) 02:53:32.54 ID:TNaWGn4J
104さんに敬称をつけるのを忘れていました…申し訳ありません
107デフォルトの名無しさん:2014/08/10(日) 02:56:01.74 ID:xdwi6sFr
>>94
あなたのやりたかったことはこれでいい?

http://jsbin.com/wojanafe/1/

$('.switch-text').on('click', function() {
 var index = $('.switch-text').index(this);
 $('.switched-text').addClass('display-none').eq(index).removeClass('display-none');
});

書くよりも読むのにつかれるわw
10894:2014/08/10(日) 02:58:30.24 ID:TNaWGn4J
>>107さん
はい、そうです!
疲れさせてすみませんw
このソースはどこに入れれば動作するでしょうか?
10994:2014/08/10(日) 03:04:09.40 ID:TNaWGn4J
教えて頂いたコードを</body>の直前に入れましたがうまくいきませんでした…。
外部のスクリプトの書き換えが必要なのでしょうか?
11094:2014/08/10(日) 03:11:32.98 ID:TNaWGn4J
結局やりたいことはというと
「ボタンを押したら下部のテーブルに文字が出る。
もともと出ていたトップページの文字は消える」
ということをやりたいのです。
ひどいコードとのことでしたが、
もっとシンプルなコード、もっとちゃんとしたコードを
内容全部とは言わないのでヒント(使う機能など)だけでも教えて頂けると非常に助かります。
111デフォルトの名無しさん:2014/08/10(日) 03:13:25.46 ID:xdwi6sFr
右上のedit js binから全てみれる。

主にHTMLを少しまともにした。

http://jsbin.com/wojanafe/2/
112デフォルトの名無しさん:2014/08/10(日) 03:14:30.89 ID:u1URIHVh
>>107が書いたのは、jQueryっていうライブラリ使って書いたコードだから、
組みこめないよ。
君が提示したコードがどっかからのコピペしたコードなら勉強の役に立たないから捨てたほうがいいよ。
あと、ブラウザでjsのデバッグをする方法調べるといいよ。
とりあえずブラウザ開いてるときにF12押すとデバッガが立ち上がるから、後はぐぐってください。
113デフォルトの名無しさん:2014/08/10(日) 03:16:59.97 ID:xdwi6sFr
>>110
> もっとシンプルなコード、もっとちゃんとしたコードを
> 内容全部とは言わないのでヒント(使う機能など)だけでも教えて頂けると非常に助かります。

すまんな。>>107が内容全部だ。
114デフォルトの名無しさん:2014/08/10(日) 03:23:08.21 ID:xdwi6sFr
あぁ、load時に実行ってのを入れ忘れたか。
11594:2014/08/10(日) 03:28:37.39 ID:TNaWGn4J
>>111さん
ありがとうございます。
コードは見れたのですが、当てはめるとボタンが反応しなくなりました。
恐らく自分がjqueryを使っていないのが原因だと思います。
存在は知っていたのですが、使ったことはありません。
ちょっとjqueryについて調べてみます。
11694:2014/08/10(日) 03:36:41.21 ID:TNaWGn4J
>>112さん
はい、このコードは捨てることにします。
数時間ググり続けてるんですけどね…
デバッグも、特に異常は表示されません。
表示したい機能を考えた上で、一から作り直そうと思います。

>>113さん
やはりそうですか…しかしjQueryを使っていないので、
このままこのコードを使うことはできないみたいです。
諦めて一から作り直します。

みなさん、ご指導本当にありがとうございました。
これからJavascriptの勉強、1から頑張っていきます。
117デフォルトの名無しさん:2014/08/10(日) 03:42:15.42 ID:xdwi6sFr
> はい、このコードは捨てることにします。
> 数時間ググり続けてるんですけどね…

つまりは「コードをググる」という行為は
時間をムダにすることでしか無いということが
証明されたではないか?

数時間あればJavaScriptの勉強ができるよ。
118デフォルトの名無しさん:2014/08/10(日) 03:42:48.41 ID:xdwi6sFr
> やはりそうですか…しかしjQueryを使っていないので、

jQueryを使えばいいじゃないか?
たったそれだけのこと。
11994:2014/08/10(日) 03:47:50.65 ID:TNaWGn4J
>>117、118さん
コード自体はググってないです。
デバッグや他の手段をググったり本を読んで探したりしていました。

jQueryを使った方が楽なのでしょうか?
もしそうなら、早めに覚えておきたいとも思うのですが、
普通の方法でスクリプトが書けるようになるのも大事だと思うので、
悩みます。
120104:2014/08/10(日) 03:55:08.85 ID:u1URIHVh
ちなみに、半角スペースは試せたか?どこに入れるかは自分で考えてくれ。

>jQueryを使った方が楽なのでしょうか?
>もしそうなら、早めに覚えておきたいとも思うのですが、
>普通の方法でスクリプトが書けるようになるのも大事だと思うので、
>悩みます。

javascriptをしっかりやるなら「普通の方法」っていう低レベルのDOM操作は覚えておくほうがいいが、
そこまでしっかりやらんってのであればjQueryからやったほうがいいんじゃね?
12194:2014/08/10(日) 03:57:39.27 ID:TNaWGn4J
>>120さん

半角スペースはAddとclassの間とか色々な所に入れてみたのですがすべて駄目でした。
Javascriptはしっかりやるつもりです。
まだ本当に始めたばかりですが、低レベルな所からちゃんと学んでいきたいです。
122デフォルトの名無しさん:2014/08/10(日) 04:01:46.88 ID:Sc++4qqi
>>110,116
俺ならこうする
http://jsfiddle.net/xchrn9uc/
123デフォルトの名無しさん:2014/08/10(日) 04:02:35.77 ID:u1URIHVh
お、おうw


el[i].className = el[i].className + '' + className;
の''の間に半角スペース入れると動かん?
124デフォルトの名無しさん:2014/08/10(日) 04:04:17.76 ID:Sc++4qqi
>>119
> jQueryを使った方が楽なのでしょうか?
jQuery を使ったほうが楽だろうが、初めからjQueryを使うと変な癖が付くのでお勧めしない
ライブラリはJavaScriptをラップするもの
基本を覚えてからライブラリの使い方を覚えるのでも遅くはない
125デフォルトの名無しさん:2014/08/10(日) 04:08:22.52 ID:Sc++4qqi
>>123
それで動くだろうが、そうするぐらいなら classList を覚えてもらったほうが良いのではないか?
https://developer.mozilla.org/ja/docs/DOM/element.classList
12694:2014/08/10(日) 04:15:20.38 ID:TNaWGn4J
>>123さん
すみません、悪化しました。
色々書き換えまくってた結果、なんか初期画面ですべての文章が表示されてます…
自分の無能さに呆れ果てる次第です。
今必死で新しいコードに書き換えてます。

>>124さん
分かりました。まずは基本をしっかり勉強します。
127デフォルトの名無しさん:2014/08/10(日) 04:26:48.23 ID:Sc++4qqi
>>122はJavaScript無効環境では無意味なボタンが残る問題があってまだ改善する余地がある
基本は何もボタンを用意せず、JavaScriptで必要なフォームボタンを生成してやるのが一番いいだろうな
12894:2014/08/10(日) 04:27:03.67 ID:TNaWGn4J
>>125さん
ググって解説ページも見たのですが、今の自分にはかなり厳しいです…
やはりこのような機能を初心者が実装すること自体が無謀だったのかもしれません。
自省して、背伸びせず、基礎からはじめ直します。
みなさんこのような初心者のせいでご迷惑をおかけし申し訳ありません。
129デフォルトの名無しさん:2014/08/10(日) 04:43:57.91 ID:xdwi6sFr
>>122をjQueryを使うとこうなる。

document.getElementById('sample').addEventListener('click', function (event) {
 var input = event.target;

 if (input.tagName === 'INPUT' && input.type === 'button') {
  input.ownerDocument.getElementById('output').firstChild.data = input.value;
  event.preventDefault();
 }
}, false);

   ↓

http://jsfiddle.net/xchrn9uc/2/

$('#sample').on('click', 'input[type=button]', function (event) {
 $('#output').text(this.value);
 event.preventDefault();
});
130デフォルトの名無しさん:2014/08/10(日) 04:54:18.13 ID:xdwi6sFr
>>127
> 基本は何もボタンを用意せず、JavaScriptで必要なフォームボタンを生成してやるのが一番いいだろうな

いやこれは本質的にはradioボタンの動きなので、
radioを使ってCSSだけで実装するのがいいだろう。
131デフォルトの名無しさん:2014/08/10(日) 05:00:53.52 ID:awdBi9qt
簡単DB検索システムを作ります。
入力フォームのページ、検索結果リストを表示するページの2つに分けたいです。
ググっても「1つのページ内で入力して表示を出す方法」しか出てきません。
入力フォームから文字列取得、GET通信と戻り値取得は出来たのですが、
どのように組めば2ページ目に戻り値を表示できるでしょうか??
132デフォルトの名無しさん:2014/08/10(日) 05:01:17.73 ID:xdwi6sFr
> jQuery を使ったほうが楽だろうが、初めからjQueryを使うと変な癖が付くのでお勧めしない

jQuieryを使ってつく、変な癖っていうのがよくわからないな。
jQueryはただのJavaScriptのライブラリだぞ。

むしろjQueryを使わないほうが、ブラウザ固有の問題。
たとえばclassListで書いたら動かない。
いろいろ調べたらclassListが動くのはIE10以上で〜
みたいな問題にハマるから初心者こそjQueryを使った方がいい。
133デフォルトの名無しさん:2014/08/10(日) 05:02:29.42 ID:Sc++4qqi
>>129
それで動くのか
this 値がトリッキーすぎるな
また一つ、jQuery が嫌いな理由が出来てしまった…

>>130
自分で書いておいてなんだが、「タブ型UIを作りたかった」といわれても納得できるんだよな(今気づいた)
だとすれば、>122は期待通りに動作していないことになるわけだが、こればかりは質問者でないとわからん
タブ型UIなら始めに全コンテンツを表示しておいてJavaScriptでタブ型UIに作り変えれば済むのだが
134デフォルトの名無しさん:2014/08/10(日) 05:04:57.88 ID:xdwi6sFr
>>133
ん? もしかしてthisがよくわかってない?

無理やり難癖をつけてjQueryを嫌おうとする人が
一部にいるみたいだが、どうにかならんもんかねw
135デフォルトの名無しさん:2014/08/10(日) 05:07:23.01 ID:xdwi6sFr
別にこれでも動くよ。冗長だけどね。

$('#sample').on('click', 'input[type=button]', function (event) {
 $('#output').text(event.target.value);
 event.preventDefault();
});
136デフォルトの名無しさん:2014/08/10(日) 05:09:24.53 ID:Sc++4qqi
>>132
変な癖っていうのは
・メソッドチェーンに拘る
・無名関数を多量生産する

これは明らかにスタンダードな書き方ではない
基本を覚えずにこれを覚えると、
・必要もないのにメソッドチェーンにしたがる
・名前付き関数を忌避して無名関数でなければ気持ち悪く感じる
という感覚を持つ場合がある
Web制作板で妙に関数型言語に拘る奴がいるが、ああいう感じだ
まあ、一部の信者だけだと信じたいが、刷り込み効果も結構怖いので初めからこの書き方に慣れて欲しくない
137デフォルトの名無しさん:2014/08/10(日) 05:13:57.09 ID:Sc++4qqi
>>134
そちらこそ event.currentTarget と event.target の違いを理解してるのか?
勝手に難癖つけていることにしないで欲しいんだが

this値は event.currentTarget と同義
DOM 3 辺りからこの規約になったはずだが、もともとはDOM 規定に this 値は入ってなかった
この場合の event.currentTarget は #sample になるので、event.currentTarget で参照可能なのは本質的におかしい
138連続投稿って言われたからIDかわる:2014/08/10(日) 05:21:25.67 ID:Jkr9svTU
ほらねw >>137でDOM 3の規約がどうとかいってるでしょ?
だからjQueryを使えって言ってるの。

わからない人に説明しておくと、eventは特にIEが
W3C仕様に長らく対応していなくてevent.targetが
使えるようになったのはIE9から

こことか見てみよう。
http://ichijo3.tumblr.com/post/26127378998/vs2012rc-javascript-2

で、jQueryのeventは、jQueryが各ブラウザの問題を解決して
IE6等を含むどのブラウザでもW3C規約に準拠した実装になってる。

だから>>137でごちゃごちゃいっている罠にはまらなくて済む。
実際に>>122とか古いIEで動かないからさ。

そういう本質的でない部分を考えるのは時間の無駄。
139デフォルトの名無しさん:2014/08/10(日) 05:25:34.22 ID:Jkr9svTU
> この場合の event.currentTarget は #sample になるので、event.currentTarget で参照可能なのは本質的におかしい

これは単にjQueryを知らないだけだねw

this値は event.currentTarget と同義ってのは間違い。

thisってのは呼び出し元が自由に決められるもの。
だからこの場合のthisは、jQueryの仕様で決まる。
それを知らないだけ。
140137:2014/08/10(日) 05:51:26.19 ID:Sc++4qqi
this 値の定義は DOM 4 からだった
http://www.w3.org/TR/dom/#dispatching-events

>>139
> これは単にjQueryを知らないだけだねw
何を今更
>>133で知らなかった事は明言してるだろう

> だからこの場合のthisは、jQueryの仕様で決まる。
勿論、そうだが、DOM Interface に合わせない仕様が嫌いというだけ
個人の感想(好み)の話に難癖を付けられても困る
jQueryは部分的にDOMに準拠していながら一部独自仕様で突っ走ってるのでつじつまが合わない感があって好きじゃない
というか、jQueryが全能であるかのようなものいいだが、そこまで万能ではないぞ

古くは attr() がプロパティだか属性だかわからないものを取得するAPIだったが、1.6 で prop() が出来てようやく区別できるようになった
初めから標準にあわせておけばこの手の問題は起きなかったはずだが、そうしなかったのは理解に苦しむ
141デフォルトの名無しさん:2014/08/10(日) 05:57:58.06 ID:Jkr9svTU
OK、OK、君はDOMに準拠してないのが嫌い。

俺は、ブラウザ間での互換性など
ハマる部分があるから、初心者にこそ
jQueryを使うのをおすすめする。

こういうことだね?
142デフォルトの名無しさん:2014/08/10(日) 06:07:21.82 ID:Sc++4qqi
>>141
俺のネガティブな部分とお前のポジティブな部分の比較が公平ではないが、当然意識してやってるんだろうな?
煽り立てて話すことしか出来ないなら、お前と話し続ける意義は感じない
143デフォルトの名無しさん:2014/08/10(日) 06:11:56.31 ID:SkkTdbxn
>>131
1ページ目は入力フォームのHTMLがあって、それが表示されている
そこで送信ボタンを押すと、サーバと通信して、
新しいHTMLをもらうので、それが表示される
それが2ページ目だよ

2ページ目から、1ページ目に戻りたいなら、
ブラウザの前に戻るボタンを押せばいい
144デフォルトの名無しさん:2014/08/10(日) 06:53:48.66 ID:Jkr9svTU
>>142
別に話し続けなくていいよ。っていうか
これ以上レスしないなら俺が助かる。

で、jQueryは初心者こそ使うべきもの。
DOMの面倒な部分、複数の要素に一括で属性や
イベントを割り当てることや、各ブラウザの違いによる問題に
はまらなくて済むから。

実際に>>122が動かないコードであることを証明している。
最初から一部のブラウザで対応で書くのが大変なことを意味している。
145デフォルトの名無しさん:2014/08/10(日) 12:11:05.82 ID:Sc++4qqi
>>144
> 実際に>>122が動かないコードであることを証明している。
addEventListener, event.target は IE9+ で動作する
現在の主要環境では特に問題はないと思うが、具体的にどのブラウザで動かない?
attachEvent を使えば IE8- もサポート可能だが、更新の切れたWindows XPをサポートするのは特殊なケースになる
http://jsfiddle.net/xchrn9uc/3/

> で、jQueryは初心者こそ使うべきもの。
初心者は基礎から学ぶもの
>>136でjQueryから学ぶことに弊害は説明した
更に言えば、クロスブラウザは初心者でも当然学ぶもの
DOM標準でかけなくてjQuery依存するとjQueryで網羅できない状況に勅命したときに苦労するし、クロスブラウザ方法がわからないだろう
jQueryから他のライブラリに移行したり、DOMに移行する時にも「jQueryでの〜はDOMではどう書きますか?」という疑問が発生するはずだが、jQuery独自仕様に慣れてしまうとDOMの書き方に戸惑いを覚えて納得できない可能性は十分にあるし、その手の質問は多くある
長期的に考えれば、DOMから学ぶほうが効率が良いと思う

どちらにしても、あとは質問者が判断することだろう
146デフォルトの名無しさん:2014/08/10(日) 12:25:27.23 ID:awdBi9qt
>>143
なるほど。
今はサーバ側ではDBから取り出したデータを整形して戻り値としているのですが、
htmlとして必要なコード全てを返すようにすれば良いということですね。
別のページに検索結果データを渡して表示するようなコードが無いのは、そもそもそんな動きをJavaScriptは出来ないという…。
何となくJavaScriptの出来ること・出来ないことが見えてきた気がします。
ありがとうございました。
147デフォルトの名無しさん:2014/08/10(日) 12:57:47.05 ID:Jkr9svTU
>>145
> addEventListener, event.target は IE9+ で動作する
だが、IE7はまだサポート中であり
一番利用所が多いIEはIE8というデータもある。

http://marketshare.hitslink.com/browser-market-share.aspx?qprid=3&qpcustomb=0

IE7のサポートが切れる2016年1月まで、まだ1年半以上もある。
148デフォルトの名無しさん:2014/08/10(日) 13:18:34.47 ID:Jkr9svTU
> 初心者は基礎から学ぶもの

ぶっちゃけDOMが基礎っていうのもおかしいんだよね。

基礎っていうのは、何年たっても使えるものだが
DOMはそうではない。あれはブラウザが搭載している
API(ブラウザとバージョンによって違うもの)

クロスブラウザとか、本来考えなくていいことなはずなんだよ。
149デフォルトの名無しさん:2014/08/10(日) 14:43:01.28 ID:kx2NPXwE
>>90-91
グーグルクローム
バージョン 36.0.1985.125 m
で実行しましたが、
>Object.prototype.foo2 = function(){document.writeln("hello<br/>");}
>this.foo2();//hello
undefinedでなくhelloになりました。
150デフォルトの名無しさん:2014/08/10(日) 16:36:20.71 ID:u1URIHVh
>>149
テストしたら、確かにそうでした。すみません。
ただEcmaの仕様では実装依存と書かれているので、
グローバルオブジェクトに継承させることを期待するコードを書くのは危険だと思います。
151デフォルトの名無しさん:2014/08/10(日) 18:00:52.06 ID:qP2x6nLJ
>>147
わかった
では、対応する必要があるならすればいいだろう
クロスブラウザを含めて勉強になる

>>148
jQueryはDOM APIで実装されているのだから、jQueryよりはDOM APIを基礎と表現しては差し支えないと思うが
逆に聞くが、jQueryが基礎になるのか?

また、DOM は基本的には変わらないので DOM L2は今でも使える
( 策定前の不安定な時期に変更があるのは仕方ない)
152デフォルトの名無しさん:2014/08/10(日) 19:25:49.40 ID:Jkr9svTU
俺が言ってる基礎というのは、プログラミング一般における基礎であり
特定の言語やブラウザには依存しないもの。

DOMは標準化されているが、これはプログラミングの基礎には値しない
ただの一ライブラリだ。しかも巨大で全貌を把握している人なんかほとんどいないだろう。
現在のDOM3はリファレンスからして曖昧。各ブラウザで動作に違いがあるのは
IEのせいではなくて、DOMそのものに問題がある。

jQueryは標準化こそされていないが、その考え方は現代の
プログラマにとって必須とも言える関数型言語をベースとしており
応用の範囲が広い。

> また、DOM は基本的には変わらないので DOM L2は今でも使える
DOMが変わらないなんてバカバカしい。
現在DOM4が策定中であり、非推奨の機能は消える運命にあるし、
またブラウザでまともに実装されてないので、古いやり方と新しいやり方が
混在し、またブラウザ固有のやり方をしないといけない場合もある。

DOM2のMutation Eventはどのブラウザで使えるのか言えるか?
これは問題が多いからDOM4ではMutation Observersに変わるわけだが、
どのブラウザで対応していて、どのブラウザからMutation Eventが使えなくなるのかぱっと言えるか?
153デフォルトの名無しさん:2014/08/10(日) 19:37:57.21 ID:kx2NPXwE
>>150
はい。ありがとうございます。
154143:2014/08/11(月) 01:39:42.28 ID:M6jWaViT
>>146
クライアントから問い合わせのフォームが送られると、
サーバではDBから取り出したデータを、
PHPで整形して、HTMLを作る
そのHTMLの中へ、JSのコードもミックスする

そして、そのHTMLがクライアントへ送られて、JSが作動する

サーバサイド・スクリプティングなら、
山田祥寛(よしひろ)、翔泳社
10日でおぼえる PHP 入門教室、第4版、2012

PHPは、WEBプログラミング板に、数十のスレがある

最近は、Node.jsというサーバサイドJSもあるが、
漏れはよく知らないので、誰かに聞いて
155デフォルトの名無しさん:2014/08/11(月) 01:55:11.81 ID:qVx1pZsW
>>154
ステマ乙

>>146
そのレベルであれば、ajaxでできなくはない。
まぁ、説明すんの面倒だからがんばれ
156デフォルトの名無しさん:2014/08/11(月) 08:01:59.28 ID:ugSHFL26
>>152
> 俺が言ってる基礎というのは、プログラミング一般における基礎であり、特定の言語やブラウザには依存しないもの。
それはアルゴリズム等の言語依存のない基礎知識であって言語仕様は別途覚える必要があるだろう
繰り返すが、jQuery は DOM APIを使用しているので DOM は必須知識だ
そもそも、DOM は JavaScript だけでなく、Java, PHP 等他の言語にも実装されている仕様だ
他言語にも十分応用が効く基礎知識のはずだが

> 現在のDOM3はリファレンスからして曖昧。各ブラウザで動作に違いがあるのはIEのせいではなくて、DOMそのものに問題がある。
意味が分からない
DOM 仕様をブラウザベンダーが実装する流れを踏まえれば、ブラウザの実装差異はブラウザベンダーの責任

> 現在DOM4が策定中であり、非推奨の機能は消える運命にあるし、
非推奨の機能を使わないのは当然だろう

> DOM2のMutation Eventはどのブラウザで使えるのか言えるか?
Mutation Event は DOM L3 Events のはずだが、DOM2 はどこから出てきた?
http://www.w3.org/TR/DOM-Level-3-Events/#legacy-mutationevent-events

DOM L3 Events は Working Draft なので中途改定があっても仕方ない
「不安定な仕様の機能は出来るだけ使わない」というのはプログラマとして当然の心構えだ
「Mutation Eventが廃止されるのはおかしい」なんて疑問を持つならそれはあなたの認識不足としか言いようがない

> どのブラウザで対応していて、どのブラウザからMutation Eventが使えなくなるのかぱっと言えるか?
必要になったら調べればいいわけで全てを完璧に記憶する必要はない
あなたはjQueryの機能を全て記憶しているのか?
都合のいいDOMのデメリットだけ取り出してjQueryの場合と比較できてないように思われるが
157デフォルトの名無しさん:2014/08/11(月) 08:09:59.39 ID:ugSHFL26
また、DOM は Interface の一種であってライブラリではない
だから、他の言語でも実装できる
158146:2014/08/11(月) 15:43:33.36 ID:CKKbQKMW
>>154
ああ、分かりました。PHPで、JavaScriptのコードも生成してしまうってのもありなんですね。
混乱しそうですけど、どう取りかかれば良いかは明確ですね。
ありがとうございます。

>>155
本当ですか!?もしajaxで出来るなら、何かヒントだけでも頂けませんか?
159143:2014/08/12(火) 01:21:04.04 ID:7nSDT24w
PHPでJSのソースコードを生成しているというより、
JSはJSだけでコーディングしておいて、
単にHTMLに、以下のように書けば、JSを読み込む
<script src="script.js"></script>

PHPで作るHTML部分は、
DBにアクセスして、該当するレコードを、
<table>表、<tr>行、<td>列
などのタグを使って、表として表示する
160143:2014/08/12(火) 01:29:55.91 ID:7nSDT24w
ほとんどのwebサイトは、サーバサイドPHPと、
ブラウザでJSを使う
それと、Ajax,DOM
161146:2014/08/12(火) 02:23:43.49 ID:U0rqxCXc
>>159
なるほど。PHPファイルとは別にjsファイルを置けば、PHPとJavaScriptが混在する割合が減りますね。
そもそもJavaScriptでHTMLの部品を吐き出すようにすれば
組み立てるだけみたいになる…のかな。
教えていただきありがとうございます。
162デフォルトの名無しさん:2014/08/12(火) 04:10:01.28 ID:v1nubPFA
PHPでJavaScriptのコードも生成するのは絶対にダメ。

唯一の例外はJavaScriptのコードではなく変数を生成することだけ。
その変数も数は少なくJSONライブラリを使って連想配列を定義するようにする。
しかもこれは最終手段で、HTML要素にカスタム属性をつける方がいい。
163143:2014/08/12(火) 05:37:48.69 ID:7nSDT24w
PHPとJSが密接で、相互に行ったり来たりしていたら、
プログラムできないだろうねw

PHPを修正 → JSを修正
JSを修正 → PHPを修正

うわあーーーっw
164デフォルトの名無しさん:2014/08/17(日) 07:10:13.74 ID:cCF7VIi4
var guheguhe = 'parentScope';

var hogehoge = function() {
var guheguhe = 'childScope';
console.log(親のguheguhe+'#'+guheguhe);
}

-------------------------------------
parentScope#guheguhe

みたいにできたらいいけど、いい方法ない?

あとクロスブラウザで関数自身から関数名取得するいい方法ないかな?
ログ取りたいんだけど、いちいち自分で関数名設定するのうざいw
165デフォルトの名無しさん:2014/08/17(日) 07:11:07.99 ID:cCF7VIi4
-------------------------------------
parentScope#childScopeだ すまんw
166デフォルトの名無しさん:2014/08/17(日) 13:40:46.10 ID:d8V7Agpt
>>164
親スコープの変数を取得する方法はない
対策は変数名をバッティングしないようにする

関数名は非標準だが Function#name で参照可能なので設定する
変数名と関数名は同一ではないので、混同しないように気をつけよう
167デフォルトの名無しさん:2014/08/17(日) 13:45:31.55 ID:d8V7Agpt
補足。
Strict Modeを使用しなければ arguments.callee で自身を参照可能ではある
しかし、「関数名を設定せずに関数名を取得したい」が自己矛盾で判断に困るな
168デフォルトの名無しさん:2014/08/17(日) 17:26:02.59 ID:+ov8DYwh
ありがとうね。できなければいいんだwできなければ
できそうな感じを醸し出すからまいるよw
169166:2014/08/17(日) 18:01:22.79 ID:d8V7Agpt
> 関数名は非標準だが Function#name で参照可能なので設定する
ES6 に取り込まれてた
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-name

>>168
仕様を読むまでもなく出来そうにないと思うがなあ
関数名は基本指定するものだし、変数名を重複させる場合は意図的に行う
170デフォルトの名無しさん:2014/08/17(日) 19:13:06.05 ID:Yqv/WDG+
誘導
jqueryを伴うJavaScriptの質問はこちらへ
http://peace.2ch.net/test/read.cgi/hp/1407166949/
171デフォルトの名無しさん:2014/08/18(月) 00:04:23.29 ID:EJosHlX1
>>170
勝手に変なスレに誘導しないでくれ
172デフォルトの名無しさん:2014/08/18(月) 15:35:48.79 ID:F0HxaotR
>>164
var guheguhe = 'parentScope';

var hogehoge = function() {
var guheguhe = 'childScope';
console.log(window.guheguhe+'#'+guheguhe);
}

外がグローバルスコープだった場合はこれで取れる
173デフォルトの名無しさん:2014/08/18(月) 18:48:53.65 ID:iLjhvtil
IE7以下を切り捨てた場合、querySelectorはあると前提していいですか?
174デフォルトの名無しさん:2014/08/18(月) 21:18:56.75 ID:NfYkDP0V
いい
他に古いのっつったらFirefoxやOperaの古いの使ってるやつや
Androidの標準ブラウザだろうけどその辺はみんな対応してる
175デフォルトの名無しさん:2014/08/18(月) 21:54:28.33 ID:5dWK2Cxv
176デフォルトの名無しさん:2014/08/18(月) 22:40:46.96 ID:iLjhvtil
ありがとうございました
177デフォルトの名無しさん:2014/08/23(土) 20:15:09.36 ID:pJdchDbj
【環境】OS win7, Firefox31
【何をしたのか】クロスドメインでのjsonp取得
【エラーメッセージ】ReferenceError: test is not defined
【期待する結果】エラーを吐かずに取得したい
【サンプルコード】
「test.callback()」とコールバック関数が指定されている場合はどのようにしたらいいのでしょうか?
メソッド部分がない別のjsonpだと問題なかったです。
試したコード↓
function request() {
var element = document.createElement("script");
element.src = URL + "?callback=test.callback";
document.body.appendChild(element);
};
function callback(){
//処理
}
178デフォルトの名無しさん:2014/08/23(土) 22:30:21.91 ID:/2UCS/A1
>>177
ダーメダーメ。それじゃ、誰も意味がわからないよ
や・り・な・お・し・☆
179デフォルトの名無しさん:2014/08/23(土) 23:11:06.16 ID:bduO1+ny
var test = {
callback: function( obj ) {
...
}
}
180デフォルトの名無しさん:2014/08/24(日) 14:43:21.23 ID:v8uo+M6x
javascriptでページが切り替わっても変数を取得し、変わらないまま使うってことできる?
例えばa.htmlの変数Hは100
これがb.htmlでもH=100のまんまで使うことができ、これがH=H-20;で80になっても、80のまんま使えることができる。って感じに
181デフォルトの名無しさん:2014/08/24(日) 15:50:14.84 ID:1q09/hom
>>180
お前ウェブデザイナーか?
182デフォルトの名無しさん:2014/08/24(日) 15:59:55.34 ID:v8uo+M6x
いや 全然
なぜに?
183デフォルトの名無しさん:2014/08/24(日) 16:13:07.22 ID:1q09/hom
ウェブプログラマなら日常的にやってることだからだよ。
184デフォルトの名無しさん:2014/08/24(日) 17:01:08.11 ID:my+G2t5n
>>177
サーバサイド側で出力するJSONPを何とかしないと
185デフォルトの名無しさん:2014/08/24(日) 17:29:13.93 ID:v8uo+M6x
俺初心者、最近やりはじめた
186デフォルトの名無しさん:2014/08/24(日) 19:37:48.18 ID:BWQfj/B3
フラグメント識別子にパラメタを格納すれば良い
187デフォルトの名無しさん:2014/08/24(日) 22:02:31.80 ID:thPtQl+P
ローカルストレージを使用すれば良い
188デフォルトの名無しさん:2014/08/24(日) 23:34:03.10 ID:1q09/hom
セッションを利用すればいい
189デフォルトの名無しさん:2014/08/25(月) 00:49:46.89 ID:LsftW5BC
>>179
ありがとうございます。おかげ様でエラーがなくなりました。

>>184
自分で管理してるサーバーではないので手が出ませんでした。
190デフォルトの名無しさん:2014/08/25(月) 16:39:15.21 ID:wfb9qMEe
<div id="hoge1" class="hage">
<div id="hoge2" class="hage">
<div id="hoge3" class="hage">

$('.hage').on('click', function(event) {
/* ここ */
id = $(this).attr('id')
});
hoge1 = ["hage", "desu"]
hoge2 = ["unko", "desu"]
hoge3 = ["hoge", "desu"]

#hoge2にクリックして、id を取得して、 配列hoge2を表示させたいんだけど、どうすればいいか教えて下さい
/* ここ */ に何を入れればいんだ?

要するに変数の中身を 変数として使いたいんだ...
191デフォルトの名無しさん:2014/08/25(月) 21:01:43.09 ID:g8w4hWLW
hoge1/hoge2/hoge3がグローバルの場合は
alert(window[id])


もうちょい賢くやるなら、
var hash = {
hoge1:['hage',desu],hoge2:['unko',desu],hoge3:['hoge',desu],
};
alert(hash[id]);


要素にあらかじめデータを紐付けるならこう
$("hoge1").data(['hage',desu]);
$("hoge2").data(['unko',desu]);
$("hoge3").data(['hoge',desu]);
$('.hage').on('click', function(event) {
var v = $(this).data();
alert(v);
});


その変数とやらがHTML要素にダイレクトに紐づくデータであれば、こうだな
<div class="hage" data-x='["hage", "desu"]'>
<div class="hage" data-x='["unko", "desu"]'>
<div class="hage" data-x='["hoge", "desu"]'>
$('.hage').on('click', function(event) {
var v = JSON.parse($(this).attr('data-x'));
alert(v);
});

テストしてねーから動かんかもしれんが、大体わかるだろ?
192デフォルトの名無しさん:2014/08/25(月) 21:59:47.32 ID:n+z23UZr
function sample(){
location.replace("history.back()");
}
setTimeout("sample()",100);

これがうまく動かないんだけど
強制的にブラウザバックさせるにはどうしたらいい?
クロームの拡張機能で使ってるんだけど変なURLになる
193デフォルトの名無しさん:2014/08/25(月) 22:31:09.53 ID:SqhGzk91
>>191
すごいな

ありがとう!これを改良してやってみる!
194デフォルトの名無しさん:2014/08/27(水) 18:12:48.49 ID:iz8Mv+tw
クラスに書かれた内容を取得したいのですが
事前に分かるのはnameかidとなります。

<input type="text" id="email" name="email" class="hoge foo bar" value="" />

$("[class=email]").val()とすれば書き込まれた内容は取得できますが
指定id(もしくは) の class を取得するのはどのようにすればよいのでしょうか?
195194:2014/08/27(水) 18:19:57.40 ID:iz8Mv+tw
$("[class=email]").val() ではなく
$("[name=email]").val() です
196デフォルトの名無しさん:2014/08/27(水) 18:33:02.07 ID:9axgMZL2
$("[name=email]").attr("class")
197デフォルトの名無しさん:2014/08/28(木) 12:33:31.85 ID:fcBkEDEW
>>194
$('#もしくは').attr('class')
ライブラリの質問はライブラリスレを推奨する
198デフォルトの名無しさん:2014/08/28(木) 16:42:52.25 ID:gdMWenkD
>>194
> 指定id(もしくは) の class を取得するのはどのようにすればよいのでしょうか?

君が本当に必要な物は、hasClassだと思うよ。
さらに言えばaddClass, removeClass, toggleClass
199デフォルトの名無しさん:2014/08/28(木) 17:23:56.08 ID:JpfrJ9uS
main.html、data.html、data.jsonの3つファイルがあって、main.htmlのリンク1をクリックすると、data.htmlにdata.jsonの任意のデータを表示する、ということがしたいのですが、
任意のデータがn番目のデータだとすると、どうすればn番目を指定できますか?
教えて下さい。
200デフォルトの名無しさん:2014/08/28(木) 18:25:18.34 ID:bOvXNmJa
201デフォルトの名無しさん:2014/08/28(木) 18:47:08.69 ID:wWn8usfQ
jsonでデータ配列を設定
202199:2014/08/28(木) 19:06:38.63 ID:JpfrJ9uS
main.htmlからdata.htmlにnを渡したいのですが、どうしたら良いのでしょうか?
203デフォルトの名無しさん:2014/08/28(木) 20:13:35.82 ID:03VKXSG0
204デフォルトの名無しさん:2014/08/31(日) 14:48:52.52 ID:RBd2gElu
〔A.html〕
<script type="text/javascript">
var val=namae;
window.localStorage.setItem("result", val);
</script>
<form action="B.htm" id="form1" method="post" onsubmit="check()">
<p>名前<br><input type="text" name="namae" id="buttom" size="28" /></p>
<input type="submit" value="送信"/>
</form>

〔B.html〕
<script type="text/javascript">
var val = window.localStorage.getItem("result");
alert(val);
</script>

A.htmlで入力した文字をB.htmlに出るようにしたいのですが、全然出ません。
アラートは表示されるのですが、入力欄に何を打っても、 namae と出てしまいます。変数に何も入ってないようです。
これを〔javascript〕って入力すれば、アラートに〔javascript〕って出るようにしたいのですが、どうしたらよろしいでしょうか?
205デフォルトの名無しさん:2014/09/02(火) 21:30:42.99 ID:PRfBMG1L
名前を入力してボタンを押したら、その入力欄の文字が別のファイルに移るプログラミングを書きたいのですが、みなさんならどう書きますか?
A.htmlからB.html変数を受け渡す。

Aボタンで名前を入力してボタンを押せば、それがB.htmlに反映されるってプログラム
全然思いつかない
206デフォルトの名無しさん:2014/09/02(火) 22:20:28.65 ID:6Bapd3Z+
>>205
GETパラメータ、Cookie、LocalStrage
207デフォルトの名無しさん:2014/09/03(水) 00:21:51.62 ID:/DOsRWjf
もしかしてプッシュ型にしたいのか?
208デフォルトの名無しさん:2014/09/03(水) 03:30:11.53 ID:UVdrfc8f
209デフォルトの名無しさん:2014/09/03(水) 19:22:10.05 ID:00vuLDxp
JavaScript(Greasemonkey)を用いて、ブラウザ操作の自動化を考えています。
具体的には、あるサイト上にあるフォームの自動連続処理で、

 1.予定一覧画面にて、予定日変更ボタンクリック
 ↓
 2.確認画面が表示される 変更しますか?[YES][NO]ボタン
 ↓YES
 3.予定日変更画面が表示される [予定日パラメータForm]
 ↓Submit
 4.予定一覧画面表示

上記1.を手動で行うと、2,3,を裏で行い、予定日を1日後に変更し、
4.の画面が表示される。というのをやりたいです。

XMLHttpRequestを用いれば、
HTTPリクエストをPOST送信でき、その結果も受信可能だと知りました。
上記の事を行いたい場合、
POSTした結果返ってきたオブジェクト(?)に対して、
さらにXMLHttpRequestでPOSTする。という方法で行うのでしょうか?
210デフォルトの名無しさん:2014/09/03(水) 19:24:18.62 ID:V3Pd8bw5
XMLHttpRequestで完了後にコールバックが呼び出されるからその中でまた何かすればいいよ
211デフォルトの名無しさん:2014/09/04(木) 06:36:46.27 ID:oexbo5C6
>>210
ありがとうございます!
212デフォルトの名無しさん:2014/09/07(日) 18:08:19.24 ID:M9JIDHHO
<script type="text/javascript">
function Display(no){
var name = document.getElementById("name").value;
var num=0;
if(name.length < 2){
alert("名前は2字以上でお願いしますだ。")
return false;
}else{
if(num ==0){
document.getElementById("SW1").style.display = "none";
document.getElementById("SW2").style.display = "block";
}
}
</script>
<body>
<div id="SW1">
<p>これはSW1のエリアです。上記SW2をクリックすると消えます。</p>
<form onsubmit="return _submit();">
名前:<input type="text" id="name" name="name" value=""><br>
<input type="submit" value="送信" onclick="Display('no1')"><br>
</div>
<div id="SW2" style="display:none;">
<p>これはSW2のエリアです。上記SW1をクリックすると消えます。</p>
<p>あなたの名前は<script type="text/javascript">+ name + </script>です。</p>
</div>
ボタンを押したら<div id=SW2>の画面に切り替わるようにしたいです。
213デフォルトの名無しさん:2014/09/08(月) 00:15:55.94 ID:WRBqI71e
こちらが本スレですので移動してください

JavaScript ライブラリ総合質問所 vol.4
http://peace.2ch.net/test/read.cgi/hp/1400834117/
214デフォルトの名無しさん:2014/09/12(金) 14:55:18.35 ID:7xpAtKYf
クラスaがあった時に
a.contrastorでコントラスタを呼び出せるのはわかったのですが定義のしかたがわかんないです
215デフォルトの名無しさん:2014/09/12(金) 15:00:39.32 ID:7xpAtKYf
a=new b(tes,test)した時に
bがコントラスタと言うのはわかっているのですが
c++のコントラスタ
aを作った時に自動で実行される関数を作りたいんです
216デフォルトの名無しさん:2014/09/12(金) 16:25:15.52 ID:MW7MLNJg
>>215
さすがに入門書を読めというレベルだが…
function b(tes, test) {
this.tes = tes * test;
}
だよ
関数定義がコンストラクタ定義と兼ている
217デフォルトの名無しさん:2014/09/25(木) 19:42:19.10 ID:T3wVuaxq
入門書以前のレベルで
スレチかもしれないのですが、

<form><input type="button" onclick="history.back()" value="戻る"></form>

って書いたら、ブラウザのJavaScriptをオフにしていた場合
戻るボタンを押しても戻れないんですよね

なのにFirefoxだと戻れてしまうんですけど、なぜでしょう??

<noscript>あいうえお</noscript>ってのも書いたらあいうえおって出てるのに
218デフォルトの名無しさん:2014/09/30(火) 12:32:11.98 ID:MIP/qfgS
angular.jsのui-routerで個別の画面って、index.htmlのviewに表示するか、一段templateの中のviewに表示するのはどちらが良いですか?
219デフォルトの名無しさん:2014/09/30(火) 17:26:29.06 ID:aynenofd
>>218
ライブラリ関連の質問は↓の方がいいかも。ただ、荒らしが酷いので注意。

JavaScript ライブラリ総合質問所 vol.4
http://peace.2ch.net/test/read.cgi/hp/1400834117/
220デフォルトの名無しさん:2014/10/02(木) 04:24:30.72 ID:aXqRJddw
webページ上で入力された内容をサーバー上にある別のtextファイルに書き込み、またはファイルからの読み込み、指定したファイルがなければそのファイル名で生成、
といったようなことはjavascriptのみでは無理でしょうか?
調べてみたところ他の言語を使う方法がありましたが、まだjavascriptでやっと簡単なものを作れるレベルなので、出来ればjavascriptで極力シンプルに作りたいです。
javascriptだけで作る方法を教えてください。よろしくお願いします。
221デフォルトの名無しさん:2014/10/02(木) 05:58:49.56 ID:wF4ofO08
>>220
極力シンプルな方法というのは、適切な技術を適切に使った場合。
君の能力不足に合わせることに意味は無いんだよ。
222デフォルトの名無しさん:2014/10/02(木) 08:12:58.89 ID:NlLaQCXe
>>220
そもそもJavascriptって色々な別のコードに変換されるから、出来ない事はない。
223デフォルトの名無しさん:2014/10/02(木) 08:15:35.18 ID:NlLaQCXe
Node.jsでもUnityでも何でも使えばいい。
224デフォルトの名無しさん:2014/10/02(木) 11:26:17.10 ID:NP5pdjvT
javascriptでようやっとレベルなら
今は諦めろ
225デフォルトの名無しさん:2014/10/02(木) 12:31:22.31 ID:NlLaQCXe
サーバーでNode.jsで全部できる
226デフォルトの名無しさん:2014/10/02(木) 20:43:16.83 ID:bDWPUXnU
Nodeやろなあ
227デフォルトの名無しさん:2014/10/03(金) 13:53:07.94 ID:ups0u7SZ
javascript始めたんだけど開発環境をどうすればいいか全然わかんない
eclipseJSDTいれてみたけど使い方わからなすぎてクソいらいらする
どうすればいいの???
228デフォルトの名無しさん:2014/10/03(金) 14:04:46.18 ID:I4AMywYF
>>227
基本、JavaScriptの開発は、EclipseのようなIDEを使うのではなく、
Notepad++みたいなエディタと、Chromeなどのブラウザについてる
デバッガーを使って開発するんですよ。
229デフォルトの名無しさん:2014/10/03(金) 17:15:48.03 ID:ups0u7SZ
>>228
そうなんだ、ありがとう!!
Notepad++ さっそくインストールしました
230デフォルトの名無しさん:2014/10/03(金) 19:13:29.00 ID:8OTaypIY
何か勘違いしてそう
231デフォルトの名無しさん:2014/10/03(金) 19:17:43.85 ID:ITCnBpTY
業務ではC++builderでWindows向けアプリ作るので必然的にIDE使ってるが、個人でWeb系勉強するときは、Notepad++使っています。

業務でWeb系される人でNetBeansとかEclipseは少ないんですかね?
こういうIDEは、Javaで開発する人が使うもんですかね?

あと、こういうサイトは普通に開発現場で使われてますか?
http://jsbin.com
232デフォルトの名無しさん:2014/10/03(金) 19:25:10.49 ID:3E3drCsQ
>>231
道具なんて自分の完成に合うものを選べガいいだけだと思うんだけどねえ
あなたがいいと思うならそれがベストなんだよ
仕事で使うなら同じ道具を使う事で他人が代替できる環境にする事もあるけどね

http://jsbin.com/ は他人にコードを見せるときに使うことはある
個人的には http://jsfiddle.net/ http://ideone.com/ の方が好きだけど
233232:2014/10/03(金) 19:26:11.87 ID:3E3drCsQ
× 道具なんて自分の完成に合うものを選べガいいだけだと思うんだけどねえ
○ 道具なんて自分の感性に合うものを選べばいいだけだと思うんだけどねえ
234デフォルトの名無しさん:2014/10/03(金) 20:09:32.71 ID:SrjnRVad
そもそもJavascriptってIDEの恩恵を受けづらい言語のよーな
コードスニペットは便利だけど
235デフォルトの名無しさん:2014/10/03(金) 20:17:49.97 ID:ON3UZZIk
もう少ししたらFirefoxにWebIDEがついてくるけどね
ブラウザだけでコーディングまで出来るってのは便利そうだ
236デフォルトの名無しさん:2014/10/04(土) 05:00:47.24 ID:klgp9hPC
寺尾進のTeraPadがいいよ。Win8にも対応している

IEなら、F12を押すと、開発者ツールが立ち上がるけど、
これ、どうやって動的に変数の値を変えるの?

これの使い方は、どこで見れる?

皆ここで、ゲームなどのソースコードを、
MITライセンスで発表している
ttp://jsdo.it
237デフォルトの名無しさん:2014/10/05(日) 12:00:10.83 ID:5m38AlGC
interHTMLが正式対応してないので便利なのにも関わらず使わないで
var new_obj = document.createElement("div");
からappendChildを使って挿入する利点はありますでしょうか?
238デフォルトの名無しさん:2014/10/05(日) 13:43:42.54 ID:XEFXDXfI
>>237
そんな質問をする程度の人なら、jQueryを使うことをおすすめする。
239デフォルトの名無しさん:2014/10/05(日) 14:44:31.37 ID:gifqxLzx
>>93
jQueryの中身はinnerHTMLだらけだから、それこそinnerHTMLを使ったほうがいいと云う事になるな
>>237
inter
240デフォルトの名無しさん:2014/10/05(日) 21:25:46.18 ID:MPbYyzbe
<div><span value="file://C:\hoge\huga"></span></div>
のような要素があるとして
document.querySelector('span[value="file://C:\hoge\huga"]');
としてもマッチしないのですが、\が含まれている場合はどう書けばいいんでしょうか
241デフォルトの名無しさん:2014/10/05(日) 22:23:32.50 ID:1oolnOn0
>>237
- XSSを回避できる
- HTMLエスケープを考慮しなくいい
- appendChild 前からHTML埋め込み型以外でDOMにイベント定義できる
242デフォルトの名無しさん:2014/10/05(日) 22:50:08.80 ID:1oolnOn0
>>240
"\" が ECMAScript と CSS の二重の意味でエスケープされてないから
ただ、そもそも論として span[value] は存在しないので data-* 独自属性を使いましょう
243240:2014/10/06(月) 00:36:55.39 ID:KsFP//XZ
>>242
アドバイス通り二重にエスケープを行ったらマッチしました
レスありがとうございました!
244デフォルトの名無しさん:2014/10/06(月) 00:45:33.49 ID:/YmKtuRb
>>238-239
そういうのは使わないので聞いたのですがinterはミスでした
>>241
色々重要な利点があるんですね、ありがとうございました
245デフォルトの名無しさん:2014/10/07(火) 03:11:07.14 ID:R9YyjIQE
tinymceのテキストエリアにvalue要素(document.getElementById("textareaid").value)
等を使ってタグ付きテキストを挿入すると何も表示されないです。

テキストエリアに挿入するにはtinymce.js等をインポートして
tinymce.activeEditor.setContentとかでやらないとできないのでしょうか?

知っている方ご教示のほど宜しくお願い致します。
246デフォルトの名無しさん:2014/10/07(火) 08:41:40.82 ID:oJl/Y7yL
>>234
逆に言うと、メソッド補完くらいしかないからねぇ・・・・
でも、結局はブラウザのデバッガが必要になるので、IDEじゃ結局
完結しないから、自然とEclipseでやらなくなる。行ったり来たりが
死ぬほど面倒だからね。
247デフォルトの名無しさん:2014/10/07(火) 17:15:10.42 ID:49lCQrlF
JavaScriptっていうか、動的言語全般に当てはまるけど、
補完がうまくできない場面とか多いからね(Factoryメソッド使ったときなど)。
248デフォルトの名無しさん:2014/10/10(金) 21:57:34.10 ID:FDvHlQIs
var value = '';
var count = 0;
for(var i=0; i<102400; i++){
value += 'a';
}
try{
while(true){
localStorage['a'+count] = value;
count++;
}
}catch(e){
console.log(e);
}

localStorageの容量を計ろうとこんな風に書いたんですが
仕様では10MB使えるはずのChrome40で5MB弱程でエラーが出ます
どの辺が間違ってるんでしょうか
249調べたけど挫折しました:2014/10/11(土) 21:03:49.82 ID:lUnfqrWk
document.cookie が undefined になってしまうのですが、原因がわかるかたいますか?

サーバ側でリクエストヘッダにcookieがセットされていることは確認できているのですが、
どうしても javascript の document.cookie が undefind となり、値を取得できません。

javascript の動作確認は firefox 31.0 で、firebug をつかって確認しました。
250デフォルトの名無しさん:2014/10/12(日) 05:09:31.94 ID:VjAnIvwU
javascript超初心者です。

子画面を開いてその表示内容を親画面に転記ですが、子画面は何もいじらずに
出来るでしょうか?。書いたコードは

this.window.name='main_win'
alert(document.getElementsByTagName("body").item(0).getElementsByTagName("p").item(0).firstChild.nodeValue );
var sub_win = window.open('xxx');
sub_win.onload = function()
{
  main_win.focus();
  alert(on_win.document.getElementsByTagName("body").item(0).getElementsByTagName("p").item(0).firstChild.nodeValue );
};

ですがうまくいきません。何が原因でしょうか。因みに
alert(document.getElementsByTagName("body").item(0).getElementsByTagName("p").item(0).firstChild.nodeValue );では
mainのbody部分がアラートされます。

諸先輩方のご指導よろしくお願い致します。
251デフォルトの名無しさん:2014/10/12(日) 05:13:45.47 ID:VjAnIvwU
>>250 です 質問のコードが修正違いでした。正しくは

  alert(on_win.document.getElementsByTagName("body").item(0).getElementsByTagName("p").item(0).firstChild.nodeValue );


  alert(sub_win.document.getElementsByTagName("body").item(0).getElementsByTagName("p").item(0).firstChild.nodeValue );

の修正間違いでした。
252デフォルトの名無しさん:2014/10/12(日) 05:20:01.59 ID:jjrAIsW+
>>250
開くウインドウが外部サイトだったらセキュリティ的にできないよ。
外部のサイトの内容を好き勝手読み取れたら脆弱性になる。
253デフォルトの名無しさん:2014/10/12(日) 07:36:02.20 ID:VjAnIvwU
>>252 質問者ですが、アドバイスありがとうございます。

すでに表示されている内容を読み込むだけなんですが無理なんでしょうか。
なんかできそうな気がして頑張ってたんですが・・・・
254デフォルトの名無しさん:2014/10/12(日) 07:57:14.91 ID:+PnoJWwU
相手はドコだよ
>>252の繰り返しになるがクロスドメイン制限でググってこい
255デフォルトの名無しさん:2014/10/12(日) 08:07:43.30 ID:VjAnIvwU
>>254  ググってきました。
なんか無理っぽいです。ありがとうございました。
256デフォルトの名無しさん:2014/10/12(日) 22:46:23.92 ID:jhTQBpBS
色々試したり調べてたりしても上手くいかないので、
質問させてください。

subWin = window.open("test2.html","sub","width=320,height=240");
subWin.focus();
return false;

のコードでリンクから子ウィンドウを開き、
子ウィンドウからのリンククリックで親ウィンドウのページを移動しフォーカスを移す
というものを作成しています。


window.opener.location.href = "test3.html";
window.opener.focus();

子ウィンドウでのコードで、こちらのコードではFirefoxやChromeで動作しなかったため、
親ウィンドウにwindow.name="main"で名前をつけた上で子ウィンドウで

function mainW2(){
 mainWin = window.open("test3.html","main");
 mainWin.focus();
}

とすることで動作するようになったのですが、
IE11ではどちらのコードも上手く動作しませんでした。
(mainWのコードではページ移動のみ動作してフォーカスが移らず、
mainW2のコードでは別ウィンドウが開いてしまいます)。
IE11で動作させる方法はありますでしょうか。
IE10以前ではまだ試しておりませんが、そちらでも動作すると大変助かります。

お分かりの方がおられましたら、ご教授お願いいたします。
257デフォルトの名無しさん:2014/10/12(日) 22:49:07.15 ID:jhTQBpBS
改行数で書き込みエラーになったため文章を削った際、
mainWのfunctionの箇所を消してしまいました。
申し訳ありません。

mainWとしているのは
 window.opener.location.href = "test3.html";
 window.opener.focus();
のコードです。
258デフォルトの名無しさん:2014/10/17(金) 20:39:46.15 ID:GOPRB/Wa
wshのjsはここでいいのかな?
259デフォルトの名無しさん:2014/10/17(金) 22:27:22.73 ID:r8smNGCB
ダメな理由もないというか
>>2にある前スレのURLを見れば分かる通り
ここって本来は馬鹿が自らを隔離するために立てたセルフ隔離スレだからな
ただまあ、大抵の質問はVBSのそれに変換できそうだしそっちのスレのが人多そうだけど
260デフォルトの名無しさん:2014/10/18(土) 00:13:28.51 ID:eTdnAi9J
一応、こんなスレもある

お前ら、wsh使ってますか? Part8
http://peace.2ch.net/test/read.cgi/win/1292764835/
261デフォルトの名無しさん:2014/10/18(土) 00:28:48.02 ID:5eObO2aR
ありがとう
262デフォルトの名無しさん:2014/10/18(土) 18:53:04.10 ID:JkGB9183
質問があれば書いとけばいいよ。元スレは常に荒らされてる状態なんで避難所的に使えばいい
263デフォルトの名無しさん:2014/10/18(土) 23:29:14.93 ID:IVJhL/Ea
当人こっちも見てるからそういう事書くとまた荒らしに来るで
264デフォルトの名無しさん:2014/11/16(日) 08:24:42.85 ID:6fSDCePz
お初です。よろしくお願いします。
さっそく質問です。

function simulateClick(x, y) {jQuery(document.elementFromPoint(x, y)).click();}simulateClick(%.1f, %.1f);

で普通のサイト(Appleとか)はタップできるのですが、
もぐらたたきゲームではタップできません。
view-source:http://androidiphonewebapps.com/whackamole/

これはなぜでしょうか?
また、解決策がございましたらご教示宜しくお願い致します。
265デフォルトの名無しさん:2014/11/16(日) 09:21:08.57 ID:L7zXX2la
jQueryが読み込まれてないから
266デフォルトの名無しさん:2014/11/16(日) 09:50:57.54 ID:6fSDCePz
>>265
レスありがとうございます。
すみませんJQueryはすでに読み込んであります。
@"var script = document.createElement('script');"
@"script.src='http://code.jquery.com/mobile/latest/jquery.mobile.js';"
@"script.type='text/javascript';"
@"document.getElementsByTagName('head').item(0).appendChild(script);";
267デフォルトの名無しさん:2014/11/18(火) 11:29:56.57 ID:wj9FqB0Z
545 名称未設定 Mail:sage 2014/11/16(日) 23:29:55.25
ID:IDhAh8f80
スレ違いではないと思うので質問させてください。

↓このサイトのゲームで、ゲームウィンドウ内でJQueryを使ってシミュレートクリックしようとしました。
http://dan-ball.jp/m/treasure/

しかし、まったくクリックできません。
それどころかタップした位置の座標はゲームウィンドウの外ならログが出力されるのですが、
ゲームウィンドウ内ではまったく取得できません。

ちなみに「{jQuery(document.elementFromPoint(x, y)).click()」のコードをUIWebViewで使っています。
もしかしたらゲームウィンドウ内のオブジェクトは「document」ではないと推測したのですが、
実際なぜクリックもログ出力もできないのでしょうか?
解決方法が存在しましたら、ぜひご教示宜しくお願い致します。
268デフォルトの名無しさん:2014/11/18(火) 12:24:27.42 ID:zUXjso5N
>>267
>1の(9)
269デフォルトの名無しさん:2014/11/18(火) 14:20:10.83 ID:lHZFMl5+
スレ主キター
270デフォルトの名無しさん:2014/11/29(土) 17:36:50.21 ID:RCsHyp/w
$.ajax({
type: post,
url:"hogehoge.php",
data:…
}
にするとうまくいくのに

$.post({
url:"hogehoge.php",
  data…
})

にすると、urlがなぜか認識せずに送信エラーになる理由を教えて下さい
271デフォルトの名無しさん:2014/11/29(土) 17:46:17.69 ID:SoXvwZNw
$.ajax({
type: post,
url:"hogehoge.php",
data:…
}
にするとうまくいくのに

$.post("hogehoge.php",data,callback)
272デフォルトの名無しさん:2014/11/29(土) 18:12:22.10 ID:RCsHyp/w
>>271
ありがとうございます。callback必須なんですね…
273デフォルトの名無しさん:2014/11/29(土) 19:18:25.31 ID:SoXvwZNw
いや
callbackの問題じゃなくて
引数にオブジェクト渡したら駄目
274デフォルトの名無しさん:2014/12/01(月) 13:42:31.92 ID:+gBwQwsT
関数名を変数で付ける方法ってないですか?
x = "me";

function na+x() {}
↓こんな感じになる
function name() {}

もしくは関数名を後で変更する方法はないでしょうか?
275デフォルトの名無しさん:2014/12/01(月) 13:50:52.91 ID:GrWyVyTu
オブジェクトのメソッドなら可能
276デフォルトの名無しさん:2014/12/01(月) 13:54:20.61 ID:iu+0lcnQ
this['sample']=function() { console.log("called."); };

sample();
277デフォルトの名無しさん:2014/12/01(月) 14:02:35.85 ID:HkmefIKQ
x = 'me';
window['na'+x] = function(){ alert('hoghoge'); };
name();
278デフォルトの名無しさん:2014/12/01(月) 14:13:57.55 ID:HkmefIKQ
var hoge = new Date((new Date()).toISOString());
var fuga = Date.parse((new Date()).toISOString());

この辺がエラーになるのが気持ち割るいお
279デフォルトの名無しさん:2014/12/01(月) 15:16:31.35 ID:jmgYnWyX
同じ板でマルチポスト速めてくれ
280デフォルトの名無しさん:2014/12/01(月) 15:23:44.73 ID:k/0vFpdT
一般論だけど javascript は他の言語と比べても this がどこ差してるか判り難い
281デフォルトの名無しさん:2014/12/01(月) 16:21:10.57 ID:QUWqwFWm
thisは一般的にはクラスのメソッドにしかスコープ内にない
JavaScriptはただの関数なのに節操無くthisにアクセスできるから混乱する
しかしコールバックに登録する時に威力を発揮するから良し悪しだな
282デフォルトの名無しさん:2014/12/01(月) 18:00:23.04 ID:iu+0lcnQ
グローバルオブジェクトがWindowで作った関数がそれに属してしまうってのが
なんとなく気持ち悪いっていうかスッキリしない部分ではあるな。

コンソールで動かしたnode.jsだとここは何になるんだろう?
283デフォルトの名無しさん:2014/12/01(月) 18:14:37.73 ID:k/0vFpdT
仕様があらゆるところでぐちゃぐちゃ
284デフォルトの名無しさん:2014/12/01(月) 18:20:31.68 ID:QUWqwFWm
>>282
いやいや、"use strict";すればundefinedになるよ
285デフォルトの名無しさん:2014/12/01(月) 20:33:40.31 ID:pmQ3LQ8v
毎回this気にするくらいなら、狙ったとこのthisを保存しとけばいいだけだしなー
286デフォルトの名無しさん:2014/12/01(月) 21:19:00.56 ID:t5g/utlf
thisが何を指すかは仕様を理解してれば嵌まらない。まず仕様を理解することだな。
thisを固定する方法も用意されているし、こんな所で嵌まるのはまだ未熟だと自覚しよう。
287デフォルトの名無しさん:2014/12/01(月) 23:16:57.75 ID:8qnlnKRu
>>286
thisは呼び出し側で何にでも設定出来るから、仕様通りに設定されてない可能性もある
まずはライブラリのドキュメントなりを確認するのが先だな
288デフォルトの名無しさん:2014/12/01(月) 23:37:10.98 ID:igK83AmZ
>>274
変数名(プロパティ名)の変更は出来ても関数名の変更は出来ない
>276-277も変数名を変更しているだけで関数名は無名関数のまま変化していない
289デフォルトの名無しさん:2014/12/01(月) 23:42:26.88 ID:1q4y0wNU
>>287
「ライブラリの仕様」を確認するという意味で仕様を確認するスタンスは間違ってないと思うが
ライブラリのコードを読めばES仕様通りに書かれているはず
仕様を順に追っていけば「仕様通りにされていない」という状況は実装バグor未実装以外にあり得ない
290デフォルトの名無しさん:2014/12/02(火) 00:35:15.01 ID:vQAvR2Wb
>>289
methodA.call(thisArg, [, arg1 [, arg2, ...]]);

function hoge(a) {
console.log(this);
}
// 仕様通りだけどthisを改変
hoge.call('hage', 0); // => { '0': 'h', '1': 'a', '2': 'g', '3': 'e' }

これは極端な例だけど変なオブジェクトが渡されてるよ
ライブラリによってはたまに予想外のオブジェクトが渡されてくる事があるし
291デフォルトの名無しさん:2014/12/02(火) 01:26:05.65 ID:s5qqMC1F
>>290
それは Function.prototype.call の仕様通りの挙動だろう?
292デフォルトの名無しさん:2014/12/02(火) 02:53:16.90 ID:DiCVCb8O
>>276-277
ありがとうございました。
関数名を変数で指定出来ました。
293デフォルトの名無しさん:2014/12/02(火) 03:15:02.67 ID:MjRXeq65
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
初心者の JavaScript プログラマーがよくやる間違いは、
あるオブジェクトからメソッドを取り出し、後でその関数を呼び出すとき、
その内側の this 値が元のオブジェクトになると考えてしまうことです
(例えば、そのメソッドをコールバック関数に使うケース)。
特に配慮しなければ、元のオブジェクトは失われてしまいます
【訳注: 取り出した関数内の this としては使えなくなる】。
その関数に元々のオブジェクトを bind() して束縛された関数を生成すれば、
この問題をきちんと解決することができます:

var x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};

module.getX(); // 81

var getX = module.getX;
getX(); // 9, この場合 "this" はグローバルオブジェクトを参照するため

// 'this' を module に結びつけた新しい関数を生成
var boundGetX = getX.bind(module);
boundGetX(); // 81
294デフォルトの名無しさん:2014/12/02(火) 03:33:53.66 ID:MjRXeq65
arguments.callee.caller を thisArg に渡して call
295デフォルトの名無しさん:2014/12/02(火) 03:38:17.42 ID:DiCVCb8O
でもさ、ぶっちゃけみんなbind使わないよねw
たいていはthisをselfだとかthatだといった名前の変数に入れて使う
そっちの方が短くてわかりやすくなることが多いから。
296デフォルトの名無しさん:2014/12/02(火) 04:07:01.23 ID:MjRXeq65
非標準は避けたかったという理由もあるんじゃね
297デフォルトの名無しさん:2014/12/02(火) 06:45:39.49 ID:ex7NOBkZ
>>280
fuga.hoge(...);
huga.hage(...);



hoge.call(fuga, ...);
hage.apply(huga, [...]);

になってるだけで
this が fuga だったり huga だったりすることだけ覚えておくと迷わない

確かにコンテキストで指してる場所(使われ方)が違うように見えるから
いくつも種類があるように見えて混乱するけど this はあくまで一種類しかない
298デフォルトの名無しさん:2014/12/02(火) 07:42:49.36 ID:XkN7RMp1
>>294
arguments.callee.caller は使用禁止
299デフォルトの名無しさん:2014/12/02(火) 07:45:19.36 ID:XkN7RMp1
>>295
javascript の場合は .bind() 使った方が判り易くなると思う
300デフォルトの名無しさん:2014/12/02(火) 10:09:10.14 ID:rMxfNJF9
>>295
addEventListener に listener を渡すときに this 値の変更を阻止する為に Function.prototype.bind を使うことはある(一つだけなら handleEvent で済ます事も多いが)
多くの場合、bind の方がコードがシンプルになる
変数束縛はクロージャを一つ以上発生させる上に関数の位置が下位スコープに限定されるから扱いづらい
また、bind を使わない理由は bind を使えない実装が対象ブラウザに入っている場合に限定される
301デフォルトの名無しさん:2014/12/02(火) 11:29:00.91 ID:wR4R/N09
bindはES5の標準だしpollyfillで対応出来るもんだから積極的に使うべきだな
302デフォルトの名無しさん:2014/12/02(火) 11:51:08.42 ID:rMxfNJF9
>>301
> bindはES5の標準だしpollyfillで対応出来るもんだから
Function.prototype.bind のpollyfillを書く場合は「第2引数以降の可変引数」に対応する術がないと思っていたが、実現できたのか
http://constellation.hatenablog.com/entry/20110113/1294846327
是非とも実装コードを教えて頂きたく
303デフォルトの名無しさん:2014/12/02(火) 12:22:21.98 ID:wR4R/N09
>>302
polyfillは完全な実装ではない事を意味している
何突っかかってんの?
コンストラクタをbindなんて普通しないから無問題
304デフォルトの名無しさん:2014/12/02(火) 12:34:02.21 ID:pkvOluFr
http://dqn.sakusakutto.jp/2012/05/javascript_bind_this_callback_method.html
MDN(MOZILLA DEVELOPER NETWORK)から借りてくる
MDNのbindのページ に Function.prototype.bind のJS実装があります。
これを借りてくればよいでしょう。
305デフォルトの名無しさん:2014/12/02(火) 12:37:37.35 ID:wR4R/N09
>>302が言ってんのはそのサイトで問題になってるコンストラクタをbindした時の事じゃなくて
可変個引数の事か?
それは普通のpolyfillで問題ないがな
306デフォルトの名無しさん:2014/12/02(火) 12:48:18.92 ID:rMxfNJF9
>>303
あなたの文言から疑問に思った点を質問しただけでなぜ攻撃的になるんだ?
純粋に教えてもらいたかっただけなのだが

> polyfillは完全な実装ではない事を意味している
polyfillに不完全性を保証する意図はないぞ
Array.isArray のように完全な互換性を持つコードも存在するからな
完全性、不完全性は仕様上の制約に依存する

> コンストラクタをbindなんて普通しないから無問題
あなたはそう思うのだろうが、制限付きなら明言しておくべきだと私は思うがね
どこまで互換性があるか知らずにpolyfillを使う人もいるのだろうし、私のように互換コードを実現できると誤読して探し回って徒労に終わる人もいるだろう
307デフォルトの名無しさん:2014/12/02(火) 13:25:04.06 ID:eJtypcMS
自己責任ω
308デフォルトの名無しさん:2014/12/02(火) 13:27:53.03 ID:OQmm7jB2
jQueryにはbindに相当するものとして、$.proxyっていうのが有るのだけれど、
なんでbindがproxyという名前なのか昔から疑問だった。
prototypejsではbindという名前なのに。

最近その謎が解けた。それは変数にthisを代入すればいいから
bindは不要であるという話にもつながっていて、

例えば、>>293みたいなものは、bindで渡すべきじゃない。
なぜなら、getXは普通に考えると自分自身のxを返すという仕様であり、
外部から指定されるべきものじゃないから。

そして外部から指定するもの。例えばあるクラスにイベントハンドラを
設定するみたいなコード。そのイベントハンドラに匿名関数を渡すのではなく、
別のオブジェクトの関数を渡す時に、$.proxyを使ってオブジェクトをバインドする。
(普通は関数だけじゃなくてオブジェクトも指定する必要があるから)

バインドしたい時というのは、このように別のオブジェクトの関数への
プロキシとして使うことがほとんどだから$.proxyという名前なんだ。
309デフォルトの名無しさん:2014/12/02(火) 13:34:01.31 ID:OQmm7jB2
少し言い換えると、

「bindがthisを結びつけた新しい関数を生成」までが仕事の範囲なのに対して
「proxyはthisを結びつけた関数に処理を移譲」までが仕事の範囲というニュアンス
310デフォルトの名無しさん:2014/12/02(火) 14:02:04.50 ID:eJtypcMS
311デフォルトの名無しさん:2014/12/02(火) 16:44:42.18 ID:i4W6wjQa
312デフォルトの名無しさん:2014/12/02(火) 16:48:20.21 ID:VNjwMjdE
GCが始まるたびに黒煙が・・・
313デフォルトの名無しさん:2014/12/02(火) 17:26:57.84 ID:m1IYGp51
>>311
JavaとJavaScriptは別物
314デフォルトの名無しさん:2014/12/02(火) 17:45:28.83 ID:eJtypcMS
乗りたくない
315デフォルトの名無しさん:2014/12/02(火) 19:46:36.36 ID:OQmm7jB2
そういや、昔のブラウザ(IE5あたり?)はcallもapplyもなかったんだよな。
その時代にクロスブラウザやってたから、callとapply相当を
独自実装したことがあるよ。

どうやって実装したか、考えてみると面白いかもしれないね。
316デフォルトの名無しさん:2014/12/03(水) 09:12:09.24 ID:uc/zSG8G
なにこのあらゆるBINDはクソみたいな流れw
317デフォルトの名無しさん:2014/12/03(水) 23:07:57.08 ID:Re3JbBDI
javascriptの勉強を始めて一週間足らずの初心者ですが、
jQueryでdom要素を生成し、それをiframeに表示するようなことは
可能でしょうか?
318デフォルトの名無しさん:2014/12/03(水) 23:47:17.49 ID:aLevP0Sw
加納
319デフォルトの名無しさん:2014/12/04(木) 01:33:01.93 ID:n+EVWWd6
姉妹
320デフォルトの名無しさん:2014/12/04(木) 08:16:30.63 ID:wTkc/yZH
>>317
そもそも、iframeにする必要性がない。

DOMの前に、HTMLの基本知識くらいまず頭に叩きこむべきだね。
321デフォルトの名無しさん:2014/12/04(木) 09:13:34.05 ID:h6SE1fzu
>>316
可能。

>>320
iframeには面白い特徴があってね。
親のCSSがiframe内には適用されない(その逆も)
という特徴がある。

こういう風にウインドウが隔離されているような
感じになる。サンドボックスといって通じるかな?

で、実はHTML5にはiframeにまさにsandboxという属性が追加された。

インラインフレーム内のコンテンツにセキュリティ上の
制限をかけるためのものだが、単なる別ページ読み込みの機能が
サンドボックスとして使われるようになったんだよ。

フレームは廃止されたが、iframeが廃止されないのには理由がある。
322デフォルトの名無しさん:2014/12/04(木) 09:43:37.32 ID:+lx9FGK4
最新版Chromeでモーダルダイアログを表示したいのですが
JQueryを使わずに実装するよい方法はありませんか?
323デフォルトの名無しさん:2014/12/04(木) 11:08:03.39 ID:JHaQsaKb
>>316
bindどころか、call, applyまでディスってる人がいるようだけど、一人だけだよね
「外部から指定されるべきものじゃないから」とか、その論理はどこから出てきたんだって感じ
jQuery のメソッド名が proxy なのは既存の jQuery#bind と混同しないための配慮だと思う
jQuery内部でもcall使ってるし、forEach, sliceをcallでthisArg変更するテクニックはよく使われるし、thisArgの変数束縛に拘る理由が破綻してる
324デフォルトの名無しさん:2014/12/04(木) 11:26:46.97 ID:cBJFU+2f
>>306
あんた生きづらそうだなあ
その要領の悪さだと、さぞ
おっとやめとこう
325デフォルトの名無しさん:2014/12/04(木) 21:00:20.54 ID:tYdcY83W
>>324
お前は性格悪そうだな。
人からよく反感買ってるでしょ。
そのレスの内容から、よくわかるよw
326デフォルトの名無しさん:2014/12/04(木) 21:01:07.21 ID:tYdcY83W
>>323
よくみれ。call、applyをディスっている人は
どこにもいない。
327デフォルトの名無しさん:2014/12/04(木) 22:18:56.56 ID:osyonMf1
>>326
「外部から指定されるべきものじゃないから」ってcall,applyは許容してbindだけNGなの?
今一、理屈がわからない
328デフォルトの名無しさん:2014/12/04(木) 22:20:52.67 ID:tYdcY83W
call、applyは関数をじっこうしてる。
bindは関数を実行しない。

違い分かった? OK?
329デフォルトの名無しさん:2014/12/04(木) 22:39:54.08 ID:osyonMf1
>>328
そのぐらい知ってるから
どちらも外部から変更してるでしょ?
callを許容するならbindを禁止する理由がないよね
330デフォルトの名無しさん:2014/12/04(木) 23:26:08.87 ID:tYdcY83W
bind禁止? 誰が?
一体誰にレスしてるのさ。
ちょっとアンカーつけてみな。
331デフォルトの名無しさん:2014/12/05(金) 00:53:39.93 ID:lxRVtaYn
332デフォルトの名無しさん:2014/12/05(金) 05:40:21.58 ID:rX/gvri9
>>317-321
iframe内は、スクロールしないと全部見えないから、
視認性が悪く、操作が面倒

アコーディオンのようにクリックしたら、
中の文章が表示されるなら、操作は楽
(ただし、画像などはうまく表示されるかどうか、知らないけど)

ただ、jQueryで実装するのが難しいから、
HTMLタグだけで使える、iframeを使うのだろう
333デフォルトの名無しさん:2014/12/05(金) 07:43:27.17 ID:ViNbqhcv
>>331
その文章の中から、bind禁止している所に
^^^^を引きなさい
334デフォルトの名無しさん:2014/12/05(金) 07:45:58.79 ID:ViNbqhcv
>>332
> iframe内は、スクロールしないと全部見えないから、
スクロールしなくても見えるようにサイズ広げればいいだろ?

だいたいウインドウであっても、縦に長いと
スクロールしないと全部見えないんだが?

全部見えないからなんなの?
335デフォルトの名無しさん:2014/12/05(金) 07:46:50.83 ID:ViNbqhcv
>>332
> (ただし、画像などはうまく表示されるかどうか、知らないけど)
普通に考えればうまく表示されるだw

> ただ、jQueryで実装するのが難しいから、
簡単だろw

お前、実はレベル低いだろw
336デフォルトの名無しさん:2014/12/05(金) 07:50:03.86 ID:uibbdYqE
>>331
jQuery が bind 禁止している(してないけど)ように見えるのは
bind が jQuery 上の別の意味の bind と名前が被ってるから
別に native な javascript の bind を禁止している訳ではない
337デフォルトの名無しさん:2014/12/05(金) 08:18:20.31 ID:+TXyzC2W
そしてbindがproxyという名前になっているのは、
通常bindしただけで終わることはなく、
関数呼び出しまで伴うから。

call、applyともに関数を呼び出す(または適用する)
bindだけだとthisをbindするだけの意味で終わるけど
proxyならある関数に処理を転送するという意味になる。

より適切な名前であるという話。
338デフォルトの名無しさん:2014/12/05(金) 08:21:33.54 ID:+TXyzC2W
>>308が言っているのは、

> 例えば、>>293みたいなものは、bindで渡すべきじゃない。

>>293みたいなものの話。bind全部を禁止などとは言っていない。
オブジェクトのメソッドが(意味的に)自分自身を参照したいならば
それは外部からもらうのではなく、変数に持っておけという話。
339デフォルトの名無しさん:2014/12/05(金) 09:22:22.61 ID:NyP973bT
>>337
bind が関数呼び出しまでしてしまうなら callback として渡せないだろ
かえって迷惑だしそもそも call/apply で充分って話になってしまう
340デフォルトの名無しさん:2014/12/05(金) 11:30:16.33 ID:yozkxrw8
>>331
その話は「bind禁止」じゃなくね

・大概の場面はbindじゃなくても出来る
・残りの限られた場面を表すものとしては、proxyのがしっくりくる

という話にしか読めんな
341デフォルトの名無しさん:2014/12/05(金) 11:35:27.03 ID:S74tDLHo
jQuery スレじゃなくて JavaScript スレだから仕方ない
342デフォルトの名無しさん:2014/12/05(金) 13:52:26.89 ID:I0a9lIBJ
>>336
jQuery.prototype.bind が既にあるからという意味だよね
その方が説明としてしっくりくるし、まだ理解できる
http://api.jquery.com/bind/

>>337
jQuery.prototype.bind も jQuery.proxy も関数呼び出しなどしない

>>338
> それは外部からもらうのではなく、変数に持っておけという話。
>>293に関していえば、初めから getX に変数束縛してるよね
これは変数名が適切でないというだけだと思うんだけどな

var getXFromModule = getX.bind(module); // この名前なら適切

わざわざ変数束縛する手間を作っているということは、module を参照できないスコープで getX を参照したいから
module をそのまま渡せば勿論、解決するけど、参照範囲を広げたくないケースもある
その場合に Function.prototype.bind は有効となる

>>340
改めて読むと「bind禁止」は言いすぎだった、すまん
ただ、>>308が主張しているイベントハンドラ関数に指定するケースでは bind でも有効だし、proxy が適切って理屈は理解できないね
jQuery.proxy は new 演算子に対応してないし、関数がオーバーロードされてるし、多くの特性が bind とはかけ離れてる
別種の機能だから、bind という名前にしなかったのは理解できるけどね
http://api.jquery.com/jquery.proxy/
343デフォルトの名無しさん:2014/12/05(金) 14:06:15.50 ID:LEC5N9e7
なんかbindで盛り上がってるけど、>>293はおかしな突っ込みどころなんて全く無く至って正論
> var getXFromModule = getX.bind(module); // この名前なら適切
いやいや、>>293
> var boundGetX = getX.bind(module);
で全く問題ないじゃん

他の変数(selfなど)にオブジェクトを代入しといて使うとか言ってる奴が居るが
>>293
> getX: function() { return this.x; }
のthis.xをself.xとかに書き換える無意味な変更が生じる
bindを使う使わないなんて議論する余地なんてない
344デフォルトの名無しさん:2014/12/05(金) 14:41:34.64 ID:I0a9lIBJ
>>343
boundGetX は直訳すると「縛られたGetX」だけど、何に bind されてるか、わかりずらいかなーと思った

var boundGetX = getX.bind(module),
var boundGetX = getX.bind(hoge);

どちらも boundGetX で意味は通るけど、何にbindされてるかわからない
>>308の「getXは普通に考えると自分自身のxを返すという仕様であり」あたりは対象が不明だからそう思うのであって、module という対象が明確であればなんら問題はない
345344:2014/12/05(金) 14:43:24.41 ID:I0a9lIBJ
些事だけど訂正しておく
× わかりずらい
○ わかりづらい
346デフォルトの名無しさん:2014/12/05(金) 15:02:00.85 ID:LEC5N9e7
>>344
まぁ無理やり変数に代入しようとするからだな
element.addEventListener('mousedown', module.getX.bind(module), false);
とか
module内で
element.addEventListener('mousedown', this.getX.bind(this), false);
とか、毎回bindすれば分かりやすい
347デフォルトの名無しさん:2014/12/05(金) 15:21:34.22 ID:v8ZX4BwT
よばれた関数側で
this がどのインスタンス指してるかは
どうやって調べるのが簡単?
348デフォルトの名無しさん:2014/12/05(金) 16:00:18.92 ID:I0a9lIBJ
>>346
そうだね
実際には変数束縛が不要なケースが多い

>>347
instanceof 演算子
https://developer.mozilla.org/ja/docs/JavaScript/Reference/Operators/instanceof
349デフォルトの名無しさん:2014/12/05(金) 17:44:54.24 ID:yozkxrw8
>>343
>他の変数(selfなど)にオブジェクトを代入しといて使うとか言ってる奴が居るが
>>293
>> getX: function() { return this.x; }
>のthis.xをself.xとかに書き換える無意味な変更が生じる

そう言うタイプは初めからself作っちゃうから
むしろ「thisに書き換えるほうが無意味」と取っちゃうと思うよ
350デフォルトの名無しさん:2014/12/05(金) 20:57:15.97 ID:+TXyzC2W
>>293
は明らかにおかしいだろ。

var x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};

module.getX() は明らかにmoduleの中の
81を返すように設計されたと考えるべきだ。

よっぽどひねくれた人じゃない限り、module.getXというのは
module以外の渡されたオブジェクトの
xを変えすためのメソッドなんですなんて物は作らない。

内部の処理は隠ぺいするべきものなのだから、内部の処理で必要な
オブジェクトは内部で管理するべきもの。

var x = 9;
var module = Module(); // new Module() で作成するという設計もあり
module.getX();

こういう使い方をするのが普通のやり方。
いちいちbindして呼び出すなんてありえない。
351デフォルトの名無しさん:2014/12/05(金) 21:05:40.18 ID:+TXyzC2W
jQueryのproxyの話をすると、これはproxyした関数を
自分で呼び出すって使い方は普通はしないんだよ。

つまりな、

var bindedFunc = $.proxy(func, obj);
bindedFunc();

こういう使い方はしない。まさに>>293の最後の行の使い方だよな。
これはbindという名前の発想をしているからそうなる。


$.proxyはそうではなくて

$('span').on('click', $.proxy(defaultClickHandler, handlerCollection))

こういう使い方をする。

ハンドラコレクションに定義された、デフォルトのクリックハンドラに
処理を移譲(Proxy)するというわけだ。
352デフォルトの名無しさん:2014/12/05(金) 21:34:03.09 ID:SCmG7oOu
ド素人の質問で申し訳無いんだけど
Class名の指定をして文字の色を変更するスクリプトを
FirefoxアドオンのGreasemonkeyで作っています。

下記のような書き方をしてるんだけど
どうもうまく文字色が変わってくれない。

【環境】Win7 64bit SP2 Firefox 28.0
【何をしたのか】
Yahooトップページ(http://www.yahoo.co.jp/)のニューストピックスの文字色を変えたい
var topix = document.getElementsByClassName('topicsindex');
topix.style.color = "#ff0000";
【期待する結果】トピックス内のすべての文字の色を変更したい。
353デフォルトの名無しさん:2014/12/05(金) 22:11:19.80 ID:I0a9lIBJ
>>352
> topix.style.color = "#ff0000";
NodeList なんだからindexを指定して要素に適用する必要があるね
この場合は insertRule で '.topicsindex { color: #ff0000; }' を追加した方がスマートだけどね
https://developer.mozilla.org/ja/docs/Web/API/CSSStyleSheet.insertRule
354デフォルトの名無しさん:2014/12/05(金) 22:34:47.47 ID:SCmG7oOu
>>353
ありがとうございました。
URLを参考にがんばってみます。
355デフォルトの名無しさん:2014/12/06(土) 12:45:18.25 ID:ditJFM/1
>>293>>342-348の指摘している変数名以外は問題なさそうだな

proxyで思い出したんだが、ES6 で Proxy が定義されるな
まださわりしか理解してないが、Array likeなオブジェクトを生成できると聞いてわくわくしてる
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-proxy-object-internal-methods-and-internal-slots
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
356デフォルトの名無しさん:2014/12/06(土) 13:09:03.91 ID:NZaVAnvh
> >>293>>342-348の指摘している変数名以外は問題なさそうだな

いらないですよ。何の説明もしてないレスは。
言い返していることに成りませんから。
357デフォルトの名無しさん:2014/12/06(土) 13:21:37.33 ID:ditJFM/1
>>356
おまえは誰と戦っているんだ?
言い返すも何もただ感想をいっただけ
おまえと議論する気は毛頭ないし、おまえがどのレスをしたのかも知らん
358デフォルトの名無しさん:2014/12/06(土) 13:33:23.46 ID:NZaVAnvh
議論? 俺は個人の感想を言っただけじゃ
何の意味もないって話をしているだけ。

>>293は問題がありまくりだな。

はい、これは私個人の感想ですよ?

>>293は問題がありまくりなのは確定です。
359デフォルトの名無しさん:2014/12/06(土) 13:47:19.19 ID:ditJFM/1
>>358
おまえが「言い返していること(>>356)」といったから議論する気はないと反論したんだよ
感想なんだから言い返すも何もないだろ

ひょっとして「言い返すこと」がおまえの中の「感想」なのか?
日本語を勉強してから出直して来い
360デフォルトの名無しさん:2014/12/06(土) 15:26:04.96 ID:NZaVAnvh
>>359ってうざいやつだな。
実社会でもうざいって言われる
孤独なニートだな。
361デフォルトの名無しさん:2014/12/06(土) 18:02:23.50 ID:IKtM9ymw
人格批判に陥るのがあまりにも惨めすぎて笑ってしまった
362デフォルトの名無しさん:2014/12/06(土) 20:42:44.31 ID:tiI0E0x4
Ajaxで自分で自分のページを呼び出す時にprint $変数とすると、printだけでなく、ここでは
呼び出さなくてもいいのに、html構文まで一緒にそのまま呼び出されてしまいます。

visibility hiddenにするとhtmlは表示されなくなるんですが、最初の入力フォームまで
表示されなくなってしまいます

最初の入力フォームは表示されたままで、自分のページを呼びだし、phpだけを動かして
変数をコールする方法はないでしょうか?
363デフォルトの名無しさん:2014/12/06(土) 22:11:45.06 ID:awpbdwOM
これはエスパー検定2級の試験問題からの抜粋です
この設問を読んだときの回答者の気持ちを30文字で答えよ (10点)
364デフォルトの名無しさん:2014/12/06(土) 23:05:38.23 ID:qojZV/3B
>>293は問題がありまくりなのは確定です。  (23文字ぐらい)
365デフォルトの名無しさん:2014/12/06(土) 23:26:48.90 ID:ditJFM/1
>>362
Ajaxなのだから自身を呼び出すにしてもHTMLをそのまま呼び出す必要はないだろう
PHP側でGETパラメータ判定する等して出力を変更すればいい
366デフォルトの名無しさん:2014/12/06(土) 23:35:51.06 ID:katyEhxk
自分の考えや直面している問題を整理し人にわかりやすく伝える事こそ
今の>>362の至上命題といえよう
367デフォルトの名無しさん:2014/12/08(月) 12:08:56.06 ID:3mx+HWhx
>>350
何も分かってなくて失笑w
bindは>>346のようなコールバックに登録する時に必要で>>293はその事を言っている
368デフォルトの名無しさん:2014/12/08(月) 13:25:02.71 ID:uRv2wrgF
質問です
http://qiita.com/soundTricker/items/5f542faf5f2a06bc3091
ここのサイトの「インスタンス作る版の例」みたいに

(function(global){
 var SitesUtil = (function() {
  function SitesUtil(site){
   this.site = site;
  }
  SitesUtil.prototype.getTemplateByName = function(templateName) {
(略)
  };
  return SitesUtil;
 })();
 global.SitesUtil = SitesUtil;
})(this);

と書いてる例を (CoffeeScript が吐いた js とかでも) 良く見かけますが
最初と最後の

(function(global){

 global.SitesUtil = SitesUtil;
})(this);

は無駄じゃないでしょうか?
なぜこう書くのでしょう?
369デフォルトの名無しさん:2014/12/08(月) 13:32:15.31 ID:3mx+HWhx
>>368
JavaScriptはブロックスコープが無くてグローバルか関数スコープしかないから
グローバルに変数を撒き散らしたくない場合は、関数を作るしかない
その例では確かに無駄だがイディオムとして確立してるので常にそうすべき
370デフォルトの名無しさん:2014/12/08(月) 13:47:05.60 ID:e/VeyYdn
>>368
無名関数の引数にグローバルオブジェクトをbindするテクニックにとらわれているだけで無駄なコードだと思う
無名関数でスコープ制限するだけなら内部関数でも行われているしね
それはそうと、quiitaにはコメント機能があるから、コメントで質問してみると作者の意図が聞けていいんじゃないかな
371デフォルトの名無しさん:2014/12/08(月) 13:49:57.51 ID:KSoFgfI5
CoffeeScript で書いたのかも知れないなーとは思うけど
372デフォルトの名無しさん:2014/12/08(月) 13:58:23.29 ID:3mx+HWhx
>>370
だから無駄じゃない

var Module;
(function(global){
...
})(Module || Module = {});

とすればモジュールを簡単に定義できて、再利用する際の利便性が増す
> その例では確かに無駄だがイディオムとして確立してるので常にそうすべき
だから↑と言っている
373デフォルトの名無しさん:2014/12/08(月) 14:06:47.92 ID:e/VeyYdn
>>372
>>368の中のコードで同じようなことをやってるから無駄

> (function(global){
なぜ Module が global なのさ
一つのやり方に拘ってるから全体が見えないんでしょ

var Module = (function(Module){
...
return Module;
})(Module || {} );
374デフォルトの名無しさん:2014/12/08(月) 14:11:28.85 ID:e/VeyYdn
>>368のglobal束縛を生かすならこう書く

(function(global){
 function SitesUtil(site){
  this.site = site;
 }
 SitesUtil.prototype.getTemplateByName = function(templateName) {
(略)
  };
 global.SitesUtil = SitesUtil;
})(this);

>>368は無駄にクロージャを生産しすぎなんだよ
375デフォルトの名無しさん:2014/12/08(月) 14:32:18.39 ID:KCPal8fz
なるほど
一理ある
376デフォルトの名無しさん:2014/12/08(月) 14:38:33.34 ID:KCPal8fz
>>374
ちなみにcoffeescriptだと>>374のケースでも>>368なコード出力するよね
377デフォルトの名無しさん:2014/12/08(月) 15:28:29.56 ID:3mx+HWhx
>>374
(function(global){
 var SitesUtil = (function() { ← これは

 var SitesUtil = (function(super) {
...
 })(BaseClass);

とベースクラスを渡す為のもんなんだよ
> その例では確かに無駄だがイディオムとして確立してるので常にそうすべき
先人の知恵が詰まったイディオムと言ってんだからまずは理解しようとしろ
378デフォルトの名無しさん:2014/12/08(月) 15:33:50.98 ID:KCPal8fz
いやいや
先人の知恵が詰まったイデオムの大切さは理解出来るけど
おまじないとか呪文みたいな丸暗記は良くないよ
突っ込む人が居た方が理解が深まるよ
横からだけどありがとう
379デフォルトの名無しさん:2014/12/08(月) 16:04:34.81 ID:xmgrWXtn
<script type="text/javascript">
/*サイコロ*/
function saikoro(){
var sai=new Array("sai1.png","sai2.png","sai3.png","sai4.png","sai5.png","sai6.png");
var imgs = document.querySelectorAll('.saikoro');
for (var i = 0; i < imgs.length; i ++) {
var r = Math.floor(Math.random()*sai.length);
imgs[i].setAttribute('src', sai[r]);}}
function masusaikoro(){
var sai=new Array("sai1.png","sai2.png","sai3.png","sai4.png","sai5.png","sai6.png");
var imgs = document.querySelectorAll('.saikoro');
for (var i = 0; i < imgs.length; i ++) {
var r = Math.floor(Math.random()*sai.length);
imgs[i].setAttribute('src', sai[r]);}}
document.write('<li>');
document.write('<img src="img/MAP.png" onMouseOver="img/MAPsenntaku.png" class="simap"/><img onclick="masusaikoro();" src="sai1.png" class="saikoro" name="saikoro">');
document.write('</li>');
</script>
</ul>
<div id="hyouzi">
</div>
</div>
<body>
</html>
マウスをサイコロに当てると、img/MAPsenntaku.pngに変わるようにしたいのですが、全然変わりません、
どう修正したらよろしいでしょうか?
380デフォルトの名無しさん:2014/12/08(月) 18:38:23.03 ID:KCPal8fz
Snap.svg というのがあったので
http://snapsvg.io/
ここを参考に
https://www.youtube.com/watch?v=hyaiFapVOek
コードを書いてみました
http://codepad.org/Vez2JH7w
画面下の丸が点滅する予定なのですが上手く動きません
どこを直せば動きますか?
381デフォルトの名無しさん:2014/12/08(月) 18:51:31.84 ID:rVPpfxjW
382デフォルトの名無しさん:2014/12/08(月) 19:43:37.49 ID:dHRqrq3F
>>376
確かにaltJS起因の可能性はあるな
そんなコードを出力するなよ、とは思うが

>>377
global なのにクラスとはこれいかに
>>368は全てのECMAScript実装でグローバル変数を定義する手法なんだが
この場合は>>374>>368のいうように下記コードで十分事足りる

var SitesUtil = (function() {
 function SitesUtil(site){
  this.site = site;
 }
 SitesUtil.prototype.getTemplateByName = function (templateName) { };
 return SitesUtil;
})();

実際には上記コードで事足りるケースが多いんだよな
IE8の名前付き関数のバグも関数スコープで制限するから名前に気を付ければ使える
>>374はグローバル変数を複数定義する場合に有効だが、グローバル変数を多数定義することは推奨されない
383デフォルトの名無しさん:2014/12/08(月) 19:58:07.01 ID:mbXdCgfx
束縛ってなぁに?
384デフォルトの名無しさん:2014/12/08(月) 20:05:03.17 ID:3mx+HWhx
>>382
TypeScriptは>>368と全く同じコードを出力するし、当然何の不満も出てない

> global なのにクラスとはこれいかに
クラスじゃなくてモジュールだが、そんな変数名の些細な事はどうでもいい

> 実際には上記コードで事足りるケースが多いんだよな
特定のケース毎にコードを変えて書くならそれでいいだろうよ
ただし出来る限り常に同じ書き方をすべきだ

>>382のコードは継承を実装する時に変更する必要がある
385デフォルトの名無しさん:2014/12/08(月) 21:00:18.60 ID:A2V/rnic
>>384
> クラスじゃなくてモジュールだが、そんな変数名の些細な事はどうでもいい
おまえが>>377で「ベースクラス」といったんだが、おまえは自分の言葉に責任を持つ事すら出来ないのか

>>368の global は「グローバルオブジェクト」であってベースクラスだかモジュールだか知らんものではない
Strict Mode では this の参照先が変化するが、グローバルコードだけは this でグローバルオブジェクトを参照できる
その仕様を利用して関数スコープ内でグローバルオブジェクトを参照する方法が考案されたが、>>374はその一つだ
「なぜ this でグローバルオブジェクトを参照するのか」「なぜ引数で渡しているのか」を良く考えるべきだ

>>368の質問に対する答えとしては「ESとしては無駄。altJSを使用しているなら諦めるかフィードバックする。」になるだろう
386デフォルトの名無しさん:2014/12/08(月) 21:04:15.65 ID:3mx+HWhx
>>385
> おまえが>>377で「ベースクラス」といったんだが、おまえは自分の言葉に責任を持つ事すら出来ないのか
(function(global){
 var SitesUtil = (function() {

 var SitesUtil = (function(super) { ← ベースクラスはこっちの事だよ
...
 })(BaseClass);
387デフォルトの名無しさん:2014/12/08(月) 21:11:47.14 ID:A2V/rnic
>>386
そうか
どっちにしてもクラスもモジュールも関係ない事には変わりないが
388デフォルトの名無しさん:2014/12/09(火) 04:44:35.26 ID:wgjct/yv
389デフォルトの名無しさん:2014/12/09(火) 09:13:19.48 ID:4rUVN/86
>>388
this 使い過ぎって良く言われない?
390デフォルトの名無しさん:2014/12/09(火) 09:28:39.33 ID:FxXgizui
this note
391デフォルトの名無しさん:2014/12/09(火) 09:45:08.96 ID:m1hPGrdk
なぜIE6〜8は配列の最後尾にカンマがあるとエラーになるのか?
392デフォルトの名無しさん:2014/12/09(火) 09:51:43.70 ID:4rUVN/86
その仕様はべつに嫌いじゃない
393デフォルトの名無しさん:2014/12/09(火) 13:36:18.87 ID:+n0TpOhn
>>388 のプログラムはバグだらけだけど
今更だが Snap 初めて知った
面白いな
http://snapsvg.io/start/
あともうちょっと this 減らす方法あったら知りたい
394デフォルトの名無しさん:2014/12/09(火) 14:07:58.47 ID:ZQ0w8L2n
>>388
thisの数は至って普通
JavaScriptはメンバー変数にthisを付ける必要があるから必然的に多くなるだけだ
thisが多くなるからといってクラスを使わないようにするのはナンセンスだ
395デフォルトの名無しさん:2014/12/09(火) 14:17:07.23 ID:NHu4cIHB
>>388
相変わらず、無意味なglobalがあるな
altJSが流行ってるのかね
396デフォルトの名無しさん:2014/12/09(火) 14:23:20.81 ID:ZQ0w8L2n
>>395
だからモジュール化だっての
JavaScriptにモジュールが無いから代わりにこういう書き方をして
これはモジュールですよって宣言してんだよ
397デフォルトの名無しさん:2014/12/09(火) 14:28:31.79 ID:NHu4cIHB
>>391
オブジェクト初期化子なら分かるが、配列も末尾カンマでエラーは聞いたことがないな
もし、エラーになるならIE6-8のバグ
398デフォルトの名無しさん:2014/12/09(火) 14:29:30.56 ID:NHu4cIHB
>>396
グローバルオブジェクトでぐぐれ
399デフォルトの名無しさん:2014/12/09(火) 14:36:42.47 ID:ZQ0w8L2n
俺もSnap初めて知ったしAdobeがオプソを公開してんのも初めて知った
最近のSVGはハードウェアアクセラレーションが効いてるから滅茶苦茶滑らかだしかなりいい感じ
400デフォルトの名無しさん:2014/12/09(火) 14:50:49.34 ID:ZQ0w8L2n
>>398
javascript モジュール化 でぐぐれ
401デフォルトの名無しさん:2014/12/09(火) 15:05:16.01 ID:L9Kvawn8
>>396
仮引数にglobalって書いてるけど、どこでも使わないのになんでglobalって書いてるのかという疑問かも。
402デフォルトの名無しさん:2014/12/09(火) 15:31:52.82 ID:ZQ0w8L2n
>>401
どんな潔癖症だよ…
モジュール化する場合のイディオムだから取り合えず書いておいたけど使わなかったて事だ
altJSが流行る前からみんな(苦肉の策として)こうやってたけどね
403デフォルトの名無しさん:2014/12/09(火) 15:53:02.14 ID:L9Kvawn8
>>402
どこにもexportしないのに仮引数を書き、global namespaceと何の関係もないのにglobalって名前にするのが
「イディオムだから」ってのが気に入らないんじゃないかと思うよ。
まぁ俺も「イディオムだから」とか言われると、はぁ?ってなるかな。
404デフォルトの名無しさん:2014/12/09(火) 16:01:08.32 ID:L9Kvawn8
昨日ごちゃごちゃやってたのは読み飛ばしたんだが、あらためて読むと>>385の内容を
理解できてないから話がかみ合わないんだな。
405デフォルトの名無しさん:2014/12/09(火) 16:06:08.70 ID:FxXgizui
愚弄原

南九州では原を「ばる」と読む事が多いんthis
406デフォルトの名無しさん:2014/12/09(火) 16:50:34.39 ID:ZQ0w8L2n
>>403
モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
その.jsを他の所で使う場合には別のオブジェクト(ネームスペース)を渡す事が出来る
変数名は別に何でもいいんだが、そんな些細なことに何でこだわるんだか…
407デフォルトの名無しさん:2014/12/09(火) 16:55:39.87 ID:ZQ0w8L2n
>>403
> まぁ俺も「イディオムだから」とか言われると、はぁ?ってなるかな。
なぜ書いたか? ⇒ イディオムだから
なぜ残ってる? ⇒ 消し忘れたから
でFA
もうこれ以上はいい
408デフォルトの名無しさん:2014/12/09(火) 17:11:44.09 ID:L9Kvawn8
>>406
俺の書きたいことが>>373に書かれてたので繰り返さないが、>>373は理解できてるか?

> 変数名は別に何でもいいんだが、そんな些細なことに何でこだわるんだか…
なんでもいいならglobalなんてまぎらわしい単語使うなってこった。
409デフォルトの名無しさん:2014/12/09(火) 17:26:59.75 ID:ZQ0w8L2n
>>408
>>373
> >>368の中のコードで同じようなことをやってるから無駄
>>377のベースクラスを渡す為のもんなんで無意味ではない
(実際のコードはベースクラスを渡してないから無駄と言えば無駄にはなってるが)

> なんでもいいならglobalなんてまぎらわしい単語使うなってこった。
つうかある程度経験があるやつならそんな事に突っ込まないよ…
だって普通に使われてるイディオムなんだから
410デフォルトの名無しさん:2014/12/09(火) 17:30:22.83 ID:L9Kvawn8
>>409
いや、ある程度経験があるなら
> モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
こんなこと言わないと思うんだが。
globalじゃなくてnsとかだったら俺も何も言わない。
411デフォルトの名無しさん:2014/12/09(火) 17:37:07.74 ID:DuqMcROb
変数名には気を使うべきだわな
本当に名前がどうでもいいテストコードやサンプルコードであるなら
メタ構文変数の出番
412デフォルトの名無しさん:2014/12/09(火) 17:46:13.74 ID:DuqMcROb
と言うか、イディオムって言葉の使い方が問題でもあると思う
例えば

for(i=0; i<ary.length; i++) {
// ary[i]に対して処理
}

と言う定型の「処理の組み合わせは」イディオムだけれども
この内 i など変数の「名前」については、イディオムではなく
単に「慣習」とでも呼ぶべき代物だろうし
413デフォルトの名無しさん:2014/12/09(火) 18:15:28.52 ID:ZQ0w8L2n
>>410
> モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
別におかしなこと言ってないよ
> globalじゃなくてnsとかだったら俺も何も言わない。
後出しで言うなよ

>>412
じゃぁ
(function(global) {
})(this); // (Module || {}) などのバリエーションあり)

これはモジュール化のイディオムだけどglobalは慣習なので使わない場合は必ず消してください
でいいよ
414デフォルトの名無しさん:2014/12/09(火) 18:23:16.65 ID:L9Kvawn8
>>413
> > モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
> 別におかしなこと言ってないよ
じゃ、俺と君では「グローバルオブジェクト」の定義が違うんだな。
415デフォルトの名無しさん:2014/12/09(火) 19:09:55.22 ID:k/GLXqco
全く使われてない無意味なコードも「イディオムだから」で済ますのは論理的ではないと思うね
416デフォルトの名無しさん:2014/12/09(火) 21:06:23.18 ID:jqkVke/n
>>391
> なぜIE6〜8は配列の最後尾にカンマがあるとエラーになるのか?

それがECMAScript3の正しい仕様だから。

なお、次のECMAScript5(ECMAScript4は廃止)が
リリースされたのは2009年12月

IE6は2001年、IE7は2006年、IE8は2009年3月
IE9は2011年
417デフォルトの名無しさん:2014/12/09(火) 22:08:33.27 ID:k/GLXqco
>>416
ES3 でも配列初期化子は末尾カンマを許す仕様じゃなかった?
そもそも、配列で末尾カンマしたら length が変わるので、カンマを入れる前とデータが変わっちゃうはずなんだけど
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/11_Expressions.html#section-11.1.4
>>397のいうようにオブジェクト初期化子と勘違いしているのでは?
418デフォルトの名無しさん:2014/12/09(火) 22:30:22.13 ID:jqkVke/n
めんどくせーやつだな。じぶんでしらべろよ
http://dqn.sakusakutto.jp/2012/05/javascript-last-comma-matome.html

ECMAScriptの仕様はどうなっているのか

ECMAScript3
Standard ECMA-262 3rd Edition-December1999
「11.1.5 Object Initialiser」という章に記載があります。
Syntax
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
PropertyNameAndValueList :
PropertyName : AssignmentExpression
PropertyNameAndValueList , PropertyName : AssignmentExpression
ケツカンマなしスタイルで書かれています。

結論としては「ECMAScript3の世界ではケツカンマを書かないほうがよい」と言えるかと思います。
ECMAScript5
Standard ESMA 262 5.1 Edition

「11.1.5 Object Initialiser」という章に記載があります。
Syntax
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
ケツカンマが明示的に記載されています。
「ECMAScript5の世界ではオブジェクトケツカンマは堂々と書いてよい」という結論になります。
(余談:ECMAScript5の配列ケツカンマについては、仕様書を見ても扱いがよくわかりませんでした。)
419デフォルトの名無しさん:2014/12/09(火) 22:47:03.48 ID:jqkVke/n
Firefoxで。

[1,2,3].length => 3
[1,2,3,].length => 3
[1,2,3,,].length => 4
[1,2,3,,,].length => 5

[1,2,,3].length => 4

[1].length => 1
[,1].length => 2
[1,].length => 1

[,].length => 1


どういうこと?
420デフォルトの名無しさん:2014/12/09(火) 23:35:38.94 ID:k/GLXqco
>>418
>「11.1.5 Object Initialiser」という章に記載があります。
やはり、配列初期化子ではなくオブジェクト初期化子だったね
オブジェクト初期化子と勘違いしていた、で正しかった
421デフォルトの名無しさん:2014/12/09(火) 23:53:44.65 ID:k/GLXqco
> そもそも、配列で末尾カンマしたら length が変わるので、カンマを入れる前とデータが変わっちゃうはずなんだけど
これは訂正
ES3 では最後のカンマは無視する仕様だね(Elision の説明に書いてある)
よって>>416は間違い

>>416では配列初期化子の話だったはずなのに>>418ではオブジェクト初期化子で反論するという頓珍漢な話の持って生き方をする人だね
422デフォルトの名無しさん:2014/12/10(水) 06:01:16.69 ID:SwYBSmtx
そもそもIE6でも[1,2,3,]などは通るぞ
{'0':1, '1': 2, '2' :3,}はダメだけど

IE6だと[1,2,3,].length は4だな
423デフォルトの名無しさん:2014/12/10(水) 08:49:20.07 ID:kUP0yqqm
初めて英語を習うとき、まずは英会話から入るでしょう。先生が教室に入ってくるなり、"How are you?"と声をかけます。
そして、たとえ徹夜明けの二日酔いであろうが、"I'm fine, thank you."と応えるのだと習うでしょう。
このとき、"How"は疑問副詞で"are"が二人称単数現在の動詞、"you"は二人称の代名詞などという説明はされません。
そんな細かい話をしていたら、いつまで経ってもハンバーガーのひとつも買えないからです。
英会話は、言葉のやり取りをパターンとして学習します。あいさつや買い物、レストランでの注文、空港における出入国など、
多くのシーンで交わされるフレーズを覚えれば、日常会話がこなせるようになります。
書店に並ぶ英会話集というのは、ActionScriptの書籍でいえば、サンプル集にあたるでしょう。
しかし、本書はサンプル集にはしませんでした。
なぜなら、自分の言いたいことが、いつもそのパターンの中にあるとはかぎらないからです。
すると、意味の通じる文を自分で組立てるために、文法を学ぶ必要が生じます。
本書の目的のひとつは、ActionScript 3.0を正しく書くための文法について解説することです。

もっとも、文法書というのは、網羅的で体系的で、反面味気ない部分もあります。
それだけでなく、自分の伝えたいことを表現するというのは、ただ文法的に正しい文を並べる作業ではありません。
起承転結やレトリックなどを考え、文と文とを紡いで、文章全体の流れを構成しなければならないのです。
(続く)
424デフォルトの名無しさん:2014/12/10(水) 08:50:02.93 ID:kUP0yqqm
本書は、このいわば文章構成法を、ActionScript 3.0について解説しようとするものです。
とはいえ、文章表現は、その作者の数だけあります。論理の組立てからなるスクリプトであっても、
同じ内容の処理がいくとおりにも書けます。

ですから、本書が紹介するのは、あくまで筆者のスタイルによる、特定の仕様を想定したスクリプトです。
けれど、ステートメント(命令文)の1行1行について、なぜそう書くのか、別の記述は考えられないのか、
その構成を採ると何がいいのか、といった点をできるかぎり詳しく説明しました。
ときには、陥りやすい間違いをあえて犯し、その究明方法を解説している部分もあります。
本書が重要視するのは、できあがったスクリプトより、むしろその書き方とそこに至るまでの考え方です。

本書では「数学編」を設け、高校レベル程度の数学的な解説も加えました。
数学が苦手な人は、よく「公式が覚えきれない」といいます。
しかし、数学の公式集に掲げられている式のうち、
おそらく3割の求め方を覚えれば、残り7割はそこから導き出すことができます。
http://www.fumiononaka.com/Books/ActionScript3ProfessionalGuide.html
↑このひと文系出身やな
425デフォルトの名無しさん:2014/12/10(水) 09:04:52.97 ID:BwBDlTIy
あーはいはいイデオムね
最後に全員死ぬんだろ?
426デフォルトの名無しさん:2014/12/10(水) 09:42:06.13 ID:kUP0yqqm
http://ideone.com/

http://idiom.com/
に見えることがある
427デフォルトの名無しさん:2014/12/10(水) 10:57:37.65 ID:8DFx0ThA
>>425
このボケやる人いると思った
やさしさで一応ツッコミ入れときますね


それってどこの伝説巨神?
428デフォルトの名無しさん:2014/12/10(水) 11:21:15.58 ID:4CT1KEaH
>>421
> ES3 では最後のカンマは無視する仕様だね(Elision の説明に書いてある)
なんでこんな仕様になってるんだろうね。
「値無し」を使う初期化が許されてるんだから、
[1,2,3].length => 3
[1,2,3,].length => 4
[1,2,3,,].length => 5
というふうになってた方が一貫性がある気がするんだが。
[1,2,3,undefined]って明示しろってことかな?
429デフォルトの名無しさん:2014/12/10(水) 11:41:07.69 ID:OWb/1eq4
>>428
var a = [
  1,
  2,
  3,
  4,
  5,
];
↑こういうコードを(自動生成も含めて)書く時に最後無視してくれないと不便だから
430デフォルトの名無しさん:2014/12/10(水) 11:56:01.82 ID:4CT1KEaH
>>429
それには同意するけど、
var a = [
  1,
  ,
  3,
  ,
  ,
];
を見たときに、はて要素数はいくつだろうかというのが直感と異なるというのがなんとも・・・。
431デフォルトの名無しさん:2014/12/10(水) 11:57:20.93 ID:4CT1KEaH
あ、データ部分は5行で要素数も5個だから、たいていの人の直感とは合致するのか。
432デフォルトの名無しさん:2014/12/10(水) 11:59:45.92 ID:4CT1KEaH
こっちの例がいいか。
CSVデータをパースするとき
"1,2,3,".split(",").length =>4
となるのと配列の初期化のときで振る舞いが異なるというのが気持ち悪い。
433デフォルトの名無しさん:2014/12/10(水) 12:07:25.19 ID:OWb/1eq4
>>432
なんか無理やり言ってないか…
どっちも直感的だから何の問題もない
434デフォルトの名無しさん:2014/12/10(水) 12:13:01.54 ID:2OX9Sm8y
435デフォルトの名無しさん:2014/12/10(水) 12:16:28.10 ID:2OX9Sm8y
"1,2,3,".split(",").join(",").split(",").join(",").split(",").join(",")...
したときに徐々に要素数増えるとしたら気持ち悪い(もちろんならないのでありがたい)
436デフォルトの名無しさん:2014/12/10(水) 12:44:18.24 ID:OWb/1eq4
>>434
about:supportで
GPU 描画支援のウィンドウ 1/1 Direct3D 11 (OMTC)
ってなってる?
437デフォルトの名無しさん:2014/12/10(水) 12:46:04.40 ID:4CT1KEaH
>>433
まあ自分自身は、言語によって解釈が違うかもしれないような記述はしないんだけどね。
>>429のケースなら、めんどくさいけど最終行のカンマは削る。
lint系ツールで文句言われるかもしれないし・・・。

> なんか無理やり言ってないか…
いや、俺の「直感」がどこから来てるかを説明したかっただけ。
438デフォルトの名無しさん:2014/12/10(水) 14:04:53.38 ID:evPa2cl4
>>436

おもいっきりパクってみたが
こっちのプログラムだとどう?
http://codepad.org/4KMQRoQr

うちの Firefox タソはカックンカックン
GPU 描画支援のウィンドウ 12/12 Direct3D 11 (OMTC)
IE11 とか Chrome とかは問題ない (win8.1 core i7)
439デフォルトの名無しさん:2014/12/10(水) 14:18:34.31 ID:evPa2cl4
ああ
判ったかもω
12/12 が原因っぽい
面倒っちが全部ウィンドウ閉じて
1ウィンドウにしたら(あまり)カックンしなくなった
だけど IE11 や Chrome に比べるとフレーム跳びが出来る傾向にはある
440デフォルトの名無しさん:2014/12/10(水) 14:30:53.28 ID:OWb/1eq4
>>439
なるほど
タブはいっぱい開いてるがウィンドウは常に1つだけだな
それでもFlash使ってるタブをたくさん開くと動画再生とか色々遅くなる
多分ウィンドウの数というかFlashが含まれてるページをたくさん開いてると遅くなるんだろうね
441デフォルトの名無しさん:2014/12/10(水) 15:13:23.95 ID:jLBSNtzQ
>>432
直感と一致しないパターンには [,,,,].length があるね
new Array(5) を使えば解決するけど、直感的な動作ではないのが気持ち悪い
442デフォルトの名無しさん:2014/12/10(水) 16:26:03.19 ID:aygPX+UO
firefoxが遅いのはシングルスレッドシングルプロセスだからだろ
443デフォルトの名無しさん:2014/12/10(水) 17:17:56.95 ID:dbkzqsdU
質問です。ファイルAに20個の要素があってそこにJSでidを割り振ってます
このファイルAへ別ファイルBのリンクから飛んでくるときアンカーした要素
が画面TOPに来るようにしたいのですが、読み込みとのラグがあるようで、
うまくアンカーに引っかかりません。どうすればアンカーにヒットしますか?
444デフォルトの名無しさん:2014/12/10(水) 18:54:19.14 ID:OWb/1eq4
>>442
シングルプロセスだがシングルスレッドではないぞ
完全にシングルスレッドだったら裏でページを描画中に何も出来なくなる
445デフォルトの名無しさん:2014/12/10(水) 19:11:23.33 ID:iSgng2sK
>>443
idを割り振った後に location.hash で対応可能だけど、タイムラグ中にユーザがスクロールしていたらスクロールを乗っ取る事になるので良くない
フラグメント識別子となりうる要素のidを動的に付与すべきではないよ
そういうのはサーバサイドで実装すべき
446デフォルトの名無しさん:2014/12/10(水) 20:44:27.58 ID:7ek4HD8a
Firefoxのマルチスレッドは疑似
447デフォルトの名無しさん:2014/12/10(水) 20:57:08.44 ID:OWb/1eq4
擬似ってなんだよw
マルチスレッド化されてない部分もあるから重い処理の時にUIの操作が効かなくなる時もあるってだけ
ちなみにマルチプロセス化は既に実装されてて無効になってるだけ
36ぐらいから有効になるはず
448デフォルトの名無しさん:2014/12/11(木) 04:44:42.99 ID:f28H8ZNo
幾ら弁護しても糞なことには変わりない
449デフォルトの名無しさん:2014/12/11(木) 07:09:38.53 ID:qKHRQsDr
リソースを確保するクラスを作った時
ガベコレまで待たずにクラスをdeleteして
クラスのデストラクタでリソースを解放したいのですが
デストラクタ本体を書くためのイディオムはどんなのがありますか?
450デフォルトの名無しさん:2014/12/11(木) 07:16:18.74 ID:HjxS9Iba
backbone.jsの参考書を読んでいるとサーバサイドをnode.jsでやっているものばかりです
node.jsは少し尖った技術という印象だったのですが
もはやごく普通の技術になってるのでしょうか?
node.jsやった方がいいですか?
451デフォルトの名無しさん:2014/12/11(木) 08:38:52.53 ID:qKHRQsDr
いまからやるなら is.js らしい
452デフォルトの名無しさん:2014/12/11(木) 09:27:11.63 ID:thMpEjLC
io.jsな
453デフォルトの名無しさん:2014/12/11(木) 10:07:12.08 ID:ToXwSlWY
>>450
サーバは、リクエスト受けてレスポンスをJSONで返すAPIを実装するのが基本だから、
言語は何でもいいんじゃないの?
何もやったことないならnode.jsでもいいし。
454デフォルトの名無しさん:2014/12/11(木) 10:23:57.45 ID:qboooZRP
サーバー側とクライアント、両方同じ言語なら説明の手間が省けるって
事なんだろうけどレンタルサーバーとか限られちゃうなあ

JSONライブラリは大抵の言語で用意されてるから>>453の言うとおり
移行はしやすいと思う
455デフォルトの名無しさん:2014/12/11(木) 10:37:42.35 ID:deCLcswb
ChromeでshowModalDialog()が使用出来なくなってしまったので困ってます。
上記の代わりにモーダルウィンドウを表示する方法はありませんか?

出来たらJQueryを使わない方で
456デフォルトの名無しさん:2014/12/11(木) 10:48:47.05 ID:qboooZRP
Chromeの設定画面でもモーダルウィンドウの類は使っていないから
おそらく無いと思う
457デフォルトの名無しさん:2014/12/11(木) 11:50:36.00 ID:2y8Dj7zg
yieldの対応状況って現在どんなもんなの?最新のAndroidとかiPhoneとかで動く??
458デフォルトの名無しさん:2014/12/11(木) 13:34:43.62 ID:FsUA2SvU
>>448
糞なのはChromeの方
459デフォルトの名無しさん:2014/12/11(木) 13:49:23.84 ID:thMpEjLC
460デフォルトの名無しさん:2014/12/11(木) 15:59:49.96 ID:qKHRQsDr
>>455-456
Chrome の alert() のモーダルはうざいけどな
461デフォルトの名無しさん:2014/12/11(木) 16:06:04.90 ID:MEHNlY4y
>>460
OSXとWindowsでまたそのあたりの実装も全然違うけれどな。
あれを見てて、Googleって馬鹿だなって思うわ。
462デフォルトの名無しさん:2014/12/11(木) 17:27:23.82 ID:thMpEjLC
Googleも一枚岩ではないからな
463デフォルトの名無しさん:2014/12/11(木) 17:39:35.63 ID:qKHRQsDr
つまみ食いが多いイメージ
464デフォルトの名無しさん:2014/12/13(土) 00:17:22.54 ID:vju075Cj
generatorで数字の組み合わせを順番に取り出したいのですが、うまくプログラムを書けません…
function*combination(max, len){
(function f(a){
if(a.length < len) for(var i=1;i<=max;i++) f(a.concat(i));
yield a;
})([]);
}
var g = combination(3,3);
g.next().value; // [1,1,1]
g.next().value; // [1,1,2]
g.next().value; // [1,1,3]
g.next().value; // [1,2,1]
の順に配列を返すことを期待しています。

しかし、入れ子にした関数の中ではyieldが使えないみたいで困っております…。
どのようにすればいいでしょうか?よろしくお願いします。
465デフォルトの名無しさん:2014/12/13(土) 01:56:43.47 ID:aWFoLZL3
f()がgeneratorじゃねえんだよなあ…
466464:2014/12/13(土) 06:04:50.63 ID:vju075Cj
すみません自己解決しました
467デフォルトの名無しさん:2014/12/15(月) 09:26:40.26 ID:4rSnIgMy
>>466
事故解決の場合には、事故解決した内容を書きましょう。
468デフォルトの名無しさん:2014/12/16(火) 00:00:41.51 ID:6DIuaTB4
>>467
すみませんこんな感じになりました
function*combination(max, len){
yield*function*g(a){
if(a.length < len) for(var i=1;i<=max;i++) yield*g(a.concat(i));
else yield a;
}([]);
}
var c = combination(3,3);
for(var i of c) console.log(i);
// [1,1,1] → [1,1,2] → [1,1,3] → [1,2,1] → ...
469デフォルトの名無しさん:2014/12/16(火) 00:39:44.31 ID:yzFfWLkp
スルーしていいよ
470デフォルトの名無しさん:2014/12/20(土) 13:15:51.69 ID:z3B/t80F
失礼します。
1ページに複数の画像を並べてオンマウスで画像3枚が順番に変わるようにしたいのですが、
下記のスクリプトを2つ並べると2つ目にマウスを持って行っても1つ目の画像が変わってしまいます。
どこを変更すればいいでしょうか・・
<div><IMG SRC=".1.jpg" id="show"
onmouseover="Over()" onmouseout="Out()"></div>
<script type='text/javascript'>
var i=1;
img=new Array(3);
img[1]=".1.jpg";
img[2]=".2.jpg";
img[3]=".3.jpg";
var tid = null;
function Over() {
if (! tid) {
tid = setInterval(Switch, 500);
}
}
function Out() {
if (tid) {
clearInterval(tid);
tid = null;
}
}
function Switch() {
document.getElementById("show").src=img[i];
i=i+1;
if(i>3){i=1;}
}
</script>
471デフォルトの名無しさん:2014/12/20(土) 13:23:17.00 ID:e+FqSQyU
js用のMIMEparserは何がおすすめですか?
Nde.js/io.jsの以外でおながいします
472デフォルトの名無しさん:2014/12/20(土) 13:58:34.92 ID:dWuhsWfV
>>470
マウスイベントを取って、動的に変化させるなら、
jQueryを使うのが一般的

Web制作管理板の
jQuery ライブラリ 総合質問所 vol.4 スレで聞けば?
ttp://peace.2ch.net/test/read.cgi/hp/1400313626/l50

どういうことをやりたいのかを、具体的に書く。
そのコードをすべて捨てて、最初からやり直す
473デフォルトの名無しさん:2014/12/20(土) 14:00:44.30 ID:z3B/t80F
>>472
ありがとうございます!
そこで質問してみます。
474472:2014/12/20(土) 14:20:37.37 ID:dWuhsWfV
>>472
訂正。Web制作管理板の
jQuery ライブラリ 総合質問所 vol.4 スレではなく、
jQuery, Lodash などライブラリ関連の質問は、下記のスレへ

Web制作管理板の
JavaScript ライブラリ総合質問所 vol.4
ttp://peace.2ch.net/test/read.cgi/hp/1400834117/l50

>>470
仮に左から、ABCという画像3枚が、どのように変わるのか?
AにマウスOverで、左からBCAになるのか?
それとも、ABCのどれかにOverで変わるのか?

BCAになった後、マウスOutで変わるのか?
BにOverで、左からCABになるのか?
それとも、ABCのどれかにOverで変わるのか?

もっと、具体的に説明して
475デフォルトの名無しさん:2014/12/20(土) 14:29:54.69 ID:z3B/t80F
>>474
説明不足で申し訳ございませんでした。
左からABの画像が並んでおり、それぞれ、A1,A2,A3, B1,B2,B3という風に
画像が用意してあります。

Aにマウスを当てた場合、0.5秒おきにA画像はA1,A2,A3、また同じようにBに当てた場合、
B画像はB1,B2,B3‥と動くようにしたいのです。

それが、上記のスクリプトにすると、Bに当てても左のほうでA画像がA1,A2,A3と変わってしまいます。

最終的には1ページに30枚、それを数ページにしたいのです。

説明ベタで申し訳ありません><

友人と手話のサイトを作ろうと思い、マウスオーバーで手話の流れが見れるようにしたいと思っています。
476デフォルトの名無しさん:2014/12/20(土) 14:32:06.57 ID:z0Uvrlhl
gif でいいような気が
477472:2014/12/20(土) 14:41:09.63 ID:dWuhsWfV
ABのエリアに、同じid="show"を付けている?
ABのエリアに、showA,showBなど、違うIDを付ける

そうすれば、ソースコードの大半は、
コピーしなくても、同じものを使える
478デフォルトの名無しさん:2014/12/20(土) 14:46:09.24 ID:z3B/t80F
>>476
画像はすでにサーバに数百枚アップロードしてあり、それを今からGIFに変換する作業
よりURLで連続で変更した方が早いと思いまして‥
479デフォルトの名無しさん:2014/12/20(土) 14:47:54.35 ID:z3B/t80F
>>477
それもやって見たのです…
showa showb やimg1などidと思えるものはすべて区別を付けてみたのですが、結果は同じでした><
480472:2014/12/20(土) 15:12:58.61 ID:dWuhsWfV
単に最初から、画像を並べておくだけではダメなのか?
どうしてもマウスで画像を切り替えたいのか?

見え方を動的に変えるなら、jQueryが必須。
$(セレクター).attr(属性,値); で簡単に設定できる

$(#showA).attr('src','.1.jpg');
id="showA"のタグを、src=".1.jpg"に設定する

アニメーション効果もある
slideさせつつ表示とか、fadeInOutなど

これを読む
山田祥寛(よしひろ)、翔泳社
10日でおぼえる jQuery 入門教室 第2版
481デフォルトの名無しさん:2014/12/20(土) 15:17:25.09 ID:rFGgMkCf
「見え方を動的に変えるなら、jQueryが必須」って、マジで言ってるの…?
482デフォルトの名無しさん:2014/12/20(土) 15:17:47.42 ID:G86rIizh
>>470
id="show" もあるが、setInterval が返す tid を独立させないと複数の要素に対応できない
どう見てもライブラリにすれば解決する問題ではないのでここで継続質問していい
が、現象が発生するコード(複数並べた場合のコード)を http://jsfiddle.net/ にUPした方が回答しやすい(やったやらない議論が無駄)
483デフォルトの名無しさん:2014/12/20(土) 15:18:07.92 ID:z3B/t80F
>>480
ありがとうございます。
この手法でなくてはいけないということはないのですが、性格上モヤモヤがとまらなくて
このままやってみようと思っていました。

おすすめの本、早速取り寄せて読んでみようと思います。
重ねてありがとうございました。
484472:2014/12/20(土) 15:23:17.33 ID:dWuhsWfV
>>481
一般的にはそうでしょ?

まあ、jsdo.it に、
ワニワニパニックをCSSだけで作った人もいるけどw
485デフォルトの名無しさん:2014/12/20(土) 15:25:45.72 ID:z3B/t80F
>>482
すみません、先ほどのコードもjavascriptも初めての経験なのでご指摘のサイトの
利用方法もわからないのですが、
http://jsfiddle.net/uab9qg90/
これで良いのでしょうか?

ご面倒をおかけしまして本当にすみません。
486472:2014/12/20(土) 15:30:09.12 ID:dWuhsWfV
>>482
それなら、tidを配列にすれば?

tid[0]は画像Aに使う
tid[1]は画像Bに使う
487472:2014/12/20(土) 15:34:48.56 ID:dWuhsWfV
jsfiddle が難しいなら、jsdo.it でもいい

ここは日本の企業が運営している
488デフォルトの名無しさん:2014/12/20(土) 15:37:01.03 ID:z3B/t80F
>>487
なるほど…コードをシェアできるんですね。
挑戦してみてきます、ありがとうございます。
489デフォルトの名無しさん:2014/12/20(土) 15:38:27.10 ID:G86rIizh
>>485
jsfiddleはこう使う(体裁を整えただけなので正常動作しない)
http://jsfiddle.net/uab9qg90/2/

id="show" が重複しているのが結局直ってないな
また、JavaScriptのグローバル変数も衝突しているので正常動作するはずがない
コピペして増やせば正常動作するだろうという安易な発想は捨てたほうがいい

・そもそも、function Over 等は共有できるのだから多重定義する意味はないだろう。event.target で対象のimg要素を取得し、srcプロパティの画像ファイル名から数値をインクリメントする処理を増やせばいい
・tid はクロージャに閉じ込めるか、配列化して衝突を避ける
これで解決できると思う
490デフォルトの名無しさん:2014/12/20(土) 15:41:44.85 ID:z3B/t80F
>>489
すみません‥こうしたいと思って探したものがたまたま先ほどのスクリプトでしたので、
本当に知識は0なのです。
どうやら私は無謀な挑戦をしていたようですね…
491472:2014/12/20(土) 15:53:58.57 ID:dWuhsWfV
>>485
まず一般的に、JavaScript(JS)をHTMLの中には書かない
HTML,CSS,JSはすべて、別のファイルにした方がよい

この部分はHTML
<div><IMG SRC=".1.jpg" id="show"
onmouseover="Over()" onmouseout="Out()"></div>

<script type='text/javascript'>
この部分もHTML
</script>

それと、jsfiddle,jsdo.it でも、
ライブラリでjQueryを指定できる
492デフォルトの名無しさん:2014/12/20(土) 15:55:34.70 ID:G86rIizh
>>490
・id="show" の重複を避けるのはHTMLの分野
・グローバル変数の衝突はJavaScriptの分野
どちらも基礎知識に分類されるので基礎からみっちり勉強したほうがいいように思う
そうしないと今回は解決したとしても、また別の場面ではまるのは間違いない
493デフォルトの名無しさん:2014/12/20(土) 15:56:56.62 ID:z3B/t80F
>>491
なるほど、HTMLでjavascriptを読み込むということですね。
494デフォルトの名無しさん:2014/12/20(土) 15:58:15.48 ID:z3B/t80F
>>492
わかりました><
質問の仕方すらわからない状況でご迷惑おかけしました。
最低限質問が出来るように勉強してきます。

ありがとうございます。
495472:2014/12/20(土) 16:05:06.95 ID:dWuhsWfV
知識0なら、JSは厳しいよ。
10日でおぼえる jQuery 入門教室 第2版では、
JSの文法は、20ページしか説明してない

それで理解できないなら、この本を読む
はじめてのJavaScript、秀和システム
掌田津耶乃(しょうだ つやの)、2013

でも、掌田の本はかなり本格的な、
プログラマー向けの本で、かなり難しい。
でもこれより簡単な本は知らない
496デフォルトの名無しさん:2014/12/20(土) 16:13:34.69 ID:z3B/t80F
>>495
わかりました、ご丁寧にありがとうございます。
読み漁ってみます。
497472:2014/12/20(土) 16:20:55.20 ID:dWuhsWfV
HTML,CSSだけで、単に最初から、
画像を並べておくだけにした方がよいかも

君は何かの言語で、プログラミングしたことあるの?
もし無ければ、わざわざJavaScriptにはまるのはお勧めしない

JSはかなりの変態言語だから、
凝ったことをしようとすると、プロでも頭を抱えるほどw
498デフォルトの名無しさん:2014/12/20(土) 16:23:43.37 ID:G86rIizh
>>496
参考書としてはこの辺りを勧めておく

Amazon.co.jp: DOM Scripting 標準ガイドブック ~やさしく学ぶ、JavaScriptとDOMによるWebデザイン~ (Web Designing BOOKS): Jeremy Keith, 中村 享介, 吉川 典秀: 本
http://www.amazon.co.jp/dp/4839922373
Amazon.co.jp: WebクリエイティブのためのDOM Scripting (Web Designing Books): 中村享介: 本
http://www.amazon.co.jp/dp/4839922268

jQueryはもっと後でいい
JavaScriptだけで書けるようになってからjQueryに手をつけないと、質の低いサンプルコードのコピペプログラミングになる
例えば、eventオブジェクトを活用したjQueryコードはほぼ見ないが、eventオブジェクトは addEventListener に慣れ親しんだ者なら一般的なものだ
JavaScriptだけで書けるようになってこそライブラリの選択肢の幅が広がる
499デフォルトの名無しさん:2014/12/20(土) 16:29:21.63 ID:z3B/t80F
>>497
いえ、プログラムの知識も同じく0です。
wordpressの記事内に入れれる言語を探していたらたまたま発見したのがこれだったのです。
それほどややこしい言語だったとは…
ありがとうございますm(__)m

>>498
了解いたしました。
ありがとうございました><
500472:2014/12/20(土) 16:39:12.28 ID:dWuhsWfV
もしHTML,CSSも知らないなら、この本から始める
これで何とか、HPの基礎を学べる

3日でマスター HTML5 & CSS3、鳥羽薫、2013
501デフォルトの名無しさん:2014/12/20(土) 18:40:36.15 ID:4nv9LDuL
この程度なら適当に入門サイト読み漁れば何とかなる気もする
やりたい事が頭の中で筋道立ってるなら後はコード当てはめるだけだよ
502デフォルトの名無しさん:2014/12/20(土) 19:08:17.42 ID:z3B/t80F
>>500
>>501
はい、がんばります><
503デフォルトの名無しさん:2014/12/25(木) 14:49:04.47 ID:AebGHqFL
最近VBで書いた物をjavascriptに書き直す作業をしているのですが、

ブラウザで表示したページの中の全ての画像の中から
画像URLに指定した文字列が含まれているものを判定しその画像URLに移動する

というスクリプトを書きたいのですがどのように書けばいいのでしょうか。
アドバイスくださいお願いします。
504デフォルトの名無しさん:2014/12/25(木) 15:00:20.60 ID:irDccXch
えーと何が分かんないのかな?
ページ中の画像をすべて取得する方法?URLを取得する方法?文字列を判定する方法?画像URLに移動する方法?
505デフォルトの名無しさん:2014/12/25(木) 15:07:09.43 ID:AebGHqFL
img srcから指定した文字列を判定する方法とそれに伴って真とでたimg srcに移動する方法です。
506デフォルトの名無しさん:2014/12/25(木) 15:24:26.39 ID:kQrL2KcQ
>>505
String.prototype.indexOf
location.replace
507デフォルトの名無しさん:2014/12/25(木) 16:14:17.19 ID:AebGHqFL
>>506
String.prototype.indexOfでこちらが予め指定した文字列を対象から探し出して
真だった場合location.replaceで移動という事なんですかね…
調べてみてもよくわからずorz

複数画像があるページで新たに画像が追加される→
新たに追加される画像URLに含まれているワード(ex.20141225)は事前にわかる→
20141225と一致する文字列をもった画像URLをページ上から判定→
真と出た場合そのURLに移動
508デフォルトの名無しさん:2014/12/25(木) 17:14:23.00 ID:AebGHqFL
VBだと

InStr(A,'B')
A…検索の対象となる文字列
B…Aの中から検索する文字列

先ほど教えて頂いた
indexOf(A,'B')
A…検索する値を表す文字列つまりVBでいうところのB?
B…検索を始めるための位置 

とあり、検索の対象をどう指定していいものなのかわかりません
509デフォルトの名無しさん:2014/12/25(木) 17:42:14.00 ID:irDccXch
JavaScriptだとこうなる
var str = "検索の対象となる文字列";
if( str.indexOf("対象") >= 0 ){ /* 処理 */ }
510デフォルトの名無しさん:2014/12/25(木) 18:28:36.75 ID:kQrL2KcQ
511デフォルトの名無しさん:2014/12/25(木) 22:14:12.99 ID:AebGHqFL
>>509
おお、ありがとうございます!
ここがどうしても分からなかったので助かりました。

>>510
リファレンス読み漁ってみます、他言語では出来上がっているから書き換えは簡単だろうと素人考えをしていました。
しっかり基礎から学んでみますURL感謝です!
知恵袋は確かに自分が書きました、スレ違いでの同一ポストはマルチと認識していたのですが別サイトへの書き込みもマルチになってしますのでしょうか、
もしそうであれば自分の無知を恥じるばかりで気を悪くされましたらごめんなさい。
512デフォルトの名無しさん:2014/12/26(金) 00:45:54.67 ID:bqhfMHzD
var i_want = "20141225"

function sn()
{
//要素の取得
  var str = document.getElementsByName("img src")[0];
//判定
  if( str.indexOf("i_want") >= 0 ){
//処理
location.replace("");
}
}

この場合のlocation.replace("")のURLの指定がいまいちわからないです…
そもそもこの書き方であってるかどうか不安なんですがアドバイスお願いしますorz
513デフォルトの名無しさん:2014/12/26(金) 02:23:12.85 ID:oJWcQfli
適当にググって入門サイト流し読みしてきたほうがいいと思う
要所だけ直すと、仮に一つ目のimg要素のsrc属性の値(URL)へ移動する場合は
var img = document.getElementsByTagName('img');
var src = img[0].src;
location.href = src;
514デフォルトの名無しさん:2014/12/26(金) 04:07:26.61 ID:kmKul9uD
VBも他人の書いたコードなんだろうなあ
515デフォルトの名無しさん:2014/12/26(金) 04:14:31.95 ID:79eDJSYS
>>511
> 知恵袋は確かに自分が書きました、スレ違いでの同一ポストはマルチと認識していたのですが別サイトへの書き込みもマルチになってしますのでしょうか
別サイトの書き込みもマルチポスト
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88#.E6.A6.82.E8.A6.81
マルチポスト先を明示する配慮は最低限行われるべき
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88#.E5.A4.B1.E7.A4.BC.E3.81.AB.E3.81.AA.E3.82.89.E3.81.AA.E3.81.84.E6.96.B9.E6.B3.95

>>512
>   if( str.indexOf("i_want") >= 0 ){
変数の使い方も分かってないようだが、VBだと文字列リテラル内の変数も展開される仕様なのか
(どちらにしても変数を参照するために文字列リテラルのコストを払う理由はないように思えるが)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Variables
「何も基礎勉強をせずにとりあえず、書いてみました」感があるので初めから勉強しなおしたほうがいい
516デフォルトの名無しさん:2014/12/26(金) 11:07:09.30 ID:GaLPZB3p
流れぶった切ってすまんなんだけど
プログラミング初心者におすすめの書籍、サイトを教えてください
ドットインストールは一通り見てきました
517デフォルトの名無しさん:2014/12/26(金) 11:40:18.30 ID:uzn4bewm
>>516
そもそも、プログラミング初心者というのなら、書籍は利用するな
が正解だね。敢えて言えばリファレンス本とか逆引き本程度。ソレ以外
は買う価値全くと言っていいほど無い。

で、サイトだが、これも同じ。むしろサイトのほうが見る価値ない。汚い
文章と説明不足な説明、薄汚いコードに、肝心のポイントが書いてない。
酷いのになるとサンプルもなければ、デモもない。

なので、一つ自分で事例を作って、リファレンスを中心に、メソッド一つひとつ
を覚えるのがオススメ。
518デフォルトの名無しさん:2014/12/26(金) 12:22:28.73 ID:bqhfMHzD
>>513
はい、入門サイトとリファレンス読んできます
アドバイスありがとうございます

>>514
VBで書いたものは紛れもなく自分で書いたものです
既に他言語ではあるが作れたから書き直しもいけるだろ〜って甘え考えでVBのコードをJavaScriptにぐぐりながら置き換えていたら
見事に躓きました、ほかの方も言っていたようにJavaScriptを勉強するというスタンスで考え直します

>>515
マルチポストについて理解を改めました、本当にありがとうございます
今回の書き込みで本件のこちらへの投稿は最後に致します
「何も基礎勉強をせずにとりあえず、書いてみました」
まさにそのとおりです、返す言葉が見当たりません、基礎から学び直してみます

皆様ありがとうございました
519デフォルトの名無しさん:2014/12/26(金) 13:50:07.82 ID:/JzV4Kay
>>516
参考書は>>498
特に『DOMScripting 標準ガイドブック』は初心者向き

参考サイトはMDN, MSDN
「仕様書を読め」といいたいところだが、初心者に仕様書は敷居が高いと思われるので、ステップアップしたときに仕様書に手を着けるぐらいでちょうどいいと思う
520デフォルトの名無しさん:2014/12/26(金) 18:15:47.44 ID:GaLPZB3p
アドバイスありがとです
そもそも一番最初に学ぶ言語でjavascriptはおすすめなんでしょうか?
やりたい事はブラウザでやる操作の自動化などです
521デフォルトの名無しさん:2014/12/26(金) 20:17:20.26 ID:QcW6nBTg
>>520
やりたいのがクローラ、スクレイパーなら妥当じゃないかも
522デフォルトの名無しさん:2014/12/27(土) 07:59:11.95 ID:ZuqdqGf3
>>520
クライアントサイドJavaScriptではブラウザの操作を乗っ取ることは出来ない
Selenium 辺りを検討したら?
523デフォルトの名無しさん:2014/12/27(土) 09:28:46.04 ID:jKPvE26O
フォームの自動入力とか、1ページで完結するならJavaScriptのブックマークレットで十分。
複数のページをまたぐ操作についてはAjaxだけでできることもあるし、できなくてもブラウザの拡張機能を自分で作ればJavaScriptだけでほぼ可能。
まあ、手段をいろいろ知ればできることの幅も広がるから、いろいろやってみたらー。
524デフォルトの名無しさん:2014/12/27(土) 09:33:45.57 ID:nhoVbdaI
Jscriptに不可能はない
※IEで表示, 操作の可能なサイトに限る
525デフォルトの名無しさん:2014/12/27(土) 10:13:46.56 ID:PvBo18ox
ブラウザのエクステンションもjavascriptだったと思うから個人使用なら
わりと何でも自由に出来るかも
526デフォルトの名無しさん:2014/12/27(土) 10:35:53.40 ID:AKOS2ykD
GASくみあわせると便利
527デフォルトの名無しさん:2014/12/27(土) 15:02:18.31 ID:xN3w68Mv
ブックマークレットはブラウザ操作を乗っ取っているわけではない
JScriptはJavaScriptではない
確かに独自拡張を含めていいならブラウザ操作が出来るかもしれないが
528デフォルトの名無しさん:2014/12/27(土) 16:32:04.92 ID:xlmmnL4B
「ブラウザでやる操作」の定義がよく分からないからなんとも言えないけどなw
もっと具体的にやりたいことを言ってくれれば選択肢は狭まるよ
529デフォルトの名無しさん:2014/12/27(土) 16:53:45.82 ID:G3aQBnsE
何言ってだこいつ
530デフォルトの名無しさん:2014/12/27(土) 18:57:04.11 ID:MwQYLNUR
超汚染人
531デフォルトの名無しさん:2014/12/29(月) 00:42:00.52 ID:sj3ADqcm
>>516
>>518
3日でマスター HTML5 & CSS3、鳥羽薫、2013

はじめてのJavaScript、秀和システム
掌田津耶乃(しょうだ つやの)、2013

10日でおぼえる jQuery 入門教室 第2版
532デフォルトの名無しさん:2014/12/29(月) 04:44:47.78 ID:sj3ADqcm
>>503
>画像URLに移動する
画像URLは、"〜.jpg","〜.png"などだけど、
移動するという意味がわからない。移動など出来ない。
表示したいの?または、ダウンロードしたいの?

また、検索して、2つ以上一致した場合はどうするの?
最初のものだけを処理するの?

var i_want = "20141225";
var url_a = []; // 結果配列
var tmp;
var len = 0; // 配列に追加後の要素数

// jQueryを使う
// すべての<img>タグに対して処理する
$('img').each(function(){

// thisは今処理中のタグで、その'src'属性に、
// 検索パターンが含まれていれば
tmp = $(this).attr('src');
if(0 <= tmp.search(i_want)){

// 結果配列に追加して、追加後の要素数を返す
len = url_a.push(tmp);
}
})

if(1 <= len){
// url_a 配列に格納されている
}
533532:2014/12/29(月) 05:38:58.36 ID:sj3ADqcm
訂正
文字列はプリミティブ型なので、代入するとコピーされるため、
変数tmpも消して下さい

// thisは今処理中のタグで、その'src'属性に、
// 検索パターンが含まれていれば
>tmp = $(this).attr('src');
>if(0 <= tmp.search(i_want)){
if(0 <= $(this).attr('src').search(i_want)){

// 結果配列に追加して、追加後の要素数を返す
>len = url_a.push(tmp);
len = url_a.push($(this).attr('src'));
534デフォルトの名無しさん:2014/12/29(月) 14:06:28.98 ID:PgqMMwl0
jQueryなんて使わなくても、querySelectorで一行で書けるのに…
535デフォルトの名無しさん:2014/12/29(月) 14:46:35.82 ID:GQVDlkBs
querySelectorは取ってきた後ループでぐるぐる回さないといけないからな。
それにセレクタを拡張する機能もないし、jQueryの便利な擬似クラスも使えないし
まだまだ、jQueryの劣化版って所かな。
536デフォルトの名無しさん:2014/12/29(月) 15:38:09.20 ID:eDahjybv
ループが嫌ならforEachでできる
そもそも属性セレクタを使えばそれすら要らない
ライブラリであるjQueryの方が機能が広いのは当たり前

最近のライブラリが便利なのは事実だが、そのせいで既存のAPIを知らずに過ごすのはかなりもったいないぞ
537デフォルトの名無しさん:2014/12/29(月) 15:42:43.44 ID:NKff8BVB
いえ、forEachも使いたくないんですよ。
538536:2014/12/29(月) 15:52:46.23 ID:IcHAHC1y
俺が意見する意味はなかったようだな
レス汚しすまなかった
539デフォルトの名無しさん:2014/12/29(月) 15:55:12.42 ID:/fu+2Q3X
forEach より Array.prototype.map の方が使いやすい
540デフォルトの名無しさん:2014/12/29(月) 21:17:34.66 ID:ubCjD1zY
そもそも、初めの一つの要素であることは>>512で書かれてるし、>513で標準コードが書かれているからなあ
jQueryを使って回答する意義が見当たらない
541デフォルトの名無しさん:2014/12/29(月) 21:40:46.76 ID:6+Y487WQ
最初の方だけ読んでレスしちゃったんでないの
542デフォルトの名無しさん:2014/12/30(火) 08:59:11.86 ID:1vW9yBo+
>>540
> jQueryを使って回答する意義が見当たらない

あるとすれば、コードがシンプルになって
可読性とメンテナンス性が高くなるぐらいかな?
まあ。それはプログラミングで一番重要なことなんだけれども

たとえば、>>513だとこうなる。

location.href = $('img').attr('src');

これ以上減らせないんじゃないか?っていうぐらい減った。
543デフォルトの名無しさん:2014/12/30(火) 09:08:42.58 ID:qF0mG1f3
>>542
そもそも、jQueryで質問してるならともかく、そうでないのなら
標準的なコードで回答するのが、常識。勝手に外部ライブラリ
使って答えるのは、タダの自己満。

コードが減ることが美徳と思ってるなら、それは大きなお間違いだ。
544デフォルトの名無しさん:2014/12/30(火) 09:17:57.02 ID:JWtJz6A1
javascript が糞と呼ばれる所以
545デフォルトの名無しさん:2014/12/30(火) 09:19:19.92 ID:1vW9yBo+
>>543
jQuery布教してるんで構わないでください(笑)

コードが減ることが美徳なんて言ってないですよ?

jQueryを使うとコードが減ることは事実だと言ってるだけです。
ライブラリっていうのはそういうものです。
使わなくても書けるけど、使ったらもっと楽になる。

事実でしょ?
546デフォルトの名無しさん:2014/12/30(火) 09:25:09.47 ID:qF0mG1f3
>>545
お前がやってることは嵐行為と変わらない。
そして、質問者の学習を妨げてるってことを知れ。

事実かどうかなど お前の自己満 なんだよ。消えろ。
547デフォルトの名無しさん:2014/12/30(火) 09:29:29.27 ID:1vW9yBo+
>>546
質問者にとって役に立つかどうかで考えてください。

あなたのその罵倒するだけのレスがなにか役に立ちますか?

私のレスを見たら、jQueryを使えば短くかけることがわかるでしょう。
jQueryを使っていないのは、おそらくjQueryを知らないということ。
そういう人に知識を与えているのです。

私のレスは役に立っています。

あと、消えろと言われましたが、宣言しておきます。消えません。
どうしますか? 私を消す方法でも探しますか?
548デフォルトの名無しさん:2014/12/30(火) 11:03:52.80 ID:xh37xcGz
ここは本スレを追い出されたっつうか自分から隔離されにやってきたライブラリ信者の隔離所だから諦めろ
549デフォルトの名無しさん:2014/12/30(火) 12:27:45.21 ID:wVgpUxDY
>>542
>513を読めば、

location.href = document.getElementsByTagName('img')[0].src;

で解決できることが分かる。勿論、querySelector でも良い。
よって、jQueryを使う必要はない。
布教活動を質問スレでやるべきではない。以上。
550デフォルトの名無しさん:2014/12/30(火) 13:33:43.92 ID:1vW9yBo+
document.getElementsByTagName('img')[0].src;

VS

$('img').attr('src');


2倍以上もあるこの差が小さくなる気配はない。
551デフォルトの名無しさん:2014/12/30(火) 13:47:01.61 ID:foSjpWXy
さすが信者は論点が理解できてないなw
552デフォルトの名無しさん:2014/12/30(火) 14:01:57.95 ID:X3KBQjcw
>>549
あんた真面目に答えたいならhp板行きなよ
ここは隔離所なんだって
たまに馬鹿がマジな質問をしに来るけど
553デフォルトの名無しさん:2014/12/30(火) 15:09:40.49 ID:fKY8fT2j
布教って…
言ってることがどっかの啓蒙荒らしと変わらんがな
554デフォルトの名無しさん:2014/12/30(火) 15:56:00.71 ID:JWtJz6A1
覚えることを増やしたがらないのはアスペ
555デフォルトの名無しさん:2014/12/30(火) 15:58:45.35 ID:1vW9yBo+
(略)、このようにECMAScript3でもできるのだから
ECMAScript5を使う必要はない。

反論

ECMAScript5を使わなくてできたとしても、
ECMAScript5を使えばもっと簡単になるので
使ったほうが良い。

jQueryを、以下同文
556デフォルトの名無しさん:2014/12/30(火) 16:28:21.20 ID:RLwGMLcT
ライブラリを使わないと処理が軽いのは当然だし、ライブラリを利用すると記述量が少ないのも当然。
どっちにも利点欠点はある。
どちらを取るかは製作者の方針次第。
一体何を言い争ってるの??
557デフォルトの名無しさん:2014/12/30(火) 16:29:35.60 ID:1vW9yBo+
知らないよ。jQueryを使えば短くかけると実例見せてるだけなのに
ライブラリを使った方法を書くなってしつこいんだよ。
558デフォルトの名無しさん:2014/12/30(火) 17:35:02.43 ID:xnEJfdma
>>556
>>512-513,518で終わってる話に対して無能な働き者が暴れてるだけよ
559デフォルトの名無しさん:2014/12/30(火) 17:48:13.55 ID:1vW9yBo+
それは>>518の後にレスした人全員か。
560デフォルトの名無しさん:2014/12/30(火) 18:15:51.79 ID:zPDAvYWj
お前だよお前
561デフォルトの名無しさん:2014/12/30(火) 18:25:37.15 ID:wVgpUxDY
3日前に解決した問題にjしゃしゃり出るのはQuery布教の為。
質問者自身の事は何も考えてないんだろう。
562デフォルトの名無しさん:2014/12/30(火) 19:56:41.87 ID:1vW9yBo+
>>560
それはおかしいね。

俺は>>518よりも後のレスに、
レスしているだけだよ。
563デフォルトの名無しさん:2014/12/30(火) 19:57:16.98 ID:1vW9yBo+
> 質問者自身の事は何も考えてないんだろう。

そりゃ、俺がレスしているのは、
質問者じゃないしね。
564デフォルトの名無しさん:2014/12/31(水) 14:21:32.09 ID:XqPZ1y8F
imgのsrc取るためにjqueryなんて入れるのは馬鹿らしい
565デフォルトの名無しさん:2014/12/31(水) 17:57:01.84 ID:nNksjHi7
他にも色々使うでしょw
566デフォルトの名無しさん:2014/12/31(水) 18:04:32.15 ID:6jnj5XbX
初心者が初めからjQueryを使うのはオススメできないなあ
コピペプログラマになりかねない
まずは純粋なJavaScriptに慣れてから、それからライブラリを使って欲しい
567デフォルトの名無しさん:2014/12/31(水) 22:05:39.00 ID:ZlRTrdvf
jQueryぐらいになると、すべての会社が推奨しているから、
何もしないでも最初から、メモリに読み込まれているかも

それに最初からPCに保存されていて、
ダウンロードすらしないかも

だから何も考えずに、使ってもよいかも
568デフォルトの名無しさん:2014/12/31(水) 22:30:18.72 ID:69RlDRjx
初心者が初めからC#を使うのはオススメできないなあ
コピペプログラマになりかねない
まずは純粋なCに慣れてから、それからC++を使って欲しい
569デフォルトの名無しさん:2014/12/31(水) 22:37:26.16 ID:NpGsVftv
そこはC++じゃなくてDにしてほしかった
570デフォルトの名無しさん:2014/12/31(水) 23:08:15.25 ID:nNksjHi7
>>566
純粋なJavaScriptでもコピペするんだから関係ない。

違う問題を混ぜ込まないように
571デフォルトの名無しさん:2014/12/31(水) 23:36:37.13 ID:HU6510No
2015年もjQueryは安泰です
572 【大吉】 【90円】 :2015/01/01(木) 01:07:39.33 ID:2VBywPBG
初心者が初めからC#を使うのはオススメできないなあ
コピペプログラマになりかねない
まずは純粋なCに慣れてから、それからDを使って欲しい
573デフォルトの名無しさん:2015/01/01(木) 01:32:49.01 ID:SkfMjz4N
JavaScriptも理解してない人にライブラリ本から始めるとか有り得ない
PHP始めずにWordPressの改造方法を学ぶようなもの
574 【牛】 【1248円】 :2015/01/01(木) 09:20:47.12 ID:L+/hQmkU
初心者が初めからBASICを使うのはオススメできないなあ
コピペプログラマになりかねない
まずは純粋なハンドアセンブルに慣れてから、それからCP/M-80を使って欲しい
575デフォルトの名無しさん:2015/01/01(木) 10:27:22.35 ID:WrKu7xyp
さよならIE 新ブラウザ「Spartan」がWindows10に搭載か
http://anago.2ch.net/test/read.cgi/bizplus/1419910661/
Spartanは、IEと同じレンダリングエンジンおよびJavaScript を採用しているものの、
より軽量化されたブラウザに仕上がっているほか、FirefoxのアドオンやChromeの
エクステンションに似た拡張機能をサポートしているんだとか。
576デフォルトの名無しさん:2015/01/01(木) 10:55:20.40 ID:o2mcErt8
ま、ム板なら当然そういう意見も出るだろうね
Web制作板じゃそういうのどうでもいいしコピペ一発で動くことが最も重要だから
577デフォルトの名無しさん:2015/01/01(木) 11:51:12.14 ID:OKf1yMDD
> コピペ一発で動くことが最も重要だから

だからお前はいつまでたってもjQuery使えないんだよw
578デフォルトの名無しさん:2015/01/01(木) 11:58:45.98 ID:o2mcErt8
579デフォルトの名無しさん:2015/01/01(木) 12:23:18.54 ID:OKf1yMDD
図星かw
580デフォルトの名無しさん:2015/01/01(木) 12:29:22.32 ID:Ru6Ispr4
最近jQueryが更新されたそうですが、何が変わったかどこのページ見れば分かりますか?
581デフォルトの名無しさん:2015/01/01(木) 12:36:56.47 ID:OKf1yMDD
最近更新されたのは、セマンティクスバージョニングにおける
PATCHの部分だから機能的には何も変わってないよ。

http://shijimiii.info/technical-memo/semver/
> バージョン番号 MAJOR.MINOR.PATCH を前提として、
>
> 1. あなたが互換性のない API の変更を行うときに MAJOR バージョンを、
> 2. 後方互換性のある方法で機能性を追加したときに MINOR バージョンを、
> 3. そして、後方互換性のあるバグ フィックスをしたときに PATCH バージョンを、
> インクリメントします。

バグ修正内容はブログにも書いてあるけど、GitHubのIssueを見ろってさ

http://blog.jquery.com/2014/12/18/jquery-1-11-2-and-2-1-3-released-safari-fail-safe-edition/

so you can use this GitHub Issues query to review all the tickets.
https://github.com/jquery/jquery/issues?q=milestone%3A1.11.2%2F2.1.3
582580:2015/01/01(木) 12:47:30.80 ID:Ru6Ispr4
なるほど、ありがとうございます!
バージョンのつけ方にもルールがあったんですね。
英語は苦手ですが頑張って読んでみます
583デフォルトの名無しさん:2015/01/01(木) 13:01:07.82 ID:o2mcErt8
やたら攻撃的な辺り、図星なのはそっちっぽいけどね
584デフォルトの名無しさん:2015/01/01(木) 13:05:44.51 ID:2VBywPBG
おれがムラタだ
585デフォルトの名無しさん:2015/01/01(木) 13:06:27.06 ID:dGu/Njfs
>>583
役に立たないレスしかな無いのに、なんでここにいるの?
586デフォルトの名無しさん:2015/01/01(木) 21:35:57.83 ID:DJ7V2FZJ
jQueryを布教しに来たに決まってるじゃん
587デフォルトの名無しさん:2015/01/01(木) 21:55:03.48 ID:9nxWatXJ
質問するのに邪魔なのでjQuery布教は余所でやって下さい
588デフォルトの名無しさん:2015/01/02(金) 20:53:09.97 ID:jpvNiWQX
javascript歴2週間のド素人ですが、
同一ドメイン内のhtmlの高さを取得するようなことは
可能でしょうか?
589588:2015/01/02(金) 20:56:09.99 ID:jpvNiWQX
質問が舌っ足らずですみません。

同一ドメイン内にあるhtmlファイルのbodyの高さを
取得することは、そもそも可能なのかなということを
知りたかったです。
590デフォルトの名無しさん:2015/01/02(金) 21:55:45.05 ID:5zegkdK7
iframeで
591デフォルトの名無しさん:2015/01/02(金) 21:57:11.53 ID:EagZrEA1
>>589
iframe なら iframe.contentWindow.document.body を参照すれば body の高さを取得出来る
592588:2015/01/02(金) 22:47:01.35 ID:jpvNiWQX
貴重なアドバイスありがとうございます。

iframeを使えば良いという事ですが、
裏を返せば、iframeを使わなければ
無理ということでしょうか?
593デフォルトの名無しさん:2015/01/02(金) 22:49:26.80 ID:lHEhBR4h
ただしiframeの中のドキュメントがロードされてない状態だと
正しい値を取得できないからiframe内のドキュメントの
onloadを監視する必要があるが、onload監視前にページ
がロードされてしまう時もあるからじゃあページがロード
されているかreadyStateで調べればいいと思うがブラウザに
よってabout:blankがロード完了された状態になるから注意な
594デフォルトの名無しさん:2015/01/02(金) 23:32:13.02 ID:fOLvOZeN
>>592
body要素の高さはJSの他にHTMLやCSSによっていくらでも変わるから
既に指摘されてるようにiframeで一旦DOMにしないと正確な値はわからないよ

そのHTMLとそれが読み込むファイルを解析して予測することもできるけど
必要な手間や時間を考えると個人では現実的な方法ではない
595デフォルトの名無しさん:2015/01/03(土) 13:46:35.72 ID:HrceL2XY
>>592
iframe 出なくても良いが、DOMに読み込まれなければ高さも計算されない
DOMに存在しないものに高さなんてあるわけないだろう?
596デフォルトの名無しさん:2015/01/03(土) 13:52:41.51 ID:duDbuP4G
セイロン
597588:2015/01/04(日) 00:11:39.15 ID:Hxx9xAHN
なるほど、理屈が解りました。
javascriptは奥が深そうですね。

勉強になります。ありがとうございました。
598デフォルトの名無しさん:2015/01/05(月) 16:03:25.15 ID:eJgoci1g
現行スレ


+ JavaScript の質問用スレッド vol.122 +©2ch.net
http://peace.2ch.net/test/read.cgi/hp/1420095379/l50
599デフォルトの名無しさん:2015/01/06(火) 14:41:28.29 ID:Chx16XUD
質問失礼。
出力ファイルの名称と拡張子を指定するにはどうすればいいでしょうか?
環境は、IE最新verです。
よろしくお願いします。
600デフォルトの名無しさん:2015/01/06(火) 15:20:14.59 ID:V8MvX1Xc
>>599
本当に失礼ですね

それだけじゃ、IEからエクスポートしたいのか、読み込ませるファイルの出力
なのかもわからない上に、IEから操作するのか、別のアプリケーションからIE
に対して操作するのかもわからいですね。

人に質問するときには、5W1Hは守りましょう。
601デフォルトの名無しさん:2015/01/06(火) 15:22:09.05 ID:qFEHwEtk
レスポンスヘッダーのContent-Dispositionの事かなあ?
クライアント側でどうこうする話じゃないと思うけど
602599:2015/01/06(火) 15:23:36.34 ID:A7O8bZKT
すみませんでした。
取り下げます
603デフォルトの名無しさん:2015/01/06(火) 15:54:58.27 ID:A/J/5sHU
ただ質問を具体化できるほど知識がないだけじゃないの
ブラウザならDLさせるんだろうからa要素のdownload属性でググれ
604デフォルトの名無しさん:2015/01/07(水) 13:37:59.03 ID:xGXKWYdK
>>603
横からすみません
iPhoneのSafariではdownload属性が使えないのですが、その代替案として何を使えば良いでしょうか。
605デフォルトの名無しさん:2015/01/07(水) 20:27:51.78 ID:xubDtkKY
対応していないブラウザのことまで考えてレスできないとだめだな。
出来ますと言ったのに、あとから出来ませんでしたっていうことになる。
どこまでサポートできるかを調べるのは当たり前で、
それができなければ仕事としては未熟者。
606デフォルトの名無しさん:2015/01/07(水) 22:23:00.12 ID:w9y1bFBC
うむ、残念ながらIEの最新版でも未対応
607デフォルトの名無しさん:2015/01/07(水) 23:38:44.33 ID:eSXyvAZq
まずXHRで取得してからBlobでも使うしかないかな
こんなの>>601も言うようにクライアント側でやっても面倒なだけだよ
608デフォルトの名無しさん:2015/01/08(木) 09:02:16.87 ID:GBvWCT9t
取り下げている質問にネチネチ答え続けるのは仕事としては熟練者なのか
609デフォルトの名無しさん:2015/01/08(木) 09:27:38.66 ID:PNOntX36
仕事なら利益にならないことは捨てる勇気も必要
610デフォルトの名無しさん:2015/01/08(木) 10:14:27.65 ID:5mjkSKSQ
関連する別の質問の方でしょ
611デフォルトの名無しさん:2015/01/08(木) 13:34:58.35 ID:M5MCLhzk
>>610
>>605>>603を非難しているわけで取り下げられた質問にネチネチと非難しているわけだが、回答は誰もしてないな

曖昧な質問には曖昧な回答しかつかないもの
対象ブラウザか明示されてないのに時間をかけてクロスブラウザ検証する義理もないと思うがな
ボランティアの質問スレに求めすぎだろ
他人に丸投げできる程度の質の高い回答を求めるなら対価を払うべき
612デフォルトの名無しさん:2015/01/08(木) 21:45:39.10 ID:NyXuGLcn
検証する必要はない。
Download属性は比較的最近出来たばかりで
知らない人も多いっていう常識さえ知っていればいい。
それを知らないならばニワカなわけで。
613デフォルトの名無しさん:2015/01/08(木) 22:14:26.21 ID:uFjRiagB
他人が知っているか、知らないかはどうでもいい
a[href] はW3C勧告された当時から HTML5 で定義されたもの
それを「比較的最近出来たばかりで知らない人も多い」というなら HTML5 も CSS3 も使わなければいい
https://html.spec.whatwg.org/multipage/semantics.html#the-a-element
http://www.w3.org/TR/html5/text-level-semantics.html#the-a-element
614デフォルトの名無しさん:2015/01/08(木) 23:59:44.45 ID:zpCz65CW
そもそもこのスレは仕事でもなんでもないんだから
>>605は意味のないただの愚痴レスとして流しときゃいいんだよ
615デフォルトの名無しさん:2015/01/09(金) 05:41:21.84 ID:GHJOtrq4
ニワカじゃなくて情弱
616デフォルトの名無しさん:2015/01/09(金) 08:05:39.30 ID:i9OUJ7ju
自分だけは情弱じゃないという前提
617デフォルトの名無しさん:2015/01/09(金) 08:06:57.04 ID:50+lIvWd
お金にならないことはやらない
人生それほど暇じゃない
618デフォルトの名無しさん:2015/01/09(金) 08:08:06.90 ID:i9OUJ7ju
大丈夫、ここに書き込んでる時点で十分暇だから
619デフォルトの名無しさん:2015/01/09(金) 08:09:03.42 ID:rJhs2R4+
>>617
なんで、便所に落書きしてんの?
暇じゃんww
620デフォルトの名無しさん:2015/01/09(金) 08:43:38.94 ID:50+lIvWd
意外と喰い付きの良い餌だったか
621デフォルトの名無しさん:2015/01/09(金) 08:45:07.81 ID:i9OUJ7ju
釣りは海か川か湖で
622デフォルトの名無しさん:2015/01/09(金) 12:04:59.35 ID:bUQarfkM
え、このスレで回答するとお金がもらえるのか?!
623デフォルトの名無しさん:2015/01/09(金) 12:29:18.97 ID:2DEvVfW1
2chの運営様なんじゃね
624デフォルトの名無しさん:2015/01/15(木) 16:55:05.43 ID:DICmco6v
window.hoge = function(){ alart('hoge'); };
だと window.hoge(); 出来るのですが

window.setAttribute('hoge', function(){ alart('hoge'); });
だと怒られます

やりたいことは
window に関数を沢山登録するのに
window.hoge = hoge;
window.hage = hage;
...
と沢山書くのが鬱陶しいので
[hoge, hage, ...].forEach(function(e){window.setAttribute(e.name, e);});
とか出来ないかということです
625デフォルトの名無しさん:2015/01/15(木) 17:37:16.37 ID:fdbxnjOP
setAttribute()はDOMの関数。ネイティブオブジェクトの関数ではない
. の代わりに [ ] を使えばおk

[hoge, hage, ...].forEach(function(e){window[e.name] = e;});
626デフォルトの名無しさん:2015/01/15(木) 18:23:26.33 ID:DICmco6v
[hoge, hage, ...].forEach(function(e){Object.defineProperty(window, e.name, {get: function(){return e;}});});

で逝けたんですが

>>625 さんの方がシンプルなのでそっちにします

本当にありがとうございました
627デフォルトの名無しさん:2015/01/15(木) 18:27:49.70 ID:KN02CzBA
CoffeeScript 面白いね
628デフォルトの名無しさん:2015/01/15(木) 18:30:10.35 ID:msM6dEb0
DOM というより Element だね
window は DOM オブジェクトだが、Element ではないので setAttribute は未定義
629デフォルトの名無しさん:2015/01/21(水) 12:16:55.25 ID:p0u5bixB
iPhoneやAndroidで、Javascriptのwindow.navigator.vibrate()は、使えますか?
WEBページから端末を振動させたいのです。
630デフォルトの名無しさん:2015/01/21(水) 18:49:21.74 ID:y+NQuVst
>>629
各ブラウザとOSとハードウェアでサポートしてるかどうかによる。
コードを書くことはできるが、サポートされてない環境ではただ無視される。
631デフォルトの名無しさん:2015/01/21(水) 20:15:14.42 ID:BO7GsDYw
× コードを書くことはできるが、サポートされてない環境ではただ無視される。
○ サポートされてない環境では無視するようにコードを書かないとエラーになる
632デフォルトの名無しさん:2015/01/21(水) 20:21:32.83 ID:BO7GsDYw
iPhoneはサポートしてないって書いてあるね。
Androidは新しいやつなら対応しているかもしれない
633デフォルトの名無しさん:2015/01/21(水) 20:44:10.34 ID:VHJhqEss
http://mobilehtml5.org/
ここの下から2番目か
634デフォルトの名無しさん:2015/01/21(水) 21:04:16.08 ID:8vq64F8K
娘さんに買って貰った泥タブでWebサイトを閲覧したら
突然震え出すタブに驚きお亡くなりになるお爺ちゃんまで想像した
635デフォルトの名無しさん:2015/01/21(水) 22:55:35.13 ID:OM+rl6vx
コード全量載せます。
期待結果:AAAのalert後にBBBのalertが出る
現在:オブジェクトは 'BBB' プロパティまたはメソッドをサポートしていません。

原因がいまいちわからん。。。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title></title></head>
<script type="text/javascript">
var inherits = function inherits(sub, sup) {
var F = function F() { };
F.prototype = sup.prototype;
sub.prototype = new F();
sub.prototype.constructor = sub;
};
function Common() {};
Common.prototype.AAA = function AAA() { return 'AAA'; };
function Point() { Common.call(this); };
Point.prototype.BBB = function BBB() {return 'BBB';}
inherits(Point, Common);
function test() {
var ponit = new Point();
var aaa = ponit.AAA();
alert(aaa);
var bbb = ponit.BBB();
alert(bbb);
};
</script>
<body><input type="button" onclick="test()" /></body>
</html>
636デフォルトの名無しさん:2015/01/21(水) 23:27:37.03 ID:mXw559ef
PointがAAAとBBBを持ってないからだろw
637デフォルトの名無しさん:2015/01/21(水) 23:28:02.82 ID:pegeWxDs
inheritsの中でprototype上書きしてね?
inheritsの後でPointのprototype設定しろ
638デフォルトの名無しさん:2015/01/21(水) 23:40:49.51 ID:OM+rl6vx
>>637
完璧だ
ありがとう
639デフォルトの名無しさん:2015/01/22(木) 00:03:06.08 ID:6tHSMorG
ブラウザでF12押せばオペラとSafari以外はデバッガ表示するだろ
聞く前に見ようぜ
640デフォルトの名無しさん:2015/01/22(木) 00:34:18.69 ID:ufJxzZSo
>>639
見た結果なんや・・・
上書きってのがすっぽり抜けてた
641デフォルトの名無しさん:2015/01/22(木) 12:52:26.05 ID:cnnYwRos
javascriptのエラーメッセージは
たまに判り難いのがときどき沢山ある
642デフォルトの名無しさん:2015/01/22(木) 13:26:56.46 ID:vuNgLcdC
TypeError等のES規定の例外ぐらいは頭に入れておいた方がいいと思う
ES規定じゃなくても仕様書を読めば該当エラーの詳細が分かるけどね
643デフォルトの名無しさん:2015/01/22(木) 14:06:18.50 ID:h/ppEIVr
該当箇所さえわかればどうとでもなるしエラーが出るだけマシだな
問題は想定外の動作をしてるのにエラーが出なかった時だ
たいてい解決してみれば単純ミスなことが多いがとにかく時間がかかる
デバッガ?使ったことねーよ
644デフォルトの名無しさん:2015/01/22(木) 14:31:58.82 ID:qQrXKyQm
使えよ
645デフォルトの名無しさん:2015/01/22(木) 14:46:04.56 ID:g/Z8dMNk
デバッガ使って一つ一つステップ進めてPointをウォッチ見てれば
inheritsの中で上書きされてるって事が分かるのにな
646デフォルトの名無しさん:2015/01/22(木) 15:54:47.42 ID:cnnYwRos
>>643
それコンパイル通ったのに動かねーとか言ってるくらい恥ずかしい
647デフォルトの名無しさん:2015/01/22(木) 21:04:26.97 ID:lh8u5jbd
lodash 3.0 リリース間近!

https://github.com/lodash/lodash
3.0-preから-preが外れました!


スレが多すぎてどこに書けばいいかわからないので
関連スレすべてにマルチポストしています。m(__)m
648デフォルトの名無しさん:2015/01/22(木) 22:51:19.42 ID:qQrXKyQm
じゃあ死ね
649デフォルトの名無しさん:2015/01/23(金) 09:48:03.30 ID:db6c84vZ
>>641
> javascriptのエラーメッセージは
> たまに判り難いのがときどき沢山ある
Chromeデバッガを使うべし
650デフォルトの名無しさん:2015/01/25(日) 11:07:18.77 ID:C5u36+ml
デバッガの使い方がわからね
651デフォルトの名無しさん:2015/01/25(日) 11:31:53.18 ID:JhgO84F7
Chromeの例外はstack取れてうれしい
652デフォルトの名無しさん:2015/01/25(日) 11:42:30.82 ID:CVtB1D/3
>>650
解説してるサイトたくさんあるし適当にいじってればすぐおぼえられる

英語がよめないとか言うんだったらFireFoxの方つかえ
653デフォルトの名無しさん:2015/01/25(日) 12:19:44.85 ID:gXefnP2k
ブラウザの中ではFiredox良いよね
654デフォルトの名無しさん:2015/01/25(日) 12:52:56.49 ID:CVtB1D/3
FireDogs
655デフォルトの名無しさん:2015/01/25(日) 23:30:23.56 ID:NuifRbBE
以下のhtmlに埋め込まれたJavaScriptを外部ファイルに書き出す場合はどう書けばいいか教えてください。

<SCRIPT language="JavaScript">
<!--
// ランダムに背景画像を変更する
bgc = new Array();
bgc[0] = "url(bg1.gif)";
bgc[1] = "url(bg2.gif)";
bgc[2] = "url(bg3.gif)";
n = Math.floor(Math.random()*bgc.length);
document.body.style.backgroundImage = bgc[n]
//-->
</SCRIPT>
656デフォルトの名無しさん:2015/01/25(日) 23:37:51.52 ID:TwOkGPs6
script要素のinnerHTMLから正規表現でも使ってコメント行を削る
あとはサーバーに送るなりテキストファイルにでもしてDLするなり
657デフォルトの名無しさん:2015/01/25(日) 23:50:43.16 ID:NuifRbBE
>>656
ありがとうございます。
うまくできました。
658デフォルトの名無しさん:2015/01/25(日) 23:51:32.92 ID:TwOkGPs6
…まさかないとは思うけど一応、もし別のファイルにしたいだけだったら
JavaScriptの部分をエディタに貼り付けて.jsの拡張子で保存してscriptタグのsrc要素にパスを入れる
その場合はHTMLの初心者用スレでも探して詳しく聞くといい
659デフォルトの名無しさん:2015/01/25(日) 23:52:18.91 ID:TwOkGPs6
と思ったら要らぬ心配だったか
660デフォルトの名無しさん:2015/01/26(月) 00:59:39.80 ID:l2ITpkaW
>>659
ご心配おかけしてすみませんです。
661デフォルトの名無しさん:2015/01/26(月) 12:45:02.83 ID:l2ITpkaW
すいみません、質問です。
>>655のスクリプトを一つのDIV内のみで表示する方法をご存知でしたらお教え下さい。
662デフォルトの名無しさん:2015/01/26(月) 12:48:15.98 ID:N/KvzvOo
それcssの話だからスレ違い
663デフォルトの名無しさん:2015/01/26(月) 12:55:06.68 ID:fKBxa0Lt
CSS単独じゃできなくね
>>655でBODYからそのDIVに対象を書き換えるだけだよ
664デフォルトの名無しさん:2015/01/26(月) 16:22:34.05 ID:enN39Ek5
webprogかhpかの板にいって聞いたほうがいい
665デフォルトの名無しさん:2015/01/26(月) 16:27:18.62 ID:EJiuB1HV
663 で答え出てるじゃん
666デフォルトの名無しさん:2015/01/26(月) 17:04:55.13 ID:l2ITpkaW
できました。
指定したいDIVにIDを設定し(今回は[js_point])
そのIDを読み込んで決定し(var object = document.getElementById("js_point");)
document.bodyの部分をobjectに置き換えたらうまくいきました。

bgc = new Array();
bgc[0] = "url(bg1.gif)";
bgc[1] = "url(bg2.gif)";
bgc[2] = "url(bg3.gif)";
n = Math.floor(Math.random()*bgc.length);
var object = document.getElementById("js_point");
object.style.backgroundImage = bgc[n]

JavaScriptは触ったことなかったけどなんとかなるもんですね
ありがとうございます。
667デフォルトの名無しさん:2015/01/27(火) 00:35:44.21 ID:YQSfawfj
Javaとは一切関係ないくせにお調子に乗りおって…。
668デフォルトの名無しさん:2015/01/27(火) 19:42:20.64 ID:h7VibLL/
連想配列の値に配列は使えますか?
また値の配列にpushしたいときはどう書けばいいですか?
669デフォルトの名無しさん:2015/01/27(火) 19:46:46.44 ID:Ps3QIneE
試して分かる事は試せ
670デフォルトの名無しさん:2015/01/27(火) 20:11:32.78 ID:h7VibLL/
array = {};
array["test_1"].push(data_1);

こんなんじゃだめでしたどうしたらいいですか?
671デフォルトの名無しさん:2015/01/27(火) 20:18:42.99 ID:t5/SbndD
>>670
array = {};
array["test_1"] = [];
array["test_1"].push(data_1);

変数名arrayにオブジェクトを代入してるのに違和感
672デフォルトの名無しさん:2015/01/27(火) 20:39:45.54 ID:h7VibLL/
>>671
できましたありがとうございます
673デフォルトの名無しさん:2015/01/27(火) 21:56:12.22 ID:w1lsmrbK
>>671
>変数名arrayにオブジェクトを代入してるのに違和感

PHP畑の人なんじゃね?あの言語は配列という名の連想配列しか無いし
674デフォルトの名無しさん:2015/01/27(火) 22:10:01.15 ID:5+v0eJ06
javascriptと同じじゃないか
675デフォルトの名無しさん:2015/01/27(火) 22:29:32.99 ID:Qk/FYfPO
JavaScriptに連想配列はないよ
オブジェクトにはlengthプロパティがないし、配列専用メソッドも使えないし、連想配列として足りないものご多すぎる
676デフォルトの名無しさん:2015/01/27(火) 22:37:30.12 ID:5+v0eJ06
お、おう
677デフォルトの名無しさん:2015/01/27(火) 23:35:59.38 ID:qiU3scYo
>>675
ものご?
それはさておき>>671はまごうことなき連想配列
678デフォルトの名無しさん:2015/01/28(水) 01:30:22.81 ID:2wq05yo9
JavaScriptってjqueryとか部品をつかって組み立てていくんですね。部品というかライブラリってややこしくいうんでしたね
679デフォルトの名無しさん:2015/01/28(水) 01:45:41.86 ID:nAKjs2MX
>>677
ものが
>>671は連想「配列」ではないね
680デフォルトの名無しさん:2015/01/28(水) 08:15:34.63 ID:a3QtgkTi
配列関係を強化してくれるライブラリとかないかね。
681デフォルトの名無しさん:2015/01/28(水) 08:24:57.34 ID:h5fNpxJ2
js は a[1] も連想配列ってじっちゃんが逝ってた
682デフォルトの名無しさん:2015/01/28(水) 09:10:30.93 ID:g/K+Ovy5
>>680
Underscore.js
lodash

web制作管理板には、ライブラリ関連のスレが一杯ある
683デフォルトの名無しさん:2015/01/28(水) 11:57:37.46 ID:nNEJWbIS
>>679
連想配列って内部の実装が配列になってるわけじゃなくて
array["test_1"]みたいに配列のようにアクセスできるっていう事だよ
684デフォルトの名無しさん:2015/01/28(水) 12:23:42.72 ID:U/zfeC5A
「連想配列」
は誤訳(キリっ)
685デフォルトの名無しさん:2015/01/28(水) 12:29:13.18 ID:3eBrGgj5
>>683
それはただのマップオブジェクトで連想配列ではないと思うよ
配列というからには
・定義順に列挙可能(foreach)
・lengthプロパティがある
・配列専用メソッドがある
これぐらいは出来て欲しい
PHPの連想配列ではいずれも可能だけど、ESでは不可能だよね
配列ってのは順番に意味があるから配列なのであって列挙順がランダムな時点でそれは配列ではない
ES6 の WeakMap でそこそこの要件は満たせる(配列専用メソッドはない)とは思うけど、現時点で連想配列といえるオブジェクトは存在しないと思うよ
686デフォルトの名無しさん:2015/01/28(水) 12:30:47.30 ID:U/zfeC5A
>ESでは不可能

Array.prototype.hogehoge.apply で稼農
687デフォルトの名無しさん:2015/01/28(水) 12:37:54.94 ID:LQQoa+bA
associativeに連想という語しか出てこなかったからこんな訳になったみたいだけど
何でもかんでも連想にしちゃうとおかしな訳語になるね

最初に訳した人は英和辞典しか持ってなかったのか?
688685:2015/01/28(水) 12:39:45.24 ID:3eBrGgj5
> ES6 の WeakMap でそこそこの要件は満たせる(配列専用メソッドはない)とは思うけど、現時点で連想配列といえるオブジェクトは存在しないと思うよ
WeakMap ではなく、Map だった
一応、forEach はあるから prototype 拡張すれば、連想配列らしく使える
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map
689685:2015/01/28(水) 12:42:43.45 ID:3eBrGgj5
>>686
定義順の列挙はどうやって再現する?
というか、大幅にprototype拡張したら「連想配列ではなかった」と認めるようなものだと思うけど
690デフォルトの名無しさん:2015/01/28(水) 12:53:06.77 ID:U/zfeC5A
>定義順の列挙

それいわゆる「連想配列」の必要条件じゃないから
691デフォルトの名無しさん:2015/01/28(水) 12:55:56.90 ID:g/K+Ovy5
JSには、Object, Primitiveの2種類しかない。
それでObjectには、propertyしかなくて、
propertyには、変数とメソッドの2種類ある

obj["a"], obj.a は同じ
ただ[]を使った書き方は、変数名に空白を含んだり、
予約語が使える

obj["a b"]はOKだが、obj.a b はダメ

obj["a"], obj["b"], obj.c
どんどん代入していくと、連想配列というか、
property(メンバ)の数が増えていくだけ
692デフォルトの名無しさん:2015/01/28(水) 12:58:35.33 ID:5Bzku+9w
自分勝手に連想配列の定義を決めて
それに則ってないと批判してるだけのバカ
693デフォルトの名無しさん:2015/01/28(水) 13:12:07.96 ID:nNEJWbIS
>>689
ちなみに俺はPHPを知らんが定義順てのは同じオブジェクトを最初の方と後の方に入れたら
どういう順番になるんだ?
最初の方だったら定義順と言えるが、後の方だったら格納順と言えるな
694685:2015/01/28(水) 22:47:49.62 ID:u1gONzR6
>>692
定義を持ち出すならば、ESに「連想配列」は存在しない
つまり、お互いに自己勝手に連想配列を定義しているに過ぎない
自分も宗教的な話をしている自覚はあるけど、厳密な話に持って行くなら「連想配列という言葉を使わず、オブジェクト初期化子などのES定義の用語だけを使え」が結論だと思うよ

>>693
array_push, array_unshift に依存する
あなたの言葉を借りるなら格納順になるのかな
http://php.net/manual/ja/function.array-push.php
http://php.net/manual/ja/function.array-unshift.php
695685:2015/01/28(水) 22:53:55.93 ID:u1gONzR6
>>693
ただ、自分が定義順といったのは

var obj = {c: 'hoge', a: 'foo', b: 'piyo'};

が存在したときに c -> a -> b の順番で列挙可能であるべき、というもの
配列は後で順番を制御可能であるべきだから、push, unshift 的な仕組みは必要だと思うけどね
PHP の連想配列は配列の一部だから配列の機能をそのまま使える
696デフォルトの名無しさん:2015/01/28(水) 23:27:02.95 ID:h/zvU9aP
一方Perlはkeysで取り出す際の順番を未定義とわざわざ定義しなおした
697デフォルトの名無しさん:2015/01/29(木) 06:41:19.75 ID:KP4aMXE3
hash値順じゃないのか
698デフォルトの名無しさん:2015/01/29(木) 07:35:00.52 ID:8k6H8xeW
ハッシュ順ですらない
699デフォルトの名無しさん:2015/01/29(木) 11:33:17.66 ID:0pC+BaE3
wiki先生は、ECMAScriptのオブジェクトを連想配列だと明言していらっしゃる
700デフォルトの名無しさん:2015/01/29(木) 12:43:53.62 ID:XmBHDsrt
連想配列を標準で提供する主な言語 (Wikipedia の「連想配列」より)
・ECMAScript (JavaScript) - すべてのオブジェクトが、文字列が添え字の連想配列として扱われる
・PHP - 配列と連想配列の区別がない

これを勘違いしちゃったんだね
701デフォルトの名無しさん:2015/01/29(木) 13:11:33.21 ID:S9XQNV8d
最近の訃報
MS新ブラウザ開発
Opera元CEO新ブラウザ開発

もうやめてくれ!FirefoxとChromeだけの世界にしてくれ!
702デフォルトの名無しさん:2015/01/29(木) 13:58:54.86 ID:oTkyyGyN
PHP厨はやっぱりアホしか居なかった
703デフォルトの名無しさん:2015/01/29(木) 17:01:24.29 ID:IxsEXiwo
ECMAScriptの仕様書には「連想配列」の言葉がでてこないんだが、仕様書を読めない人ばかりなのか
704デフォルトの名無しさん:2015/01/29(木) 17:04:54.27 ID:IxsEXiwo
>>697
for-in, Object.keys 共に列挙順はランダム
つまり、実装依存ということ
705デフォルトの名無しさん:2015/01/29(木) 17:10:32.99 ID:DGgoI8rj
Perlにおいて、keysで返ってくる順番と
valuesで返ってくる順番は同じである
706デフォルトの名無しさん:2015/01/29(木) 17:16:11.66 ID:OdkcJOPr
>>685
> 配列というからには
> ・定義順に列挙可能(foreach)
「定義順」というのが何を指しているのか良くわからないけど、連想配列の構成要素として決められた順に
列挙可能とかあったっけ?
俺のイメージだと、連想配列は集合にすぎず、順次取り出せはするけどその順序は実装仕様によるって
感じなんだけど。
707デフォルトの名無しさん:2015/01/29(木) 17:17:28.72 ID:OdkcJOPr
すまん、685以降を読まずに書いたら、超既出意見だった。
708デフォルトの名無しさん:2015/01/29(木) 17:26:09.84 ID:TYTLl9KK
709デフォルトの名無しさん:2015/01/29(木) 17:28:01.85 ID:XmBHDsrt
>>703
悔しいのは分かったから、Wikipediaの方を直しといてよ
710デフォルトの名無しさん:2015/01/29(木) 17:34:43.88 ID:oTkyyGyN
まず連想配列は配列ではない
連想配列と配列の区別が無いPHPの方が特殊で順序保持されない言語の方が多い
>>685は他の言語も勉強した方が良いよ

あとJSだって長さを取得する方法はあるし、PHPにlengthプロパティなんて無い
711デフォルトの名無しさん:2015/01/29(木) 17:45:21.92 ID:XmBHDsrt
obj["hoge"]ってアクセス出来るから連想配列って名前がついてるだけなのに、
PHP厨はPHPがたまたま連想配列が配列と同じだからって、連想配列=配列って考えに
凝り固まっちゃってんだよな

連想配列、辞書(ディクショナリ)、マップは同じ意味なのになんで配列にこだわってんだか…
712デフォルトの名無しさん:2015/01/29(木) 17:56:42.69 ID:VEWn1Ff+
そーいやハッシュとか言語によって呼び方変わるのはなんでだろ?
713デフォルトの名無しさん:2015/01/29(木) 18:33:24.17 ID:XmBHDsrt
>>712
内部実装が木構造を使う場合とハッシュテーブルを使う方法があると思うけど
木構造の場合にハッシュとは呼べないからだろう

で抽象的な名前にしたはいいけど、結局木構造とハッシュは速度に大きく差があるから
区別できる必要があって色々な呼び方が残った

さらにPHPみたいに本当に配列と同等にする実装も出てきたから、ややこしい事になってる
714デフォルトの名無しさん:2015/01/29(木) 19:15:36.89 ID:DGgoI8rj
>>713
> さらにPHPみたいに本当に配列と同じ

Rubyも同じだが、PHPのやつはハッシュ。
ただし順序も保持する、順序付きハッシュだよ。
OrderedHashともいう。

配列のように扱えるからといって
実装が配列というわけじゃない。
715デフォルトの名無しさん:2015/01/29(木) 20:04:07.29 ID:bcTkTriT
LISPのassocでハッシュでも木構造でもない実装なかったかな
716デフォルトの名無しさん:2015/01/29(木) 20:10:23.06 ID:XmBHDsrt
>>714
もちろん実装が配列じゃないのは分かるけど、挙動が配列と同等という意味だ
PHPの実装の詳細は知らんけど、キーが数字だったら連続領域を確保して最適化してる可能性もあるかもね
717デフォルトの名無しさん:2015/01/29(木) 20:19:09.85 ID:DGgoI8rj
挙動が配列と同等というならば
挙動は連想配列と同等とも言えるわけで
718デフォルトの名無しさん:2015/01/29(木) 20:22:27.12 ID:KP4aMXE3
jsの配列は連想配列(勃立っ)
719デフォルトの名無しさん:2015/01/29(木) 20:43:35.64 ID:XmBHDsrt
>>717
面倒臭い奴だな…
「挙動が配列と同等」
「挙動は連想配列と同等」
ゆえに配列=連想配列となるが、とりあえず何が言いたいのか…さっぱりだな
720デフォルトの名無しさん:2015/01/29(木) 20:49:55.50 ID:DGgoI8rj
>>719
違うだろ

PHPのArray ⊂ 配列
PHPのArray ⊂ 連想配列
721デフォルトの名無しさん:2015/01/29(木) 22:49:51.27 ID:IxsEXiwo
>>709
事実をいっているだけで何も悔しくないんだがな
Wikipediaの情報が全て正しいと思ってるのか?
仕様書よりWikipediaが信頼できると?

Wikipediaの添削なんて俺は興味がないからやらん
必要だと思う奴がやればいい
722デフォルトの名無しさん:2015/01/29(木) 23:06:24.90 ID:BOfvrXRM
言葉が違ったら別物とかワロタ
おはぎとぼたもちが違う食べ物って言ってるようなもんだ
今は性質の話をしてるんだよ?
723デフォルトの名無しさん:2015/01/29(木) 23:42:16.99 ID:d4r65DW2
仕様書にない以上、ただの言葉遊びに過ぎないと思うけど
それぞれの「連想配列」の定義が違うだけ
厳密な定義は仕様書にしかないんだから、仕様書の外の話なら水掛け論にしかならない
馬鹿にしている人は頭がどうかしてる
724デフォルトの名無しさん:2015/01/29(木) 23:49:58.61 ID:d4r65DW2
これ以上、連想配列云々を議論するなら自らの主張する「連想配列の定義」を明確にした上でその「根拠となる公的文書」を明示すべきだよ
最も、Wikipediaなんてユーザ投稿型の情報サイトは参考にならないし、まともな文書はなかなか出てこないと思うけどね
一次情報を出してくれないと信用できないけど、その辺を理解している人がどれだけいるかも怪しい
そもそも、「連想配列」って標準化されてない気がするんだけど、どうなんだろう?
725デフォルトの名無しさん:2015/01/30(金) 00:26:21.09 ID:NP1zsnhV
連想配列の定義の認識が違うのは約一名だけどなw

「連想配列」という単語自体は、公的文書で定義されたんじゃなくて、長いプログラミングの歴史の中で共通認識として形成されたんだと思う
プログラミングに限らず大抵の言葉はそうやって生まれるからな

もし一次情報にこだわるなら、日本語の用語も迂闊に使えない
まず「連想配列」に当たる英語は何か、公的文書で調べる必要があるぞ
726デフォルトの名無しさん:2015/01/30(金) 00:28:13.25 ID:YnD9jWV/
>配列というからには
>・定義順に列挙可能(foreach)
>・lengthプロパティがある

定義順に列挙可能な配列はPHPにしか存在しないので、配列はPHPにしか存在しない事になり
一方lengthプロパティはPHPの配列には存在しないので、配列はこの世の何処にも存在しないことになる
>>685の頭がおかしいと言う事でFA
何か問題あるなら>>724の通り明示してくれ
727デフォルトの名無しさん:2015/01/30(金) 00:41:34.96 ID:IkeovF4a
>>725
> 長いプログラミングの歴史の中で共通認識として形成されたんだと思う
そういう曖昧な共通認識なら「連想配列」を定義することは出来ないんじゃないかな

>>726
PHP以外の言語って具体的には何?
そのPHP以外の言語の連想配列が「全言語共通の連想配列」を表しているとどうしていえる?
728デフォルトの名無しさん:2015/01/30(金) 00:46:36.15 ID:IkeovF4a
いってみれば、「JavaScriptにクラスがない」っていうのと同じだよ
仕様的にはクラスも連想配列もない
でも、クラスや連想配列の性質を部分的には持っている
それだけの話
729デフォルトの名無しさん:2015/01/30(金) 01:33:20.33 ID:NP1zsnhV
>>727>>728
言ってることが破綻してる
連想配列の定義ができないと言い張るなら、「クラスや連想配列の性質を部分的には持っている」と言えるはずがない
もし>>728を意味のある主張にしたいなら、君は「クラス」「連想配列」の定義の根拠となる公的文書を明示する必要がある
730デフォルトの名無しさん:2015/01/30(金) 01:40:04.50 ID:B/qO4MDz
このフレームいつまで続けんの?
731デフォルトの名無しさん:2015/01/30(金) 01:43:21.59 ID:IkeovF4a
>>729
確かに…、>>728は正確ではなかったね
正確には「でも、PHPのクラスや連想配列の性質を部分的には持っている」になる
"PHP" は例であって "Perl" などの別言語が入ってもいい
732デフォルトの名無しさん:2015/01/30(金) 02:01:06.38 ID:9uXlE7mK
>>729
「連想配列」の公的文書なんて存在しない事を知ってて(というか存在する必要もないが)、
それをよりどころとして、顔真っ赤にしてがんばってるだけだ
733デフォルトの名無しさん:2015/01/30(金) 02:14:15.96 ID:Ufioj8sS
>>732
「仕様書にない用語は存在しない」というシンプルな主張をしているだけだろう
否定する理由はないと思うが、「顔を真っ赤にして頑張ってる事」にしたい理由がわからんな
734デフォルトの名無しさん:2015/01/30(金) 07:13:19.22 ID:kF/DIWcS
大雪すぎる
735デフォルトの名無しさん:2015/01/30(金) 08:24:20.97 ID:0YV6xwSy
>>703
そりゃ、日本語じゃ書いてないからな。出てこないだろ。
736デフォルトの名無しさん:2015/01/30(金) 09:42:37.55 ID:5Kn0EM7f
悔しすぎて変なことを言い出したぞ
737デフォルトの名無しさん:2015/01/30(金) 11:31:33.36 ID:cu5MiSFt
ECMAScriptに書いてないだけで、連想配列の定義は存在するよ。
もちろん国が定義しているわけじゃないがw
738デフォルトの名無しさん:2015/01/30(金) 13:32:55.83 ID:IkeovF4a
>>735,737
別に英語でもいいけど、ソースは?
739デフォルトの名無しさん:2015/01/30(金) 13:47:50.21 ID:YnD9jWV/
>>727
日本語を読んで日本語で書いてくれる?
740デフォルトの名無しさん:2015/01/30(金) 14:51:18.29 ID:0TSQ5O2D
連想配列の初出ってなんだろうね
自分は perl で知ったよ
741デフォルトの名無しさん:2015/01/30(金) 15:15:07.89 ID:DudumgqB
最近はKVS(Key-Value-Store)とも呼ばれるようになったな
こっちはもっと大掛かりなデータベースを指す事がほとんどだが
742デフォルトの名無しさん:2015/01/30(金) 16:12:27.48 ID:dkxkl7OM
http://www.w3schools.com/js/js_arrays.asp

連想配列は文字列インデックス named index が使える配列のことであって、JavaScript の場合はそれをサポートしていない。

a を配列として定義しても、a["key"] = "value"とした時に Javascript では裏で a を普通のオブジェクトとして再定義しており、.length やら配列用のプロパティ、メソッドは不正確な結果を返すようになる。

まあ納得の説明だな。
743デフォルトの名無しさん:2015/01/30(金) 16:22:52.18 ID:j3Aclf8I
えっ
そんな話聞いたことないぞ
744デフォルトの名無しさん:2015/01/30(金) 16:43:26.51 ID:IkeovF4a
>>739
ごめん、よく読んでなかった
>>726>>685定義の連想配列に対する反論だね
趣旨としては異論はないんだけど、「PHPにlengthがない」は count 関数が length 相当の機能なんじゃないかと思う
http://php.net/manual/ja/function.count.php
745デフォルトの名無しさん:2015/01/30(金) 16:53:37.06 ID:DudumgqB
>>742
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length; // person.length will return 0
var y = person[0]; // person[0] will return undefined

person["firstName"]で代入した値をperson[0]で取り出せないから連想配列でないってアホか
違うキーで取得しようとしてんだからそんなの当たり前じゃん
lengthも連想配列の定義に必須なのかよ?
lengthはバグってるが要素数を取得する事は可能だろ
746デフォルトの名無しさん:2015/01/30(金) 17:14:11.31 ID:tpYqTKhJ
もう、連想配列は、named indexが使えるコンテナってことでいいじゃん。

>> 745
> lengthも連想配列の定義に必須なのかよ?
lengthやcount、sizeなんかが使えると便利なんだけどね。
747デフォルトの名無しさん:2015/01/30(金) 19:15:59.76 ID:HwiqlkLu
person.keys().length
748デフォルトの名無しさん:2015/01/30(金) 19:37:09.68 ID:IkeovF4a
オブジェクト初期化子でオブジェクトを定義した場合、prototype-chain という名のコンテナになるって事が他言語の連想配列との違いかな

var obj = {};
console.log(obj.valueOf); // function valueOf() { [native code] }

{} は Object のインスタンスだから prototype-chain の原則に従って Object.prototype.valueOf を参照してしまう
これを回避するためには ES5 の Object.create を使用する必要がある
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/create

var obj = Object.create(null);
console.log(obj.valueOf); // undefined

ES6 の Map でも同様に解決できる
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map

>>747
Object.keys(person).length ではなくて?
749デフォルトの名無しさん:2015/01/30(金) 19:45:54.46 ID:HwiqlkLu
ああそれそれ

どっこいしょ
750デフォルトの名無しさん:2015/01/30(金) 20:22:04.26 ID:DudumgqB
↓こんなん作ってMapのPolyfillとして使ってたわ
if (!Map) {
var Map = (function() {
var StringMap = function() {
this.hash_ = Object.create(null);
this.size = 0;
};
StringMap.prototype = {
has: function(key) {
return key in this.hash_;
},
get: function(key) {
return this.hash_[key];
},
set: function(key, value) {
this.hash_[key] = value;
++this.size;
}
};
return StringMap;
}());
}
751デフォルトの名無しさん:2015/01/30(金) 20:44:25.44 ID:O0ehqMMx
if (!Map) { の時点であかんやろ
if (!window.Map) { にしないと
あと、文字列以外のkeyに対応したいなら、setの時にkeyを配列に順に入れて、getの時にindexOfで検索すればいける
752デフォルトの名無しさん:2015/01/30(金) 20:45:29.64 ID:/yjyQLi6
>>750
polyfill?
753デフォルトの名無しさん:2015/01/30(金) 20:52:18.62 ID:DudumgqB
>>751
別に俺用で全て承知の上で使ってて、特に問題はなかったから、それでいいんだ
754デフォルトの名無しさん:2015/01/30(金) 20:54:29.54 ID:DudumgqB
>>751
こういうのだけを.jsに書いて最初に読み込むようにしてるから問題ないよ
あとnode.jsの場合もある
755デフォルトの名無しさん:2015/01/30(金) 21:01:57.39 ID:cu5MiSFt
たとえ特定に場合で動作していたとしても、プログラマとして
そういうコードは書けないな。

すごく面倒だっていうのならわかるが対して面倒でもなく、
すぐに問題が有るってわかるからつい書いてしまう。

それがプログラマだと思うが、書かない=問題を認識してない=技術力が低いって
ことだと思うね。
756デフォルトの名無しさん:2015/01/30(金) 21:06:54.34 ID:cu5MiSFt
if (!Map) {
 var Map = (function() {
  var StringMap = function() {
   this.hash_ = Object.create(null);
   this.size = 0;
  };
  略
  return StringMap;
 }());
}

なお、このコードがどういう解釈をするかというと変数の巻き上げが起こるから以下のように解釈される。

var Map;
if (!Map) {
 Map = (function() {
  var StringMap = function() {
   this.hash_ = Object.create(null);
   this.size = 0;
  };
  略
  return StringMap;
 }());
}

つまり、Mapは常にundefinedになるため、if(!Map)をする意味が無い。
Mapをサポートしているブラウザであっても標準のMapは使われない。
757デフォルトの名無しさん:2015/01/30(金) 21:26:37.35 ID:IkeovF4a
>>756
> Mapをサポートしているブラウザであっても標準のMapは使われない。
試せば分かると思うけど、標準で Map を実装しているブラウザでは native code が使われるよ
巻き上げが発生するからこそ正しく動作する
まあ、自分なら typeof 演算子で function 判定するけど
758デフォルトの名無しさん:2015/01/30(金) 21:26:42.87 ID:/yjyQLi6
>>755
いいたいことが一切読み取れないのだが、俺の読解力の問題かな?

>>756
IE11とchrome使ってみたが、ネイティブのMapが優先されてるんだが、どうなの?
759デフォルトの名無しさん:2015/01/30(金) 21:34:13.98 ID:YnD9jWV/
仮にネイティブでなく、さらに
var Map;
if (!Map) {
と解釈されたとしてもundefinedに上書きされることはないだろ
760751:2015/01/30(金) 21:35:47.48 ID:O0ehqMMx
うおマジだ、varを見落としてて勘違いしてしまった
>>750のコードで問題は起こらないわ
さっきは済まなかった
ただやっぱり変数の巻き上げに頼るコードは、可読性の面でやはり良くない気がするな
761デフォルトの名無しさん:2015/01/30(金) 22:54:01.72 ID:IkeovF4a
>>760
> ただやっぱり変数の巻き上げに頼るコードは、可読性の面でやはり良くない気がするな
それには同意
自分ならこうする

if (typeof Map !== 'function') {
var Map = function Map () {};
// 以下略
}
762デフォルトの名無しさん:2015/01/30(金) 23:48:05.67 ID:9uXlE7mK
>>761
if (!Map)はMDNとかでも普通に使われているイディオムだから別に問題無い
Polyfillに可読性とかどうでもいいんだ、想定通り動けば十分
763デフォルトの名無しさん:2015/01/30(金) 23:52:28.10 ID:IkeovF4a
>>762
期待通りに動くのだからそれ程強く主張するつもりはないよ(ポリシーの違いだし)
下記は結構気になる点ではあるけど
・size が書き換え可能
・hash を直接参照可能
・has は hasOwnProperty の方がいいかも (※現コードでも問題はないけど、prototypeを辿る必要はないかと)
764デフォルトの名無しさん:2015/01/31(土) 00:05:55.25 ID:hCZ/B06q
>>750
同じキーで2回セットすると size がおかしくなるね

var map = new Map;
map.set('key', 'value');
map.set('key', 'value');
console.log(map.size); // 2 (※1であるべき)

それと StringMap を匿名関数で括る必要がない気がする
765デフォルトの名無しさん:2015/01/31(土) 00:20:10.01 ID:jxxCxar4
>>764
> 同じキーで2回セットすると size がおかしくなるね
うぉ、それは致命的な問題だ
++this.size;

this.size = Object.keys(this.hash_).length;
にすべきか
766デフォルトの名無しさん:2015/01/31(土) 00:23:20.01 ID:jxxCxar4
>>764
> それと StringMap を匿名関数で括る必要がない気がする
グローバルにStringMapが漏れちゃうから括ってる
767デフォルトの名無しさん:2015/01/31(土) 00:27:55.80 ID:hCZ/B06q
>>765
Object.keys の計算コストを嫌うのならこうする

if (!this.has(key)) {
++this.size;
}

>>763のいうように size を読み取り専用にするなら Object.defineProperty も併用する必要がある
768デフォルトの名無しさん:2015/01/31(土) 00:30:37.85 ID:hCZ/B06q
>>766
var Map = function Map () {};
Map.prototype = {};

でグローバル名前空間に影響しないと思うけど...
769デフォルトの名無しさん:2015/01/31(土) 00:44:49.40 ID:jxxCxar4
>>767
if (!this.has(key)) {
this.hash_[key] = value;
++this.size;
}
一応指摘しておくと、こうしないと永久にsizeが増えんぞ…
770デフォルトの名無しさん:2015/01/31(土) 01:02:03.89 ID:hCZ/B06q
>>769
>>765に倣って該当行を書き換えただけ
で、書いた後で毎回setするのは無駄だから書き直そうかとも思ったが、

this.hash_[key] = value;
if (!this.has(key)) {
++this.size;
}

問題の事象とは関係ないのであえて追記しなかった
だが、指摘をもらっておいてその態度はカチンとくるものがあるな
永久にサイズが増えないコードは考えうる限りではこういうことだ

set: function(key, value) {
 if (!this.has(key)) {
  ++this.size;
 }
}

set なのにプロパティ代入を忘れるわけないだろ
>>765も1行だけ書き換えてるんだから、1行書き換えただけだとなぜ考えない?
771デフォルトの名無しさん:2015/01/31(土) 01:06:51.86 ID:dydxwr8U
sizeメソッドがコールされるたびに、foreachまわして数えろよ
状態を増やせば増やすだけバグの温床がふえるだけだぞ
速度なんてよっぽどでなけりゃ気にならんよw
772デフォルトの名無しさん:2015/01/31(土) 01:09:04.52 ID:hCZ/B06q
ああ、代入が先に来るから size が増えないという意味か
かっとなって悪かった
だが、言い方には気をつけて欲しいものだな
773デフォルトの名無しさん:2015/01/31(土) 01:15:44.65 ID:hCZ/B06q
ES6 仕様を読む限りでは size は動的計算しているから>>771の実装が仕様に準拠した考え方なんだろうな
Object.keys で実装できるから forEach を使用する必要はないが
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-get-map.prototype.size
774デフォルトの名無しさん:2015/01/31(土) 01:20:05.08 ID:jxxCxar4
>>773
なるほど
厳密に実装するならばsizeはObject.definePropertyでgetを実装すべきなんだろうね
775デフォルトの名無しさん:2015/01/31(土) 05:45:52.39 ID:ev1+eJkd
ID:hCZ/B06qはカチンときすぎだ
ここは2chなんだから相手に誠意を求めるな
力を抜け
776デフォルトの名無しさん:2015/01/31(土) 12:12:32.07 ID:253B+lLb
「言い方には気をつけてほしいものだな」という
言葉にカチンと来た>>775
777デフォルトの名無しさん:2015/01/31(土) 16:09:13.11 ID:v4T1Hlx1
はいはい
778デフォルトの名無しさん:2015/02/03(火) 04:45:08.80 ID:kKekchfw
evalがエラーだった戻り値はどう拾えばいいですか?
typeof eval("あああ") === "undefined" とか eval("あああ") == null
とかじゃできないです。
779デフォルトの名無しさん:2015/02/03(火) 04:46:26.91 ID:Q1ZKEngM
うんこでそう
780デフォルトの名無しさん:2015/02/03(火) 04:51:20.05 ID:jxNF8Gjw
>>778
try catch
781デフォルトの名無しさん:2015/02/03(火) 07:53:21.20 ID:sR1dv8Zc
>>778
間違った記述なので期待通りに動作しない

eval("ああ"); // ReferenceError: ああ is not defined
 ↓
typeof eval('void 0') === 'undefined'; // true
782デフォルトの名無しさん:2015/02/03(火) 07:54:20.53 ID:sR1dv8Zc
間違えた
>>781は忘れてくれ
783デフォルトの名無しさん:2015/02/04(水) 00:16:36.59 ID:OMy/qeNO
現行スレ


+ JavaScript の質問用スレッド vol.122 +&amp;#169;2ch.net
http://peace.2ch.net/test/read.cgi/hp/1420095379/l50
784Office & Gamers ◆G144Hzgh2.0e :2015/02/07(土) 07:00:51.31 ID:fNjYutkO
JavaScriptの統合開発環境みたいなの拾ってきたw

DX Studio
http://www.dxstudio.com/

Freeバージョンはそのまま使えて、開発ライセンスは登録が必要。
マルチプラットフォーム、EXEファイル生成可(ライセンス版のみ)w

DirectX9ベースで、インストールされていない場合は自動インストール。

JavaScriptの実験用に使えるw

# ただし、全部英語で、ある程度の英語スキルが要求されるw
785デフォルトの名無しさん:2015/02/07(土) 19:13:40.53 ID:OFt7WQHd
NG追加っと
786Office & Gamers ◆G144Hzgh2.0e :2015/02/08(日) 05:29:23.24 ID:EWNvntIT
[EXEファイル可] JavaScript統合開発環境 DX Studio [転載禁止]&copy;2ch.net
http://peace.2ch.net/test/read.cgi/tech/1423340731/l50
787デフォルトの名無しさん:2015/02/08(日) 08:03:00.58 ID:tUjKNEQ0
ぐろ
788デフォルトの名無しさん:2015/02/08(日) 10:30:05.73 ID:Q7NBa/16
広報がアルバイトなのか?
789デフォルトの名無しさん:2015/02/09(月) 00:58:20.34 ID:ctAnPJrw
しかし20年もするともう一度世界大戦が・・・
今の若手連中はもう一度戦地に行ったのだろうか
790デフォルトの名無しさん:2015/02/09(月) 07:57:49.70 ID:iJdyGTL3
子供が消耗品だった時代
791デフォルトの名無しさん:2015/02/11(水) 21:49:27.12 ID:z1YCt8TB
神JSerが長い規制の海を越えて戻ってきましたよ。
どんな質問にもバッチリ答えますよ。
792デフォルトの名無しさん:2015/02/11(水) 21:56:12.00 ID:Sy5MoPU2
>>791
Map の OrdinaryCreateFromConstructor の挙動が良くわかりません
polyfill を書く場合、どのようなコードになるのでしょう?

"2. Let map be OrdinaryCreateFromConstructor(NewTarget, "%MapPrototype%", ≪?[[MapData]]≫ )."
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-map-iterable
793デフォルトの名無しさん:2015/02/11(水) 21:59:44.93 ID:fVfIbgvg
>>792
ここにPolyfillライブラリがあります。
独自実装しないでこれらを使いましょう。

Harmony Collections Shim
https://github.com/Benvie/harmony-collections

es6-map-shim - A polyfill for ES6 Maps
https://github.com/eriwen/es6-map-shim

Blitz-Collections
https://github.com/EliSnow/Blitz-Collections
794デフォルトの名無しさん:2015/02/11(水) 22:07:01.24 ID:Sy5MoPU2
>>793
楽してPolyfillライブラリを使うのが目的ではありません
仕組みを知りたいのです
ちなみに少なくとも下2つは ES6 に準拠していませんが、本当に理解して紹介していますか?
795デフォルトの名無しさん:2015/02/11(水) 22:08:37.94 ID:fVfIbgvg
>>974
じゃあpolyfillコードを読んでください。

polyfill を書く場合、どのようなコードになるのでしょう?
その答えがそこにあります。
796デフォルトの名無しさん:2015/02/11(水) 22:09:52.57 ID:TfFe/slw
>>794
別にES6に準拠してるなんて一言も書いてないじゃん
Polyfillなんて完全準拠を意味してるわけじゃないし
797デフォルトの名無しさん:2015/02/11(水) 22:12:17.74 ID:z1YCt8TB
>>791
ES5の範囲でサブクラスのことまで考慮する必要はない。
どうせ他にも再現できない細部はあるのだから、
Mapという挙動を再現することだけ考えればいい。
上でも出てたが配列を2つ用意してシコシコするのでいい。
NaNだけには注意して。そうすれば問題ない。
798デフォルトの名無しさん:2015/02/11(水) 22:16:57.80 ID:Sy5MoPU2
>>795
ES6 に準拠しているか準拠していないかわからないライブラリを確認するのは無駄ではないでしょうか
OrdinaryCreateFromConstructor 部分が ES6 に準拠しているなら参考になりますが、どのライブラリが相当しますか?

>>796
OrdinaryCreateFromConstructor の挙動がわからない、と私は書きました
少なくとも、OrdinaryCreateFromConstructor 部分は ES6 に準拠しているべきでは?
799デフォルトの名無しさん:2015/02/11(水) 22:20:07.48 ID:z1YCt8TB
>>798
何か勘違いしてるみたいだけど、OrdinaryCreateFromConstructorは要はnew演算子を使った時の内部処理、
つまりインスタンスオブジェクトへのプロトタイプの設定なんかでMapの挙動とは直接関係ないよ。
800デフォルトの名無しさん:2015/02/11(水) 22:34:43.04 ID:Sy5MoPU2
>>799
ありがとうございます
new Operator から処理を追っていますが、OrdinaryCreateFromConstructor にはたどり着けずにいます
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-new-operator

> 2. Let map be OrdinaryCreateFromConstructor(NewTarget, "%MapPrototype%", ≪?[[MapData]]≫ ).
想像するにこんなコードではないかと思いましたが、憶測ゆえに確信が持てず…

function Map () {}
function MapData () {}
Map.prototype = new MapData

> つまりインスタンスオブジェクトへのプロトタイプの設定なんかでMapの挙動とは直接関係ないよ。
"23.1.1.1 Map" を一から読んでいまして 2. でいきなりつまずきました
801デフォルトの名無しさん:2015/02/11(水) 22:40:41.53 ID:Sy5MoPU2
OrdinaryCreateFromConstructor を補足しました
new Operator から辿ると最終的に "9.2.3 [[Construct]]" に行って 5. -> a. に OrdinaryCreateFromConstructor を発見しました
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-function-objects-construct-argumentslist-newtarget

> a. Let thisArgument be OrdinaryCreateFromConstructor(newTarget, "%ObjectPrototype%").
これは thisArgument = new Object; に相当すると思われます

> 2. Let map be OrdinaryCreateFromConstructor(NewTarget, "%MapPrototype%", ≪?[[MapData]]≫ ).
同じ理屈でこれは var map = new MapData; でしょうか
(間違いありましたらご指摘下さい)
802デフォルトの名無しさん:2015/02/11(水) 22:49:01.56 ID:z1YCt8TB
[[MapData]]はただのインスタンスオブジェクトの内部プロパティ。
こんなイメージ。
function Map(){
 this.MapData = {
  key:[], value:[]
 }
}
803デフォルトの名無しさん:2015/02/11(水) 22:56:35.38 ID:z1YCt8TB
違った。こういうイメージか。
function Map(){
 this.MapData = [
  {key:a , value:b}, {key:c , value:d}, {key:e , value:f}, ......
 ]
}
804デフォルトの名無しさん:2015/02/11(水) 23:01:44.66 ID:ld4XF5hh
>>801
>> 2. Let map be OrdinaryCreateFromConstructor(NewTarget, "%MapPrototype%", ≪?[[MapData]]≫ ).
23.1.1自体が new Map の挙動を説明してるんだろう。

どっちかというと、Object.create(%MapPrototype%) に近いんじゃないかな?
それに>>803のような内部データの領域を確保している感じ
805デフォルトの名無しさん:2015/02/11(水) 23:28:17.85 ID:Sy5MoPU2
>>802-803
ありがとうございます
ほぼ理解できたと思います

>>804
>>803のコードに近づけるなら下記コードのイメージですね

function Map(){
 this.MapData = Object.create(Map.prototype);
}
806デフォルトの名無しさん:2015/02/12(木) 00:17:13.84 ID:hryqIksq
FileReaderでローカルのテキストファイルを読み込みたいのですが、内容が表示されません。なぜでしょうか

function handleFileSelect(evt) {
var file = evt.target.files;
var reader = new FileReader();
reader.readAsText(file[0]);

reader.onload = function(ev) {
target = document.getElementById("test");
target.innerText = reader.result;
}
}
document.getElementById("oppai").addEventListener("change",
handleFileSelect, false);

~~~~~~~
<form name="form0">
<input type="file" id="oppai">
</form>
<div id="test"></div>
807デフォルトの名無しさん:2015/02/12(木) 04:03:39.94 ID:vBHOZlzG
>>805
MapDataはただのリストであって、MapDataがMapのインスタンスではないよ。
まあ細かな内部処理の形にこだわってもしょうがない。
この辺り実装はパフォーマンスのために工夫するものだから。
外から見て期待する部分の振る舞いが同じなら中身のことまでそう気にすることはない。
808デフォルトの名無しさん:2015/02/12(木) 07:37:09.82 ID:2kUwxM+t
JavaScript の初心者スレッド はないのでしょうか
809デフォルトの名無しさん:2015/02/12(木) 09:28:45.98 ID:mCWBIRuw
>>806
そのコードで問題ないです
動かない原因で考えられるのは、ブラウザが対応していない、addEventListenerのタイミングが適切でない、くらいかと
810デフォルトの名無しさん:2015/02/12(木) 13:42:41.21 ID:voB55Hif
【環境】 Android のOperaClassic
【やりたいこと】ユーザサイドスクリプトでjQueryを使いたい。

PCのFF上のGreasemonkeyだと
@require http://hogehoe/jquery.min.js
とかで使えるようになりますが、スマホのオペラクラシックでは外部ライブラリを参照する方法は無いでしょうか?
811デフォルトの名無しさん:2015/02/14(土) 14:20:29.15 ID:q4d64D9y
それはブラウザ毎の仕様によるから該当スレ探してそっちで聞きな
汎用性ならUserScriptの中にライブラリをコピペで入れちゃうのが楽だけど
812デフォルトの名無しさん:2015/02/14(土) 20:43:30.01 ID:mOWaa/ww
現行スレ

+ JavaScript の質問用スレッド vol.123 +&amp;#169;2ch.net
http://peace.2ch.net/test/read.cgi/hp/1423913913/l50
813デフォルトの名無しさん
こっちな

+ JavaScript の質問用スレッド vol.123 + [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/hp/1423915644/