+ JavaScript の質問用スレッド vol.117 +
1 :
デフォルトの名無しさん :
2014/07/01(火) 01:37:24.78 ID:U4Rt/XmH 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
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
5 :
デフォルトの名無しさん :2014/07/01(火) 01:44:35.53 ID:U4Rt/XmH
■諸注意
vol.115でlodashを不必要に推奨して啓蒙する行為が多く確認されており、ライブラリ系の質問はvol.116から禁止されました。
vol.115,116ではライブラリ禁止する発言が見られた直後にライブラリを許可する意図で次スレを立てる行為が確認されています。
本スレッドでライブラリ許可を求める発言が確認された場合は不要な争いを避ける為、スルーすることを推奨します。
ライブラリの質問はライブラリスレへ誘導し、誘導行為への反論はスルーしてください。
*追記
>>2 が32行制限に引っ掛かったから一部改行を削除して押し込んだ
テンプレここまで
>>5 お疲れ様
>
>>2 が32行制限に引っ掛かったから一部改行を削除して押し込んだ
確かにそこは考慮してなかった
改修案を考えなければ
今はJavaScriptといっても、ブラウザだけのものじゃなくて たとえば、Nodeみたいに、サーバーサイドで動くものもある。 このスレはブラウザのJavaScriptではなく、 純粋なJavaScript(ECMAScriptとも言う)の範疇で やるってことでしょ?
WebProgi板の範疇だが、荒らし対策にIDが出るプログラム板に移行したと認識してる WebProg板がID強制なら良かったんだが、なぜID非表示なんだろう
だからって、既にスレあるのに新しく立てて いいってことにはならねーよ。
微妙に違う程度で立てるなよ。
>>1 ちゃんと読んだ?
http://peace.2ch.net/tech/ プログラム技術@2ch掲示板
read.cgi モード切替 ■▼
この板はプログラムを作る人のための板です。
あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。
その他、お勉強ページへのリンクスレ、
推薦図書・必読書スレ
もあります。
プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。
その辺は質問じゃない方のJSスレ初回で一通りやったから 興味があるなら見てみるといい
ウェブ制作以外の内容だったらいいんだよ。 JavaScriptといってもサーバーで使えるわけで。 分かりやすく言うのなら、Node関連はOK ブラウザ関連はNGということ。
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
DOMなしシバリならいいのか? まあわからんでもないけど。 でもJavaScriptって大概DOM関連だろ? 今は違うのかな? まあWebと関係ない話をするのであれば まあいいかもしれんな。
荒らしが文句付けているだけなので無視でおk JavaScript,Ruby,perl,php,pythonなどWebで使用する言語スレも全てここにある 当然、Web関連の話もされている
既存のjavascriptスレでも誘導せずWeb絡みの質問を扱ってたから この板的にはこれまでと何も変わらん
>>22 ちゃんと読んだ?
> プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
> Javascript は Web 制作板、CGI は Web プログラミング板へ。
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 業界談義、愚痴はプログラマ板へどうぞ。
というか、Web製作板のスレを立てるときに誤爆しただけだろ?w
向こうのスレからコピペしただけだろうけど、 この板でやるなら、この板向けにテンプレの修正は必要だろうな。 今のはどう見てもウェブ関係に偏り過ぎだし。 まず前提としてウェブ無し(ウェブはWeb制作版なので)のJavaScriptとして テンプレを修正する所から始めるか。 意見よろしく。
>>26 テンプレ修正始めるか、といいながらも他人任せなのね
letが使えるなら全てletにするべきですか?
>>28 letを使うことにしたなら、そうした方が見通しがいいだろうね。
get演算子と__defineGetter__ってどう違うの?
機能的にどういう違いがあるかわ知らんけど、__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出来ております。 選択された画像を取得するにはどのようにすれば良いのでしょうか? 識者の方たちのアドバイスいただけると助かります。
しかもライブラリは専用スレがあるという
40 :
38 :2014/07/19(土) 07:55:28.84 ID:wN8dQ7Yi
ちなみに、
>>37 が誘導しているスレは荒らされて機能していないのでまともな回答も返ってこない
板が違うんだから誘導自体は普通のことよ
File APIは関係ない。必要ない。画面遷移無しでPOSTを実行すればいいだけだろ。
>>44 荒らされていて機能していないスレに誘導するのは普通ではない
結論から言えば件の質問はスレチ
まず運営側から板ルールはあくまで便宜上のもので
実際の判断は用途に応じて個別具体的に判断しろとの見解が出ている
よって既存のJSスレやここは板チではない
>>34 は環境を明確にブラウザと限定しているからWeb制作の領分
あっちのスレに荒らしが巣食っていても行うべきは削除申請であって
ここでは向こうへの誘導に留めるべきである
>>41 .serialize() で値が取れるんなら .val() でもとれるはずだろ
>>49 serializeで取れないんだっけ。
FormDataオブジェクトのblobを使えば投稿された画像データを取得できるんだが、
実際のコードの書き方は忘れてしまったわ
だから向こうで既に解決済みの話題をなんでやってるの?
FormDataはIE10からじゃないか
総合スレから飛んできました。現在、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>
省略部分 $.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");
補足 ajax,call.phpではMysqlに接続し、コールした値を連結してretに返します。@と:は区切り記号として使っているだけです
向こうのスレで親切に回答してくれました。ありがとうございます
どういたしました。 こっちでレスするつもりが間違えたから もういいやって書いた。 本当はここに、長々と書き込むつもりだったんだけどな。
>>53 idでセレクトしてるのに$(this).each()はおかしいな。
どのオプションから選択されたかは、単にselectのidをデータに添付すればいいだけだな。
clientsideなjavascriptはsandbox内でしか動かないので、 OS内のコマンド実行はできないとは思うんですが、 sshのjs実装で、ssh経由でlocalhostのコマンド実行とかできないでしょうか? ぐぐってもserversideのjs実装しか見当たらず、無理なのかなーと諦めかけてはいるのですが、 念のためここに質問させていただきました。 よろしくお願いいたしますm(_ _)m
>>1 web制作板で長年育ったスレタイをぱくってんじゃねえよチョン
>>60 できないんじゃないかな
仮にJSで実装したSSHがあったとしてもコマンド実行されるのはSSH先の環境でだし
諦めてNode.js使った方がいいよ
>>63 すいません。やっぱ無理なんですかね。
webSocketとかよくわかってないんですが、sshプロトコルとかjsで実装すれば
通信可能になるのかなーといろいろ探していました。
ちなみにlocalhostにsshするイメージで操作しようとしていました。
>>64 要するに、自分のマシン上にsshサーバー立ててそこにブラウザからjsでアクセスしてコマンド実行したいってこと?
それならsshにこだわらずにそういうサーバーサイドプログラム書けばできると思うけど
>>65 githubからgit cloneをある程度自動で実行するユーザスクリプトを書こうとしていました。なんでクライアントサイドだけで解決できないかなーと
node使えば出来るでしょ? あなたが出来ないと言ってるのはブラウザという実行環境の話。 ブラウザという実行環境はセキュリティが高いことが要求されるので 危険な操作はできないようになってる。
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 ありがとうございます。
(a.f)();を(〜,a.f)();って記述して、カンマで復数の式を記述すると
グローバルオブジェクトを指定することを見つけましたって
記事ってことですか。
なんかトリッキーなことやって可読性が悪くなっただけに見えます。
>>70 だから、無意味なコードといってる
コメントを書けば済むのに、わざわざカンマ演算子で不要な処理を増やしてる
>>70 可読性が悪くなっただね。中二病コードだなw
絶対に真似したらダメだよ。
だいたいタイプ数を減らそうとか考えるのは意味がない。
どんだけタイプ速度遅いんだよって話。
重要なのは読みやすさ、意味の理解の明確さ
一般的に書くのは一回で終わるが、読むのは何回も行われる。
コードレビューの時、修正する時、バグが見つかった時。
君がこれなんで動くのかさっぱりわからないと言ってる通り、この書き方は意味が明確ではない。
意味が明確で無いのは、たとえ動くことがわかってもなんでこんなことしてるの? って
思われるようなコードはダメということ。
「callはthisを変更する時に使うもの」というJavaScriptプログラマなら
だれでも知っている知識を用いればthisを変えたいんだなと意味が明確になる。
qiitaって酷い記事も結構あるし、 yahoo知恵袋も酷い質問に酷い回答のオンパレードだからな。 参考になるのもいっぱいあるけどな 玉石混交ってとこだな
>>73 qiitaて駄目だしする機能ないのがひどいよね。
コメントに書くことはできるけど、切れられるしめんどくさい。
参考にしちゃダメボタン欲しいわ
>>72 そもそもthisを変えて呼びたくなるようなa.f()が駄目駄目
やっぱ、酷い記事は2chに貼って駄目だししたらいいな。 匿名で批判ってのは気が楽だし
>>76 批判目的ならコメントで返信した方がいいと思うが
2chでは本人の目に届かないから、本人はいつまでも気がつかず、質の低い記事を量産し続ける
批判目的というか、プゲラ目的。 上から目線目的なんで、本人特定されるとまずいのよw
qiitaで高校3年生に投稿した記事のダメだしされてオレ氏(30)
>>78 そんなくだらないことの為にスレッドを使うな
一瞬、仕様のどの辺の機能つかってんのかと考えたが、 var f = a.f; f(); ってやるのをトリッキーに書いてるだけやンw
だから無駄だとw ”コメントで説明する” ことを考える前にコードで説明しないとダメなんだよ。 コメントで説明すると、コードと二重管理になってしまうからね。 a.f.call() が一番うまくコードで説明出来てるので、 それをかっこわるい書き方しないように。
a.f.function(*)
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を拡張するときって、関数の場合はグローバルオブジェクトに 継承されて、変数の場合はグローバルオブジェクトに継承されない っていう仕様なのでしょうか?
function foo2() {} をグローバルに定義したらそっちつかわれるんじゃ
>>86 今、定義して確認しました。ありがとうございます。
>>85 prototypeチェーンは継承とは違う
チェーンを辿る際に自身のプロパティがあるなら、そっちを優先するから何もおかしなことはないと思うが
89 :
88 :2014/08/09(土) 22:24:03.42 ID:AVyldlRR
>this.foo2();//hello これ嘘だろ、ちゃんと精査してから書けよ
>>90 undefined だな
グローバルオブジェクトはセキュリティ上の理由でプロトタイプチェーンの影響を受けない
92 :
デフォルトの名無しさん :2014/08/10(日) 01:37:13.89 ID:Zb+KAjkq
94だけど、焦りすぎて焼かれた… HTMLもまだ半分しか報告してません、もう少々お待ちください。
あせり過ぎて未来からの書き込みとは。。。
94 :
デフォルトの名無しさん :2014/08/10(日) 01:48:25.33 ID:Zb+KAjkq
>93 携帯からの表示と自分のパソコンからの表示が違うのでおどおどしてます パソコンからは94があるんですよー自分のブラウザだけかもしれませんが
scに書いてあるわw ちょっくら晒してくるわw
俺は105だけど、さてはて一体何になるかな?
97 :
94 :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; }
99 :
94 :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>
100 :
94 :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,''); }
101 :
94 :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); })();
102 :
94 :2014/08/10(日) 02:15:50.58 ID:TNaWGn4J
全部書き込んだ後に質問文も消えてることに気づきました。 困っているのは、<span class="switched-text">TOP PAGE!</span>の文章が 他のボタンを押した後も消えないことです。 知恵袋を一言一句移してやってるのですが、上手くいきませんでした… ラジオボタンで切り替えなどのページも調べてみたのですが、 初心者の自分には応用もなにも分かりません。 なにとぞよろしくお願いします。
ひでぇコードだな。
>function addClassName(className,el){ >//(ry >el[i].className = el[i].className + '' + className; >//(ry >} よくわからんが、addClassNameの半角スペースは入ってるの? なんか、小手先ってかjsついては結構勉強してる印象はあるが、 なかなか残念なプログラムだなぁw まぁ、現場でここまで知ってくれてるやつ居らんから評価するけど。 ちなみにaddClassName/removeClassNameとかって 'display-none2みたいなクラス名作ったらアウトだよね。
105 :
94 :2014/08/10(日) 02:52:33.87 ID:TNaWGn4J
>103さん 正直自分が書いたコードではないのでなんともかんとも >104 半角スペースはどこへ入れたらいいのでしょうか? こんなことを言っても信じてもらえないかもしれませんが、 JavaScriptを触るのは昨日がはじめてです。 じゃあもっと初歩をやれよと言われればごもっともなのですが、 ネットで色々コードを調べているうちに興味の持てそうなこの機能を見つけてしまい、 挑戦してみたところうまくいかずにムキになっている状態です。 4月からPCの専門学校に通いもっときちんと勉強する予定ですが、 それまでにできることはしておきたいと思っています。 Javascriptを使ってゲームなども作りたいと思っていますが、それはまだ先の話とも理解しています。 どうでもいい話ではありますが。
106 :
94 :2014/08/10(日) 02:53:32.54 ID:TNaWGn4J
104さんに敬称をつけるのを忘れていました…申し訳ありません
>>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
108 :
94 :2014/08/10(日) 02:58:30.24 ID:TNaWGn4J
>>107 さん
はい、そうです!
疲れさせてすみませんw
このソースはどこに入れれば動作するでしょうか?
109 :
94 :2014/08/10(日) 03:04:09.40 ID:TNaWGn4J
教えて頂いたコードを</body>の直前に入れましたがうまくいきませんでした…。 外部のスクリプトの書き換えが必要なのでしょうか?
110 :
94 :2014/08/10(日) 03:11:32.98 ID:TNaWGn4J
結局やりたいことはというと 「ボタンを押したら下部のテーブルに文字が出る。 もともと出ていたトップページの文字は消える」 ということをやりたいのです。 ひどいコードとのことでしたが、 もっとシンプルなコード、もっとちゃんとしたコードを 内容全部とは言わないのでヒント(使う機能など)だけでも教えて頂けると非常に助かります。
>>107 が書いたのは、jQueryっていうライブラリ使って書いたコードだから、
組みこめないよ。
君が提示したコードがどっかからのコピペしたコードなら勉強の役に立たないから捨てたほうがいいよ。
あと、ブラウザでjsのデバッグをする方法調べるといいよ。
とりあえずブラウザ開いてるときにF12押すとデバッガが立ち上がるから、後はぐぐってください。
>>110 > もっとシンプルなコード、もっとちゃんとしたコードを
> 内容全部とは言わないのでヒント(使う機能など)だけでも教えて頂けると非常に助かります。
すまんな。
>>107 が内容全部だ。
あぁ、load時に実行ってのを入れ忘れたか。
115 :
94 :2014/08/10(日) 03:28:37.39 ID:TNaWGn4J
>>111 さん
ありがとうございます。
コードは見れたのですが、当てはめるとボタンが反応しなくなりました。
恐らく自分がjqueryを使っていないのが原因だと思います。
存在は知っていたのですが、使ったことはありません。
ちょっとjqueryについて調べてみます。
116 :
94 :2014/08/10(日) 03:36:41.21 ID:TNaWGn4J
>>112 さん
はい、このコードは捨てることにします。
数時間ググり続けてるんですけどね…
デバッグも、特に異常は表示されません。
表示したい機能を考えた上で、一から作り直そうと思います。
>>113 さん
やはりそうですか…しかしjQueryを使っていないので、
このままこのコードを使うことはできないみたいです。
諦めて一から作り直します。
みなさん、ご指導本当にありがとうございました。
これからJavascriptの勉強、1から頑張っていきます。
> はい、このコードは捨てることにします。 > 数時間ググり続けてるんですけどね… つまりは「コードをググる」という行為は 時間をムダにすることでしか無いということが 証明されたではないか? 数時間あればJavaScriptの勉強ができるよ。
> やはりそうですか…しかしjQueryを使っていないので、 jQueryを使えばいいじゃないか? たったそれだけのこと。
119 :
94 :2014/08/10(日) 03:47:50.65 ID:TNaWGn4J
>>117 、118さん
コード自体はググってないです。
デバッグや他の手段をググったり本を読んで探したりしていました。
jQueryを使った方が楽なのでしょうか?
もしそうなら、早めに覚えておきたいとも思うのですが、
普通の方法でスクリプトが書けるようになるのも大事だと思うので、
悩みます。
120 :
104 :2014/08/10(日) 03:55:08.85 ID:u1URIHVh
ちなみに、半角スペースは試せたか?どこに入れるかは自分で考えてくれ。 >jQueryを使った方が楽なのでしょうか? >もしそうなら、早めに覚えておきたいとも思うのですが、 >普通の方法でスクリプトが書けるようになるのも大事だと思うので、 >悩みます。 javascriptをしっかりやるなら「普通の方法」っていう低レベルのDOM操作は覚えておくほうがいいが、 そこまでしっかりやらんってのであればjQueryからやったほうがいいんじゃね?
121 :
94 :2014/08/10(日) 03:57:39.27 ID:TNaWGn4J
>>120 さん
半角スペースはAddとclassの間とか色々な所に入れてみたのですがすべて駄目でした。
Javascriptはしっかりやるつもりです。
まだ本当に始めたばかりですが、低レベルな所からちゃんと学んでいきたいです。
お、おうw el[i].className = el[i].className + '' + className; の''の間に半角スペース入れると動かん?
>>119 > jQueryを使った方が楽なのでしょうか?
jQuery を使ったほうが楽だろうが、初めからjQueryを使うと変な癖が付くのでお勧めしない
ライブラリはJavaScriptをラップするもの
基本を覚えてからライブラリの使い方を覚えるのでも遅くはない
126 :
94 :2014/08/10(日) 04:15:20.38 ID:TNaWGn4J
>>123 さん
すみません、悪化しました。
色々書き換えまくってた結果、なんか初期画面ですべての文章が表示されてます…
自分の無能さに呆れ果てる次第です。
今必死で新しいコードに書き換えてます。
>>124 さん
分かりました。まずは基本をしっかり勉強します。
>>122 はJavaScript無効環境では無意味なボタンが残る問題があってまだ改善する余地がある
基本は何もボタンを用意せず、JavaScriptで必要なフォームボタンを生成してやるのが一番いいだろうな
128 :
94 :2014/08/10(日) 04:27:03.67 ID:TNaWGn4J
>>125 さん
ググって解説ページも見たのですが、今の自分にはかなり厳しいです…
やはりこのような機能を初心者が実装すること自体が無謀だったのかもしれません。
自省して、背伸びせず、基礎からはじめ直します。
みなさんこのような初心者のせいでご迷惑をおかけし申し訳ありません。
>>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();
});
>>127 > 基本は何もボタンを用意せず、JavaScriptで必要なフォームボタンを生成してやるのが一番いいだろうな
いやこれは本質的にはradioボタンの動きなので、
radioを使ってCSSだけで実装するのがいいだろう。
簡単DB検索システムを作ります。 入力フォームのページ、検索結果リストを表示するページの2つに分けたいです。 ググっても「1つのページ内で入力して表示を出す方法」しか出てきません。 入力フォームから文字列取得、GET通信と戻り値取得は出来たのですが、 どのように組めば2ページ目に戻り値を表示できるでしょうか??
> jQuery を使ったほうが楽だろうが、初めからjQueryを使うと変な癖が付くのでお勧めしない jQuieryを使ってつく、変な癖っていうのがよくわからないな。 jQueryはただのJavaScriptのライブラリだぞ。 むしろjQueryを使わないほうが、ブラウザ固有の問題。 たとえばclassListで書いたら動かない。 いろいろ調べたらclassListが動くのはIE10以上で〜 みたいな問題にハマるから初心者こそjQueryを使った方がいい。
>>129 それで動くのか
this 値がトリッキーすぎるな
また一つ、jQuery が嫌いな理由が出来てしまった…
>>130 自分で書いておいてなんだが、「タブ型UIを作りたかった」といわれても納得できるんだよな(今気づいた)
だとすれば、>122は期待通りに動作していないことになるわけだが、こればかりは質問者でないとわからん
タブ型UIなら始めに全コンテンツを表示しておいてJavaScriptでタブ型UIに作り変えれば済むのだが
>>133 ん? もしかしてthisがよくわかってない?
無理やり難癖をつけてjQueryを嫌おうとする人が
一部にいるみたいだが、どうにかならんもんかねw
別にこれでも動くよ。冗長だけどね。 $('#sample').on('click', 'input[type=button]', function (event) { $('#output').text(event.target.value); event.preventDefault(); });
>>132 変な癖っていうのは
・メソッドチェーンに拘る
・無名関数を多量生産する
これは明らかにスタンダードな書き方ではない
基本を覚えずにこれを覚えると、
・必要もないのにメソッドチェーンにしたがる
・名前付き関数を忌避して無名関数でなければ気持ち悪く感じる
という感覚を持つ場合がある
Web制作板で妙に関数型言語に拘る奴がいるが、ああいう感じだ
まあ、一部の信者だけだと信じたいが、刷り込み効果も結構怖いので初めからこの書き方に慣れて欲しくない
>>134 そちらこそ event.currentTarget と event.target の違いを理解してるのか?
勝手に難癖つけていることにしないで欲しいんだが
this値は event.currentTarget と同義
DOM 3 辺りからこの規約になったはずだが、もともとはDOM 規定に this 値は入ってなかった
この場合の event.currentTarget は #sample になるので、event.currentTarget で参照可能なのは本質的におかしい
> この場合の event.currentTarget は #sample になるので、event.currentTarget で参照可能なのは本質的におかしい これは単にjQueryを知らないだけだねw this値は event.currentTarget と同義ってのは間違い。 thisってのは呼び出し元が自由に決められるもの。 だからこの場合のthisは、jQueryの仕様で決まる。 それを知らないだけ。
140 :
137 :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() が出来てようやく区別できるようになった
初めから標準にあわせておけばこの手の問題は起きなかったはずだが、そうしなかったのは理解に苦しむ
OK、OK、君はDOMに準拠してないのが嫌い。 俺は、ブラウザ間での互換性など ハマる部分があるから、初心者にこそ jQueryを使うのをおすすめする。 こういうことだね?
>>141 俺のネガティブな部分とお前のポジティブな部分の比較が公平ではないが、当然意識してやってるんだろうな?
煽り立てて話すことしか出来ないなら、お前と話し続ける意義は感じない
>>131 1ページ目は入力フォームのHTMLがあって、それが表示されている
そこで送信ボタンを押すと、サーバと通信して、
新しいHTMLをもらうので、それが表示される
それが2ページ目だよ
2ページ目から、1ページ目に戻りたいなら、
ブラウザの前に戻るボタンを押せばいい
>>142 別に話し続けなくていいよ。っていうか
これ以上レスしないなら俺が助かる。
で、jQueryは初心者こそ使うべきもの。
DOMの面倒な部分、複数の要素に一括で属性や
イベントを割り当てることや、各ブラウザの違いによる問題に
はまらなくて済むから。
実際に
>>122 が動かないコードであることを証明している。
最初から一部のブラウザで対応で書くのが大変なことを意味している。
>>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から学ぶほうが効率が良いと思う
どちらにしても、あとは質問者が判断することだろう
>>143 なるほど。
今はサーバ側ではDBから取り出したデータを整形して戻り値としているのですが、
htmlとして必要なコード全てを返すようにすれば良いということですね。
別のページに検索結果データを渡して表示するようなコードが無いのは、そもそもそんな動きをJavaScriptは出来ないという…。
何となくJavaScriptの出来ること・出来ないことが見えてきた気がします。
ありがとうございました。
> 初心者は基礎から学ぶもの ぶっちゃけDOMが基礎っていうのもおかしいんだよね。 基礎っていうのは、何年たっても使えるものだが DOMはそうではない。あれはブラウザが搭載している API(ブラウザとバージョンによって違うもの) クロスブラウザとか、本来考えなくていいことなはずなんだよ。
>>90-91 グーグルクローム
バージョン 36.0.1985.125 m
で実行しましたが、
>Object.prototype.foo2 = function(){document.writeln("hello<br/>");}
>this.foo2();//hello
undefinedでなくhelloになりました。
>>149 テストしたら、確かにそうでした。すみません。
ただEcmaの仕様では実装依存と書かれているので、
グローバルオブジェクトに継承させることを期待するコードを書くのは危険だと思います。
>>147 わかった
では、対応する必要があるならすればいいだろう
クロスブラウザを含めて勉強になる
>>148 jQueryはDOM APIで実装されているのだから、jQueryよりはDOM APIを基礎と表現しては差し支えないと思うが
逆に聞くが、jQueryが基礎になるのか?
また、DOM は基本的には変わらないので DOM L2は今でも使える
( 策定前の不安定な時期に変更があるのは仕方ない)
俺が言ってる基礎というのは、プログラミング一般における基礎であり 特定の言語やブラウザには依存しないもの。 DOMは標準化されているが、これはプログラミングの基礎には値しない ただの一ライブラリだ。しかも巨大で全貌を把握している人なんかほとんどいないだろう。 現在のDOM3はリファレンスからして曖昧。各ブラウザで動作に違いがあるのは IEのせいではなくて、DOMそのものに問題がある。 jQueryは標準化こそされていないが、その考え方は現代の プログラマにとって必須とも言える関数型言語をベースとしており 応用の範囲が広い。 > また、DOM は基本的には変わらないので DOM L2は今でも使える DOMが変わらないなんてバカバカしい。 現在DOM4が策定中であり、非推奨の機能は消える運命にあるし、 またブラウザでまともに実装されてないので、古いやり方と新しいやり方が 混在し、またブラウザ固有のやり方をしないといけない場合もある。 DOM2のMutation Eventはどのブラウザで使えるのか言えるか? これは問題が多いからDOM4ではMutation Observersに変わるわけだが、 どのブラウザで対応していて、どのブラウザからMutation Eventが使えなくなるのかぱっと言えるか?
154 :
143 :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もあるが、
漏れはよく知らないので、誰かに聞いて
>>154 ステマ乙
>>146 そのレベルであれば、ajaxでできなくはない。
まぁ、説明すんの面倒だからがんばれ
>>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の場合と比較できてないように思われるが
また、DOM は Interface の一種であってライブラリではない だから、他の言語でも実装できる
158 :
146 :2014/08/11(月) 15:43:33.36 ID:CKKbQKMW
>>154 ああ、分かりました。PHPで、JavaScriptのコードも生成してしまうってのもありなんですね。
混乱しそうですけど、どう取りかかれば良いかは明確ですね。
ありがとうございます。
>>155 本当ですか!?もしajaxで出来るなら、何かヒントだけでも頂けませんか?
159 :
143 :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>列 などのタグを使って、表として表示する
160 :
143 :2014/08/12(火) 01:29:55.91 ID:7nSDT24w
ほとんどのwebサイトは、サーバサイドPHPと、 ブラウザでJSを使う それと、Ajax,DOM
161 :
146 :2014/08/12(火) 02:23:43.49 ID:U0rqxCXc
>>159 なるほど。PHPファイルとは別にjsファイルを置けば、PHPとJavaScriptが混在する割合が減りますね。
そもそもJavaScriptでHTMLの部品を吐き出すようにすれば
組み立てるだけみたいになる…のかな。
教えていただきありがとうございます。
PHPでJavaScriptのコードも生成するのは絶対にダメ。 唯一の例外はJavaScriptのコードではなく変数を生成することだけ。 その変数も数は少なくJSONライブラリを使って連想配列を定義するようにする。 しかもこれは最終手段で、HTML要素にカスタム属性をつける方がいい。
163 :
143 :2014/08/12(火) 05:37:48.69 ID:7nSDT24w
PHPとJSが密接で、相互に行ったり来たりしていたら、 プログラムできないだろうねw PHPを修正 → JSを修正 JSを修正 → PHPを修正 うわあーーーっw
var guheguhe = 'parentScope'; var hogehoge = function() { var guheguhe = 'childScope'; console.log(親のguheguhe+'#'+guheguhe); } ------------------------------------- parentScope#guheguhe みたいにできたらいいけど、いい方法ない? あとクロスブラウザで関数自身から関数名取得するいい方法ないかな? ログ取りたいんだけど、いちいち自分で関数名設定するのうざいw
------------------------------------- parentScope#childScopeだ すまんw
>>164 親スコープの変数を取得する方法はない
対策は変数名をバッティングしないようにする
関数名は非標準だが Function#name で参照可能なので設定する
変数名と関数名は同一ではないので、混同しないように気をつけよう
補足。 Strict Modeを使用しなければ arguments.callee で自身を参照可能ではある しかし、「関数名を設定せずに関数名を取得したい」が自己矛盾で判断に困るな
ありがとうね。できなければいいんだwできなければ できそうな感じを醸し出すからまいるよw
169 :
166 :2014/08/17(日) 18:01:22.79 ID:d8V7Agpt
>>164 var guheguhe = 'parentScope';
var hogehoge = function() {
var guheguhe = 'childScope';
console.log(window.guheguhe+'#'+guheguhe);
}
外がグローバルスコープだった場合はこれで取れる
IE7以下を切り捨てた場合、querySelectorはあると前提していいですか?
いい 他に古いのっつったらFirefoxやOperaの古いの使ってるやつや Androidの標準ブラウザだろうけどその辺はみんな対応してる
ありがとうございました
【環境】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(){ //処理 }
>>177 ダーメダーメ。それじゃ、誰も意味がわからないよ
や・り・な・お・し・☆
var test = { callback: function( obj ) { ... } }
javascriptでページが切り替わっても変数を取得し、変わらないまま使うってことできる? 例えばa.htmlの変数Hは100 これがb.htmlでもH=100のまんまで使うことができ、これがH=H-20;で80になっても、80のまんま使えることができる。って感じに
いや 全然 なぜに?
ウェブプログラマなら日常的にやってることだからだよ。
>>177 サーバサイド側で出力するJSONPを何とかしないと
俺初心者、最近やりはじめた
フラグメント識別子にパラメタを格納すれば良い
ローカルストレージを使用すれば良い
セッションを利用すればいい
>>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を表示させたいんだけど、どうすればいいか教えて下さい /* ここ */ に何を入れればいんだ? 要するに変数の中身を 変数として使いたいんだ...
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); }); テストしてねーから動かんかもしれんが、大体わかるだろ?
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 を取得するのはどのようにすればよいのでしょうか?
195 :
194 :2014/08/27(水) 18:19:57.40 ID:iz8Mv+tw
$("[class=email]").val() ではなく $("[name=email]").val() です
$("[name=email]").attr("class")
>>194 $('#もしくは').attr('class')
ライブラリの質問はライブラリスレを推奨する
>>194 > 指定id(もしくは) の class を取得するのはどのようにすればよいのでしょうか?
君が本当に必要な物は、hasClassだと思うよ。
さらに言えばaddClass, removeClass, toggleClass
main.html、data.html、data.jsonの3つファイルがあって、main.htmlのリンク1をクリックすると、data.htmlにdata.jsonの任意のデータを表示する、ということがしたいのですが、 任意のデータがn番目のデータだとすると、どうすればn番目を指定できますか? 教えて下さい。
jsonでデータ配列を設定
202 :
199 :2014/08/28(木) 19:06:38.63 ID:JpfrJ9uS
main.htmlからdata.htmlにnを渡したいのですが、どうしたら良いのでしょうか?
〔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〕って出るようにしたいのですが、どうしたらよろしいでしょうか?
名前を入力してボタンを押したら、その入力欄の文字が別のファイルに移るプログラミングを書きたいのですが、みなさんならどう書きますか? A.htmlからB.html変数を受け渡す。 Aボタンで名前を入力してボタンを押せば、それがB.htmlに反映されるってプログラム 全然思いつかない
>>205 GETパラメータ、Cookie、LocalStrage
もしかしてプッシュ型にしたいのか?
JavaScript(Greasemonkey)を用いて、ブラウザ操作の自動化を考えています。 具体的には、あるサイト上にあるフォームの自動連続処理で、 1.予定一覧画面にて、予定日変更ボタンクリック ↓ 2.確認画面が表示される 変更しますか?[YES][NO]ボタン ↓YES 3.予定日変更画面が表示される [予定日パラメータForm] ↓Submit 4.予定一覧画面表示 上記1.を手動で行うと、2,3,を裏で行い、予定日を1日後に変更し、 4.の画面が表示される。というのをやりたいです。 XMLHttpRequestを用いれば、 HTTPリクエストをPOST送信でき、その結果も受信可能だと知りました。 上記の事を行いたい場合、 POSTした結果返ってきたオブジェクト(?)に対して、 さらにXMLHttpRequestでPOSTする。という方法で行うのでしょうか?
XMLHttpRequestで完了後にコールバックが呼び出されるからその中でまた何かすればいいよ
<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>の画面に切り替わるようにしたいです。
クラスaがあった時に a.contrastorでコントラスタを呼び出せるのはわかったのですが定義のしかたがわかんないです
a=new b(tes,test)した時に bがコントラスタと言うのはわかっているのですが c++のコントラスタ aを作った時に自動で実行される関数を作りたいんです
>>215 さすがに入門書を読めというレベルだが…
function b(tes, test) {
this.tes = tes * test;
}
だよ
関数定義がコンストラクタ定義と兼ている
入門書以前のレベルで スレチかもしれないのですが、 <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に表示するのはどちらが良いですか?
220 :
デフォルトの名無しさん :2014/10/02(木) 04:24:30.72 ID:aXqRJddw
webページ上で入力された内容をサーバー上にある別のtextファイルに書き込み、またはファイルからの読み込み、指定したファイルがなければそのファイル名で生成、 といったようなことはjavascriptのみでは無理でしょうか? 調べてみたところ他の言語を使う方法がありましたが、まだjavascriptでやっと簡単なものを作れるレベルなので、出来ればjavascriptで極力シンプルに作りたいです。 javascriptだけで作る方法を教えてください。よろしくお願いします。
>>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でも何でも使えばいい。
javascriptでようやっとレベルなら 今は諦めろ
225 :
デフォルトの名無しさん :2014/10/02(木) 12:31:22.31 ID:NlLaQCXe
サーバーでNode.jsで全部できる
Nodeやろなあ
227 :
デフォルトの名無しさん :2014/10/03(金) 13:53:07.94 ID:ups0u7SZ
javascript始めたんだけど開発環境をどうすればいいか全然わかんない eclipseJSDTいれてみたけど使い方わからなすぎてクソいらいらする どうすればいいの???
>>227 基本、JavaScriptの開発は、EclipseのようなIDEを使うのではなく、
Notepad++みたいなエディタと、Chromeなどのブラウザについてる
デバッガーを使って開発するんですよ。
229 :
デフォルトの名無しさん :2014/10/03(金) 17:15:48.03 ID:ups0u7SZ
>>228 そうなんだ、ありがとう!!
Notepad++ さっそくインストールしました
何か勘違いしてそう
業務ではC++builderでWindows向けアプリ作るので必然的にIDE使ってるが、個人でWeb系勉強するときは、Notepad++使っています。
業務でWeb系される人でNetBeansとかEclipseは少ないんですかね?
こういうIDEは、Javaで開発する人が使うもんですかね?
あと、こういうサイトは普通に開発現場で使われてますか?
http://jsbin.com
233 :
232 :2014/10/03(金) 19:26:11.87 ID:3E3drCsQ
× 道具なんて自分の完成に合うものを選べガいいだけだと思うんだけどねえ ○ 道具なんて自分の感性に合うものを選べばいいだけだと思うんだけどねえ
そもそもJavascriptってIDEの恩恵を受けづらい言語のよーな コードスニペットは便利だけど
もう少ししたらFirefoxにWebIDEがついてくるけどね ブラウザだけでコーディングまで出来るってのは便利そうだ
寺尾進のTeraPadがいいよ。Win8にも対応している
IEなら、F12を押すと、開発者ツールが立ち上がるけど、
これ、どうやって動的に変数の値を変えるの?
これの使い方は、どこで見れる?
皆ここで、ゲームなどのソースコードを、
MITライセンスで発表している
ttp://jsdo.it
interHTMLが正式対応してないので便利なのにも関わらず使わないで var new_obj = document.createElement("div"); からappendChildを使って挿入する利点はありますでしょうか?
>>237 そんな質問をする程度の人なら、jQueryを使うことをおすすめする。
>>93 jQueryの中身はinnerHTMLだらけだから、それこそinnerHTMLを使ったほうがいいと云う事になるな
>>237 inter
<div><span value="file://C:\hoge\huga"></span></div> のような要素があるとして document.querySelector('span[value="file://C:\hoge\huga"]'); としてもマッチしないのですが、\が含まれている場合はどう書けばいいんでしょうか
>>237 - XSSを回避できる
- HTMLエスケープを考慮しなくいい
- appendChild 前からHTML埋め込み型以外でDOMにイベント定義できる
>>240 "\" が ECMAScript と CSS の二重の意味でエスケープされてないから
ただ、そもそも論として span[value] は存在しないので data-* 独自属性を使いましょう
243 :
240 :2014/10/06(月) 00:36:55.39 ID:KsFP//XZ
>>242 アドバイス通り二重にエスケープを行ったらマッチしました
レスありがとうございました!
>>238-239 そういうのは使わないので聞いたのですがinterはミスでした
>>241 色々重要な利点があるんですね、ありがとうございました
tinymceのテキストエリアにvalue要素(document.getElementById("textareaid").value) 等を使ってタグ付きテキストを挿入すると何も表示されないです。 テキストエリアに挿入するにはtinymce.js等をインポートして tinymce.activeEditor.setContentとかでやらないとできないのでしょうか? 知っている方ご教示のほど宜しくお願い致します。
>>234 逆に言うと、メソッド補完くらいしかないからねぇ・・・・
でも、結局はブラウザのデバッガが必要になるので、IDEじゃ結局
完結しないから、自然とEclipseでやらなくなる。行ったり来たりが
死ぬほど面倒だからね。
JavaScriptっていうか、動的言語全般に当てはまるけど、 補完がうまくできない場面とか多いからね(Factoryメソッド使ったときなど)。
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 をつかって確認しました。
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部分がアラートされます。 諸先輩方のご指導よろしくお願い致します。
>>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 );
の修正間違いでした。
>>250 開くウインドウが外部サイトだったらセキュリティ的にできないよ。
外部のサイトの内容を好き勝手読み取れたら脆弱性になる。
>>252 質問者ですが、アドバイスありがとうございます。
すでに表示されている内容を読み込むだけなんですが無理なんでしょうか。
なんかできそうな気がして頑張ってたんですが・・・・
相手はドコだよ
>>252 の繰り返しになるがクロスドメイン制限でググってこい
>>254 ググってきました。
なんか無理っぽいです。ありがとうございました。
色々試したり調べてたりしても上手くいかないので、 質問させてください。 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以前ではまだ試しておりませんが、そちらでも動作すると大変助かります。 お分かりの方がおられましたら、ご教授お願いいたします。
改行数で書き込みエラーになったため文章を削った際、 mainWのfunctionの箇所を消してしまいました。 申し訳ありません。 mainWとしているのは window.opener.location.href = "test3.html"; window.opener.focus(); のコードです。
wshのjsはここでいいのかな?
ダメな理由もないというか
>>2 にある前スレのURLを見れば分かる通り
ここって本来は馬鹿が自らを隔離するために立てたセルフ隔離スレだからな
ただまあ、大抵の質問はVBSのそれに変換できそうだしそっちのスレのが人多そうだけど
ありがとう
質問があれば書いとけばいいよ。元スレは常に荒らされてる状態なんで避難所的に使えばいい
当人こっちも見てるからそういう事書くとまた荒らしに来るで
お初です。よろしくお願いします。
さっそく質問です。
function simulateClick(x, y) {jQuery(document.elementFromPoint(x, y)).click();}simulateClick(%.1f, %.1f);
で普通のサイト(Appleとか)はタップできるのですが、
もぐらたたきゲームではタップできません。
view-source:
http://androidiphonewebapps.com/whackamole/ これはなぜでしょうか?
また、解決策がございましたらご教示宜しくお願い致します。
jQueryが読み込まれてないから
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」ではないと推測したのですが、
実際なぜクリックもログ出力もできないのでしょうか?
解決方法が存在しましたら、ぜひご教示宜しくお願い致します。
スレ主キター
$.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)
>>271 ありがとうございます。callback必須なんですね…
273 :
デフォルトの名無しさん :2014/11/29(土) 19:18:25.31 ID:SoXvwZNw
いや callbackの問題じゃなくて 引数にオブジェクト渡したら駄目
関数名を変数で付ける方法ってないですか? x = "me"; function na+x() {} ↓こんな感じになる function name() {} もしくは関数名を後で変更する方法はないでしょうか?
オブジェクトのメソッドなら可能
this['sample']=function() { console.log("called."); }; sample();
x = 'me'; window['na'+x] = function(){ alert('hoghoge'); }; name();
var hoge = new Date((new Date()).toISOString()); var fuga = Date.parse((new Date()).toISOString()); この辺がエラーになるのが気持ち割るいお
同じ板でマルチポスト速めてくれ
一般論だけど javascript は他の言語と比べても this がどこ差してるか判り難い
thisは一般的にはクラスのメソッドにしかスコープ内にない JavaScriptはただの関数なのに節操無くthisにアクセスできるから混乱する しかしコールバックに登録する時に威力を発揮するから良し悪しだな
グローバルオブジェクトがWindowで作った関数がそれに属してしまうってのが なんとなく気持ち悪いっていうかスッキリしない部分ではあるな。 コンソールで動かしたnode.jsだとここは何になるんだろう?
仕様があらゆるところでぐちゃぐちゃ
>>282 いやいや、"use strict";すればundefinedになるよ
毎回this気にするくらいなら、狙ったとこのthisを保存しとけばいいだけだしなー
thisが何を指すかは仕様を理解してれば嵌まらない。まず仕様を理解することだな。 thisを固定する方法も用意されているし、こんな所で嵌まるのはまだ未熟だと自覚しよう。
>>286 thisは呼び出し側で何にでも設定出来るから、仕様通りに設定されてない可能性もある
まずはライブラリのドキュメントなりを確認するのが先だな
>>274 変数名(プロパティ名)の変更は出来ても関数名の変更は出来ない
>276-277も変数名を変更しているだけで関数名は無名関数のまま変化していない
>>287 「ライブラリの仕様」を確認するという意味で仕様を確認するスタンスは間違ってないと思うが
ライブラリのコードを読めばES仕様通りに書かれているはず
仕様を順に追っていけば「仕様通りにされていない」という状況は実装バグor未実装以外にあり得ない
>>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' }
これは極端な例だけど変なオブジェクトが渡されてるよ
ライブラリによってはたまに予想外のオブジェクトが渡されてくる事があるし
>>290 それは Function.prototype.call の仕様通りの挙動だろう?
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
arguments.callee.caller を thisArg に渡して call
でもさ、ぶっちゃけみんなbind使わないよねw たいていはthisをselfだとかthatだといった名前の変数に入れて使う そっちの方が短くてわかりやすくなることが多いから。
非標準は避けたかったという理由もあるんじゃね
>>280 fuga.hoge(...);
huga.hage(...);
が
hoge.call(fuga, ...);
hage.apply(huga, [...]);
になってるだけで
this が fuga だったり huga だったりすることだけ覚えておくと迷わない
確かにコンテキストで指してる場所(使われ方)が違うように見えるから
いくつも種類があるように見えて混乱するけど this はあくまで一種類しかない
>>294 arguments.callee.caller は使用禁止
>>295 javascript の場合は .bind() 使った方が判り易くなると思う
>>295 addEventListener に listener を渡すときに this 値の変更を阻止する為に Function.prototype.bind を使うことはある(一つだけなら handleEvent で済ます事も多いが)
多くの場合、bind の方がコードがシンプルになる
変数束縛はクロージャを一つ以上発生させる上に関数の位置が下位スコープに限定されるから扱いづらい
また、bind を使わない理由は bind を使えない実装が対象ブラウザに入っている場合に限定される
bindはES5の標準だしpollyfillで対応出来るもんだから積極的に使うべきだな
>>302 polyfillは完全な実装ではない事を意味している
何突っかかってんの?
コンストラクタをbindなんて普通しないから無問題
>>302 が言ってんのはそのサイトで問題になってるコンストラクタをbindした時の事じゃなくて
可変個引数の事か?
それは普通のpolyfillで問題ないがな
>>303 あなたの文言から疑問に思った点を質問しただけでなぜ攻撃的になるんだ?
純粋に教えてもらいたかっただけなのだが
> polyfillは完全な実装ではない事を意味している
polyfillに不完全性を保証する意図はないぞ
Array.isArray のように完全な互換性を持つコードも存在するからな
完全性、不完全性は仕様上の制約に依存する
> コンストラクタをbindなんて普通しないから無問題
あなたはそう思うのだろうが、制限付きなら明言しておくべきだと私は思うがね
どこまで互換性があるか知らずにpolyfillを使う人もいるのだろうし、私のように互換コードを実現できると誤読して探し回って徒労に終わる人もいるだろう
自己責任ω
jQueryにはbindに相当するものとして、$.proxyっていうのが有るのだけれど、
なんでbindがproxyという名前なのか昔から疑問だった。
prototypejsではbindという名前なのに。
最近その謎が解けた。それは変数にthisを代入すればいいから
bindは不要であるという話にもつながっていて、
例えば、
>>293 みたいなものは、bindで渡すべきじゃない。
なぜなら、getXは普通に考えると自分自身のxを返すという仕様であり、
外部から指定されるべきものじゃないから。
そして外部から指定するもの。例えばあるクラスにイベントハンドラを
設定するみたいなコード。そのイベントハンドラに匿名関数を渡すのではなく、
別のオブジェクトの関数を渡す時に、$.proxyを使ってオブジェクトをバインドする。
(普通は関数だけじゃなくてオブジェクトも指定する必要があるから)
バインドしたい時というのは、このように別のオブジェクトの関数への
プロキシとして使うことがほとんどだから$.proxyという名前なんだ。
少し言い換えると、 「bindがthisを結びつけた新しい関数を生成」までが仕事の範囲なのに対して 「proxyはthisを結びつけた関数に処理を移譲」までが仕事の範囲というニュアンス
310 :
デフォルトの名無しさん :2014/12/02(火) 14:02:04.50 ID:eJtypcMS
312 :
デフォルトの名無しさん :2014/12/02(火) 16:48:20.21 ID:VNjwMjdE
GCが始まるたびに黒煙が・・・
乗りたくない
そういや、昔のブラウザ(IE5あたり?)はcallもapplyもなかったんだよな。 その時代にクロスブラウザやってたから、callとapply相当を 独自実装したことがあるよ。 どうやって実装したか、考えてみると面白いかもしれないね。
なにこのあらゆるBINDはクソみたいな流れw
317 :
デフォルトの名無しさん :2014/12/03(水) 23:07:57.08 ID:Re3JbBDI
javascriptの勉強を始めて一週間足らずの初心者ですが、 jQueryでdom要素を生成し、それをiframeに表示するようなことは 可能でしょうか?
加納
姉妹
>>317 そもそも、iframeにする必要性がない。
DOMの前に、HTMLの基本知識くらいまず頭に叩きこむべきだね。
>>316 可能。
>>320 iframeには面白い特徴があってね。
親のCSSがiframe内には適用されない(その逆も)
という特徴がある。
こういう風にウインドウが隔離されているような
感じになる。サンドボックスといって通じるかな?
で、実はHTML5にはiframeにまさにsandboxという属性が追加された。
インラインフレーム内のコンテンツにセキュリティ上の
制限をかけるためのものだが、単なる別ページ読み込みの機能が
サンドボックスとして使われるようになったんだよ。
フレームは廃止されたが、iframeが廃止されないのには理由がある。
最新版Chromeでモーダルダイアログを表示したいのですが JQueryを使わずに実装するよい方法はありませんか?
>>316 bindどころか、call, applyまでディスってる人がいるようだけど、一人だけだよね
「外部から指定されるべきものじゃないから」とか、その論理はどこから出てきたんだって感じ
jQuery のメソッド名が proxy なのは既存の jQuery#bind と混同しないための配慮だと思う
jQuery内部でもcall使ってるし、forEach, sliceをcallでthisArg変更するテクニックはよく使われるし、thisArgの変数束縛に拘る理由が破綻してる
>>306 あんた生きづらそうだなあ
その要領の悪さだと、さぞ
おっとやめとこう
>>324 お前は性格悪そうだな。
人からよく反感買ってるでしょ。
そのレスの内容から、よくわかるよw
>>323 よくみれ。call、applyをディスっている人は
どこにもいない。
>>326 「外部から指定されるべきものじゃないから」ってcall,applyは許容してbindだけNGなの?
今一、理屈がわからない
call、applyは関数をじっこうしてる。 bindは関数を実行しない。 違い分かった? OK?
>>328 そのぐらい知ってるから
どちらも外部から変更してるでしょ?
callを許容するならbindを禁止する理由がないよね
bind禁止? 誰が? 一体誰にレスしてるのさ。 ちょっとアンカーつけてみな。
332 :
デフォルトの名無しさん :2014/12/05(金) 05:40:21.58 ID:rX/gvri9
>>317-321 iframe内は、スクロールしないと全部見えないから、
視認性が悪く、操作が面倒
アコーディオンのようにクリックしたら、
中の文章が表示されるなら、操作は楽
(ただし、画像などはうまく表示されるかどうか、知らないけど)
ただ、jQueryで実装するのが難しいから、
HTMLタグだけで使える、iframeを使うのだろう
>>331 その文章の中から、bind禁止している所に
^^^^を引きなさい
>>332 > iframe内は、スクロールしないと全部見えないから、
スクロールしなくても見えるようにサイズ広げればいいだろ?
だいたいウインドウであっても、縦に長いと
スクロールしないと全部見えないんだが?
全部見えないからなんなの?
>>332 > (ただし、画像などはうまく表示されるかどうか、知らないけど)
普通に考えればうまく表示されるだw
> ただ、jQueryで実装するのが難しいから、
簡単だろw
お前、実はレベル低いだろw
>>331 jQuery が bind 禁止している(してないけど)ように見えるのは
bind が jQuery 上の別の意味の bind と名前が被ってるから
別に native な javascript の bind を禁止している訳ではない
そしてbindがproxyという名前になっているのは、 通常bindしただけで終わることはなく、 関数呼び出しまで伴うから。 call、applyともに関数を呼び出す(または適用する) bindだけだとthisをbindするだけの意味で終わるけど proxyならある関数に処理を転送するという意味になる。 より適切な名前であるという話。
>>308 が言っているのは、
> 例えば、
>>293 みたいなものは、bindで渡すべきじゃない。
>>293 みたいなものの話。bind全部を禁止などとは言っていない。
オブジェクトのメソッドが(意味的に)自分自身を参照したいならば
それは外部からもらうのではなく、変数に持っておけという話。
>>337 bind が関数呼び出しまでしてしまうなら callback として渡せないだろ
かえって迷惑だしそもそも call/apply で充分って話になってしまう
>>331 その話は「bind禁止」じゃなくね
・大概の場面はbindじゃなくても出来る
・残りの限られた場面を表すものとしては、proxyのがしっくりくる
という話にしか読めんな
jQuery スレじゃなくて JavaScript スレだから仕方ない
>>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/
なんか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を使う使わないなんて議論する余地なんてない
>>343 boundGetX は直訳すると「縛られたGetX」だけど、何に bind されてるか、わかりずらいかなーと思った
var boundGetX = getX.bind(module),
var boundGetX = getX.bind(hoge);
どちらも boundGetX で意味は通るけど、何にbindされてるかわからない
>>308 の「getXは普通に考えると自分自身のxを返すという仕様であり」あたりは対象が不明だからそう思うのであって、module という対象が明確であればなんら問題はない
345 :
344 :2014/12/05(金) 14:43:24.41 ID:I0a9lIBJ
些事だけど訂正しておく × わかりずらい ○ わかりづらい
>>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 がどのインスタンス指してるかは どうやって調べるのが簡単?
>>343 >他の変数(selfなど)にオブジェクトを代入しといて使うとか言ってる奴が居るが
>
>>293 の
>> getX: function() { return this.x; }
>のthis.xをself.xとかに書き換える無意味な変更が生じる
そう言うタイプは初めからself作っちゃうから
むしろ「thisに書き換えるほうが無意味」と取っちゃうと思うよ
>>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して呼び出すなんてありえない。
jQueryのproxyの話をすると、これはproxyした関数を
自分で呼び出すって使い方は普通はしないんだよ。
つまりな、
var bindedFunc = $.proxy(func, obj);
bindedFunc();
こういう使い方はしない。まさに
>>293 の最後の行の使い方だよな。
これはbindという名前の発想をしているからそうなる。
$.proxyはそうではなくて
$('span').on('click', $.proxy(defaultClickHandler, handlerCollection))
こういう使い方をする。
ハンドラコレクションに定義された、デフォルトのクリックハンドラに
処理を移譲(Proxy)するというわけだ。
ド素人の質問で申し訳無いんだけど
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 ありがとうございました。
URLを参考にがんばってみます。
>
>>293 は
>>342-348 の指摘している変数名以外は問題なさそうだな
いらないですよ。何の説明もしてないレスは。
言い返していることに成りませんから。
>>356 おまえは誰と戦っているんだ?
言い返すも何もただ感想をいっただけ
おまえと議論する気は毛頭ないし、おまえがどのレスをしたのかも知らん
議論? 俺は個人の感想を言っただけじゃ
何の意味もないって話をしているだけ。
>>293 は問題がありまくりだな。
はい、これは私個人の感想ですよ?
>>293 は問題がありまくりなのは確定です。
>>358 おまえが「言い返していること(
>>356 )」といったから議論する気はないと反論したんだよ
感想なんだから言い返すも何もないだろ
ひょっとして「言い返すこと」がおまえの中の「感想」なのか?
日本語を勉強してから出直して来い
>>359 ってうざいやつだな。
実社会でもうざいって言われる
孤独なニートだな。
人格批判に陥るのがあまりにも惨めすぎて笑ってしまった
Ajaxで自分で自分のページを呼び出す時にprint $変数とすると、printだけでなく、ここでは 呼び出さなくてもいいのに、html構文まで一緒にそのまま呼び出されてしまいます。 visibility hiddenにするとhtmlは表示されなくなるんですが、最初の入力フォームまで 表示されなくなってしまいます 最初の入力フォームは表示されたままで、自分のページを呼びだし、phpだけを動かして 変数をコールする方法はないでしょうか?
これはエスパー検定2級の試験問題からの抜粋です この設問を読んだときの回答者の気持ちを30文字で答えよ (10点)
>>293 は問題がありまくりなのは確定です。 (23文字ぐらい)
>>362 Ajaxなのだから自身を呼び出すにしてもHTMLをそのまま呼び出す必要はないだろう
PHP側でGETパラメータ判定する等して出力を変更すればいい
自分の考えや直面している問題を整理し人にわかりやすく伝える事こそ
今の
>>362 の至上命題といえよう
質問です
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);
は無駄じゃないでしょうか?
なぜこう書くのでしょう?
>>368 JavaScriptはブロックスコープが無くてグローバルか関数スコープしかないから
グローバルに変数を撒き散らしたくない場合は、関数を作るしかない
その例では確かに無駄だがイディオムとして確立してるので常にそうすべき
>>368 無名関数の引数にグローバルオブジェクトをbindするテクニックにとらわれているだけで無駄なコードだと思う
無名関数でスコープ制限するだけなら内部関数でも行われているしね
それはそうと、quiitaにはコメント機能があるから、コメントで質問してみると作者の意図が聞けていいんじゃないかな
CoffeeScript で書いたのかも知れないなーとは思うけど
>>370 だから無駄じゃない
var Module;
(function(global){
...
})(Module || Module = {});
とすればモジュールを簡単に定義できて、再利用する際の利便性が増す
> その例では確かに無駄だがイディオムとして確立してるので常にそうすべき
だから↑と言っている
>>372 >>368 の中のコードで同じようなことをやってるから無駄
> (function(global){
なぜ Module が global なのさ
一つのやり方に拘ってるから全体が見えないんでしょ
var Module = (function(Module){
...
return Module;
})(Module || {} );
>>368 のglobal束縛を生かすならこう書く
(function(global){
function SitesUtil(site){
this.site = site;
}
SitesUtil.prototype.getTemplateByName = function(templateName) {
(略)
};
global.SitesUtil = SitesUtil;
})(this);
>>368 は無駄にクロージャを生産しすぎなんだよ
なるほど 一理ある
>>374 (function(global){
var SitesUtil = (function() { ← これは
var SitesUtil = (function(super) {
...
})(BaseClass);
とベースクラスを渡す為のもんなんだよ
> その例では確かに無駄だがイディオムとして確立してるので常にそうすべき
先人の知恵が詰まったイディオムと言ってんだからまずは理解しようとしろ
いやいや 先人の知恵が詰まったイデオムの大切さは理解出来るけど おまじないとか呪文みたいな丸暗記は良くないよ 突っ込む人が居た方が理解が深まるよ 横からだけどありがとう
<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に変わるようにしたいのですが、全然変わりません、 どう修正したらよろしいでしょうか?
>>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 はグローバル変数を複数定義する場合に有効だが、グローバル変数を多数定義することは推奨されない
束縛ってなぁに?
>>382 TypeScriptは
>>368 と全く同じコードを出力するし、当然何の不満も出てない
> global なのにクラスとはこれいかに
クラスじゃなくてモジュールだが、そんな変数名の些細な事はどうでもいい
> 実際には上記コードで事足りるケースが多いんだよな
特定のケース毎にコードを変えて書くならそれでいいだろうよ
ただし出来る限り常に同じ書き方をすべきだ
>>382 のコードは継承を実装する時に変更する必要がある
>>384 > クラスじゃなくてモジュールだが、そんな変数名の些細な事はどうでもいい
おまえが
>>377 で「ベースクラス」といったんだが、おまえは自分の言葉に責任を持つ事すら出来ないのか
>>368 の global は「グローバルオブジェクト」であってベースクラスだかモジュールだか知らんものではない
Strict Mode では this の参照先が変化するが、グローバルコードだけは this でグローバルオブジェクトを参照できる
その仕様を利用して関数スコープ内でグローバルオブジェクトを参照する方法が考案されたが、
>>374 はその一つだ
「なぜ this でグローバルオブジェクトを参照するのか」「なぜ引数で渡しているのか」を良く考えるべきだ
>>368 の質問に対する答えとしては「ESとしては無駄。altJSを使用しているなら諦めるかフィードバックする。」になるだろう
>>385 > おまえが
>>377 で「ベースクラス」といったんだが、おまえは自分の言葉に責任を持つ事すら出来ないのか
(function(global){
var SitesUtil = (function() {
var SitesUtil = (function(super) { ← ベースクラスはこっちの事だよ
...
})(BaseClass);
>>386 そうか
どっちにしてもクラスもモジュールも関係ない事には変わりないが
>>388 this 使い過ぎって良く言われない?
this note
なぜIE6〜8は配列の最後尾にカンマがあるとエラーになるのか?
その仕様はべつに嫌いじゃない
>>388 thisの数は至って普通
JavaScriptはメンバー変数にthisを付ける必要があるから必然的に多くなるだけだ
thisが多くなるからといってクラスを使わないようにするのはナンセンスだ
>>388 相変わらず、無意味なglobalがあるな
altJSが流行ってるのかね
>>395 だからモジュール化だっての
JavaScriptにモジュールが無いから代わりにこういう書き方をして
これはモジュールですよって宣言してんだよ
>>391 オブジェクト初期化子なら分かるが、配列も末尾カンマでエラーは聞いたことがないな
もし、エラーになるならIE6-8のバグ
俺もSnap初めて知ったしAdobeがオプソを公開してんのも初めて知った 最近のSVGはハードウェアアクセラレーションが効いてるから滅茶苦茶滑らかだしかなりいい感じ
>>398 javascript モジュール化 でぐぐれ
>>396 仮引数にglobalって書いてるけど、どこでも使わないのになんでglobalって書いてるのかという疑問かも。
>>401 どんな潔癖症だよ…
モジュール化する場合のイディオムだから取り合えず書いておいたけど使わなかったて事だ
altJSが流行る前からみんな(苦肉の策として)こうやってたけどね
>>402 どこにもexportしないのに仮引数を書き、global namespaceと何の関係もないのにglobalって名前にするのが
「イディオムだから」ってのが気に入らないんじゃないかと思うよ。
まぁ俺も「イディオムだから」とか言われると、はぁ?ってなるかな。
昨日ごちゃごちゃやってたのは読み飛ばしたんだが、あらためて読むと
>>385 の内容を
理解できてないから話がかみ合わないんだな。
愚弄原 南九州では原を「ばる」と読む事が多いんthis
>>403 モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
その.jsを他の所で使う場合には別のオブジェクト(ネームスペース)を渡す事が出来る
変数名は別に何でもいいんだが、そんな些細なことに何でこだわるんだか…
>>403 > まぁ俺も「イディオムだから」とか言われると、はぁ?ってなるかな。
なぜ書いたか? ⇒ イディオムだから
なぜ残ってる? ⇒ 消し忘れたから
でFA
もうこれ以上はいい
>>406 俺の書きたいことが
>>373 に書かれてたので繰り返さないが、
>>373 は理解できてるか?
> 変数名は別に何でもいいんだが、そんな些細なことに何でこだわるんだか…
なんでもいいならglobalなんてまぎらわしい単語使うなってこった。
>>408 >>373 の
>
>>368 の中のコードで同じようなことをやってるから無駄
は
>>377 のベースクラスを渡す為のもんなんで無意味ではない
(実際のコードはベースクラスを渡してないから無駄と言えば無駄にはなってるが)
> なんでもいいならglobalなんてまぎらわしい単語使うなってこった。
つうかある程度経験があるやつならそんな事に突っ込まないよ…
だって普通に使われてるイディオムなんだから
>>409 いや、ある程度経験があるなら
> モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
こんなこと言わないと思うんだが。
globalじゃなくてnsとかだったら俺も何も言わない。
変数名には気を使うべきだわな 本当に名前がどうでもいいテストコードやサンプルコードであるなら メタ構文変数の出番
と言うか、イディオムって言葉の使い方が問題でもあると思う 例えば for(i=0; i<ary.length; i++) { // ary[i]に対して処理 } と言う定型の「処理の組み合わせは」イディオムだけれども この内 i など変数の「名前」については、イディオムではなく 単に「慣習」とでも呼ぶべき代物だろうし
>>410 > モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
別におかしなこと言ってないよ
> globalじゃなくてnsとかだったら俺も何も言わない。
後出しで言うなよ
>>412 じゃぁ
(function(global) {
})(this); // (Module || {}) などのバリエーションあり)
↑
これはモジュール化のイディオムだけどglobalは慣習なので使わない場合は必ず消してください
でいいよ
>>413 > > モジュールにはグローバルオブジェクトを渡すのがイディオムだからだよ
> 別におかしなこと言ってないよ
じゃ、俺と君では「グローバルオブジェクト」の定義が違うんだな。
全く使われてない無意味なコードも「イディオムだから」で済ますのは論理的ではないと思うね
>>391 > なぜIE6〜8は配列の最後尾にカンマがあるとエラーになるのか?
それがECMAScript3の正しい仕様だから。
なお、次のECMAScript5(ECMAScript4は廃止)が
リリースされたのは2009年12月
IE6は2001年、IE7は2006年、IE8は2009年3月
IE9は2011年
めんどくせーやつだな。じぶんでしらべろよ
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の配列ケツカンマについては、仕様書を見ても扱いがよくわかりませんでした。)
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 どういうこと?
>>418 >「11.1.5 Object Initialiser」という章に記載があります。
やはり、配列初期化子ではなくオブジェクト初期化子だったね
オブジェクト初期化子と勘違いしていた、で正しかった
> そもそも、配列で末尾カンマしたら length が変わるので、カンマを入れる前とデータが変わっちゃうはずなんだけど
これは訂正
ES3 では最後のカンマは無視する仕様だね(Elision の説明に書いてある)
よって
>>416 は間違い
>>416 では配列初期化子の話だったはずなのに
>>418 ではオブジェクト初期化子で反論するという頓珍漢な話の持って生き方をする人だね
そもそもIE6でも[1,2,3,]などは通るぞ {'0':1, '1': 2, '2' :3,}はダメだけど IE6だと[1,2,3,].length は4だな
初めて英語を習うとき、まずは英会話から入るでしょう。先生が教室に入ってくるなり、"How are you?"と声をかけます。 そして、たとえ徹夜明けの二日酔いであろうが、"I'm fine, thank you."と応えるのだと習うでしょう。 このとき、"How"は疑問副詞で"are"が二人称単数現在の動詞、"you"は二人称の代名詞などという説明はされません。 そんな細かい話をしていたら、いつまで経ってもハンバーガーのひとつも買えないからです。 英会話は、言葉のやり取りをパターンとして学習します。あいさつや買い物、レストランでの注文、空港における出入国など、 多くのシーンで交わされるフレーズを覚えれば、日常会話がこなせるようになります。 書店に並ぶ英会話集というのは、ActionScriptの書籍でいえば、サンプル集にあたるでしょう。 しかし、本書はサンプル集にはしませんでした。 なぜなら、自分の言いたいことが、いつもそのパターンの中にあるとはかぎらないからです。 すると、意味の通じる文を自分で組立てるために、文法を学ぶ必要が生じます。 本書の目的のひとつは、ActionScript 3.0を正しく書くための文法について解説することです。 もっとも、文法書というのは、網羅的で体系的で、反面味気ない部分もあります。 それだけでなく、自分の伝えたいことを表現するというのは、ただ文法的に正しい文を並べる作業ではありません。 起承転結やレトリックなどを考え、文と文とを紡いで、文章全体の流れを構成しなければならないのです。 (続く)
本書は、このいわば文章構成法を、ActionScript 3.0について解説しようとするものです。
とはいえ、文章表現は、その作者の数だけあります。論理の組立てからなるスクリプトであっても、
同じ内容の処理がいくとおりにも書けます。
ですから、本書が紹介するのは、あくまで筆者のスタイルによる、特定の仕様を想定したスクリプトです。
けれど、ステートメント(命令文)の1行1行について、なぜそう書くのか、別の記述は考えられないのか、
その構成を採ると何がいいのか、といった点をできるかぎり詳しく説明しました。
ときには、陥りやすい間違いをあえて犯し、その究明方法を解説している部分もあります。
本書が重要視するのは、できあがったスクリプトより、むしろその書き方とそこに至るまでの考え方です。
本書では「数学編」を設け、高校レベル程度の数学的な解説も加えました。
数学が苦手な人は、よく「公式が覚えきれない」といいます。
しかし、数学の公式集に掲げられている式のうち、
おそらく3割の求め方を覚えれば、残り7割はそこから導き出すことができます。
http://www.fumiononaka.com/Books/ActionScript3ProfessionalGuide.html ↑このひと文系出身やな
あーはいはいイデオムね 最後に全員死ぬんだろ?
>>425 このボケやる人いると思った
やさしさで一応ツッコミ入れときますね
それってどこの伝説巨神?
>>421 > ES3 では最後のカンマは無視する仕様だね(Elision の説明に書いてある)
なんでこんな仕様になってるんだろうね。
「値無し」を使う初期化が許されてるんだから、
[1,2,3].length => 3
[1,2,3,].length => 4
[1,2,3,,].length => 5
というふうになってた方が一貫性がある気がするんだが。
[1,2,3,undefined]って明示しろってことかな?
>>428 var a = [
1,
2,
3,
4,
5,
];
↑こういうコードを(自動生成も含めて)書く時に最後無視してくれないと不便だから
>>429 それには同意するけど、
var a = [
1,
,
3,
,
,
];
を見たときに、はて要素数はいくつだろうかというのが直感と異なるというのがなんとも・・・。
あ、データ部分は5行で要素数も5個だから、たいていの人の直感とは合致するのか。
こっちの例がいいか。 CSVデータをパースするとき "1,2,3,".split(",").length =>4 となるのと配列の初期化のときで振る舞いが異なるというのが気持ち悪い。
>>432 なんか無理やり言ってないか…
どっちも直感的だから何の問題もない
434 :
デフォルトの名無しさん :2014/12/10(水) 12:13:01.54 ID:2OX9Sm8y
"1,2,3,".split(",").join(",").split(",").join(",").split(",").join(",")... したときに徐々に要素数増えるとしたら気持ち悪い(もちろんならないのでありがたい)
>>434 about:supportで
GPU 描画支援のウィンドウ 1/1 Direct3D 11 (OMTC)
ってなってる?
>>433 まあ自分自身は、言語によって解釈が違うかもしれないような記述はしないんだけどね。
>>429 のケースなら、めんどくさいけど最終行のカンマは削る。
lint系ツールで文句言われるかもしれないし・・・。
> なんか無理やり言ってないか…
いや、俺の「直感」がどこから来てるかを説明したかっただけ。
>>436 おもいっきりパクってみたが
こっちのプログラムだとどう?
http://codepad.org/4KMQRoQr うちの Firefox タソはカックンカックン
GPU 描画支援のウィンドウ 12/12 Direct3D 11 (OMTC)
IE11 とか Chrome とかは問題ない (win8.1 core i7)
ああ 判ったかもω 12/12 が原因っぽい 面倒っちが全部ウィンドウ閉じて 1ウィンドウにしたら(あまり)カックンしなくなった だけど IE11 や Chrome に比べるとフレーム跳びが出来る傾向にはある
>>439 なるほど
タブはいっぱい開いてるがウィンドウは常に1つだけだな
それでもFlash使ってるタブをたくさん開くと動画再生とか色々遅くなる
多分ウィンドウの数というかFlashが含まれてるページをたくさん開いてると遅くなるんだろうね
>>432 直感と一致しないパターンには [,,,,].length があるね
new Array(5) を使えば解決するけど、直感的な動作ではないのが気持ち悪い
firefoxが遅いのはシングルスレッドシングルプロセスだからだろ
質問です。ファイルAに20個の要素があってそこにJSでidを割り振ってます このファイルAへ別ファイルBのリンクから飛んでくるときアンカーした要素 が画面TOPに来るようにしたいのですが、読み込みとのラグがあるようで、 うまくアンカーに引っかかりません。どうすればアンカーにヒットしますか?
>>442 シングルプロセスだがシングルスレッドではないぞ
完全にシングルスレッドだったら裏でページを描画中に何も出来なくなる
>>443 idを割り振った後に location.hash で対応可能だけど、タイムラグ中にユーザがスクロールしていたらスクロールを乗っ取る事になるので良くない
フラグメント識別子となりうる要素のidを動的に付与すべきではないよ
そういうのはサーバサイドで実装すべき
Firefoxのマルチスレッドは疑似
擬似ってなんだよw マルチスレッド化されてない部分もあるから重い処理の時にUIの操作が効かなくなる時もあるってだけ ちなみにマルチプロセス化は既に実装されてて無効になってるだけ 36ぐらいから有効になるはず
幾ら弁護しても糞なことには変わりない
リソースを確保するクラスを作った時 ガベコレまで待たずにクラスをdeleteして クラスのデストラクタでリソースを解放したいのですが デストラクタ本体を書くためのイディオムはどんなのがありますか?
backbone.jsの参考書を読んでいるとサーバサイドをnode.jsでやっているものばかりです node.jsは少し尖った技術という印象だったのですが もはやごく普通の技術になってるのでしょうか? node.jsやった方がいいですか?
いまからやるなら is.js らしい
io.jsな
>>450 サーバは、リクエスト受けてレスポンスをJSONで返すAPIを実装するのが基本だから、
言語は何でもいいんじゃないの?
何もやったことないならnode.jsでもいいし。
サーバー側とクライアント、両方同じ言語なら説明の手間が省けるって
事なんだろうけどレンタルサーバーとか限られちゃうなあ
JSONライブラリは大抵の言語で用意されてるから
>>453 の言うとおり
移行はしやすいと思う
ChromeでshowModalDialog()が使用出来なくなってしまったので困ってます。 上記の代わりにモーダルウィンドウを表示する方法はありませんか? 出来たらJQueryを使わない方で
Chromeの設定画面でもモーダルウィンドウの類は使っていないから おそらく無いと思う
yieldの対応状況って現在どんなもんなの?最新のAndroidとかiPhoneとかで動く??
460 :
デフォルトの名無しさん :2014/12/11(木) 15:59:49.96 ID:qKHRQsDr
>>460 OSXとWindowsでまたそのあたりの実装も全然違うけれどな。
あれを見てて、Googleって馬鹿だなって思うわ。
Googleも一枚岩ではないからな
つまみ食いが多いイメージ
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が使えないみたいで困っております…。 どのようにすればいいでしょうか?よろしくお願いします。
f()がgeneratorじゃねえんだよなあ…
466 :
464 :2014/12/13(土) 06:04:50.63 ID:vju075Cj
すみません自己解決しました
>>466 事故解決の場合には、事故解決した内容を書きましょう。
>>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] → ...
スルーしていいよ
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の以外でおながいします
473 :
デフォルトの名無しさん :2014/12/20(土) 14:00:44.30 ID:z3B/t80F
>>472 ありがとうございます!
そこで質問してみます。
474 :
472 :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枚、それを数ページにしたいのです。
説明ベタで申し訳ありません><
友人と手話のサイトを作ろうと思い、マウスオーバーで手話の流れが見れるようにしたいと思っています。
gif でいいような気が
477 :
472 :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と思えるものはすべて区別を付けてみたのですが、結果は同じでした><
480 :
472 :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版
「見え方を動的に変えるなら、jQueryが必須」って、マジで言ってるの…?
>>470 id="show" もあるが、setInterval が返す tid を独立させないと複数の要素に対応できない
どう見てもライブラリにすれば解決する問題ではないのでここで継続質問していい
が、現象が発生するコード(複数並べた場合のコード)を
http://jsfiddle.net/ にUPした方が回答しやすい(やったやらない議論が無駄)
483 :
デフォルトの名無しさん :2014/12/20(土) 15:18:07.92 ID:z3B/t80F
>>480 ありがとうございます。
この手法でなくてはいけないということはないのですが、性格上モヤモヤがとまらなくて
このままやってみようと思っていました。
おすすめの本、早速取り寄せて読んでみようと思います。
重ねてありがとうございました。
484 :
472 :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
486 :
472 :2014/12/20(土) 15:30:09.12 ID:dWuhsWfV
>>482 それなら、tidを配列にすれば?
tid[0]は画像Aに使う
tid[1]は画像Bに使う
487 :
472 :2014/12/20(土) 15:34:48.56 ID:dWuhsWfV
jsfiddle が難しいなら、jsdo.it でもいい ここは日本の企業が運営している
488 :
デフォルトの名無しさん :2014/12/20(土) 15:37:01.03 ID:z3B/t80F
>>487 なるほど…コードをシェアできるんですね。
挑戦してみてきます、ありがとうございます。
>>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なのです。
どうやら私は無謀な挑戦をしていたようですね…
491 :
472 :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を指定できる
>>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 わかりました><
質問の仕方すらわからない状況でご迷惑おかけしました。
最低限質問が出来るように勉強してきます。
ありがとうございます。
495 :
472 :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 わかりました、ご丁寧にありがとうございます。
読み漁ってみます。
497 :
472 :2014/12/20(土) 16:20:55.20 ID:dWuhsWfV
HTML,CSSだけで、単に最初から、 画像を並べておくだけにした方がよいかも 君は何かの言語で、プログラミングしたことあるの? もし無ければ、わざわざJavaScriptにはまるのはお勧めしない JSはかなりの変態言語だから、 凝ったことをしようとすると、プロでも頭を抱えるほどw
>>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 了解いたしました。
ありがとうございました><
500 :
472 :2014/12/20(土) 16:39:12.28 ID:dWuhsWfV
もしHTML,CSSも知らないなら、この本から始める これで何とか、HPの基礎を学べる 3日でマスター HTML5 & CSS3、鳥羽薫、2013
この程度なら適当に入門サイト読み漁れば何とかなる気もする やりたい事が頭の中で筋道立ってるなら後はコード当てはめるだけだよ
502 :
デフォルトの名無しさん :2014/12/20(土) 19:08:17.42 ID:z3B/t80F
最近VBで書いた物をjavascriptに書き直す作業をしているのですが、 ブラウザで表示したページの中の全ての画像の中から 画像URLに指定した文字列が含まれているものを判定しその画像URLに移動する というスクリプトを書きたいのですがどのように書けばいいのでしょうか。 アドバイスくださいお願いします。
えーと何が分かんないのかな? ページ中の画像をすべて取得する方法?URLを取得する方法?文字列を判定する方法?画像URLに移動する方法?
img srcから指定した文字列を判定する方法とそれに伴って真とでたimg srcに移動する方法です。
>>505 String.prototype.indexOf
location.replace
>>506 String.prototype.indexOfでこちらが予め指定した文字列を対象から探し出して
真だった場合location.replaceで移動という事なんですかね…
調べてみてもよくわからずorz
複数画像があるページで新たに画像が追加される→
新たに追加される画像URLに含まれているワード(ex.20141225)は事前にわかる→
20141225と一致する文字列をもった画像URLをページ上から判定→
真と出た場合そのURLに移動
VBだと InStr(A,'B') A…検索の対象となる文字列 B…Aの中から検索する文字列 先ほど教えて頂いた indexOf(A,'B') A…検索する値を表す文字列つまりVBでいうところのB? B…検索を始めるための位置 とあり、検索の対象をどう指定していいものなのかわかりません
JavaScriptだとこうなる var str = "検索の対象となる文字列"; if( str.indexOf("対象") >= 0 ){ /* 処理 */ }
>>509 おお、ありがとうございます!
ここがどうしても分からなかったので助かりました。
>>510 リファレンス読み漁ってみます、他言語では出来上がっているから書き換えは簡単だろうと素人考えをしていました。
しっかり基礎から学んでみますURL感謝です!
知恵袋は確かに自分が書きました、スレ違いでの同一ポストはマルチと認識していたのですが別サイトへの書き込みもマルチになってしますのでしょうか、
もしそうであれば自分の無知を恥じるばかりで気を悪くされましたらごめんなさい。
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
適当にググって入門サイト流し読みしてきたほうがいいと思う 要所だけ直すと、仮に一つ目のimg要素のsrc属性の値(URL)へ移動する場合は var img = document.getElementsByTagName('img'); var src = img[0].src; location.href = src;
VBも他人の書いたコードなんだろうなあ
流れぶった切ってすまんなんだけど プログラミング初心者におすすめの書籍、サイトを教えてください ドットインストールは一通り見てきました
>>516 そもそも、プログラミング初心者というのなら、書籍は利用するな
が正解だね。敢えて言えばリファレンス本とか逆引き本程度。ソレ以外
は買う価値全くと言っていいほど無い。
で、サイトだが、これも同じ。むしろサイトのほうが見る価値ない。汚い
文章と説明不足な説明、薄汚いコードに、肝心のポイントが書いてない。
酷いのになるとサンプルもなければ、デモもない。
なので、一つ自分で事例を作って、リファレンスを中心に、メソッド一つひとつ
を覚えるのがオススメ。
>>513 はい、入門サイトとリファレンス読んできます
アドバイスありがとうございます
>>514 VBで書いたものは紛れもなく自分で書いたものです
既に他言語ではあるが作れたから書き直しもいけるだろ〜って甘え考えでVBのコードをJavaScriptにぐぐりながら置き換えていたら
見事に躓きました、ほかの方も言っていたようにJavaScriptを勉強するというスタンスで考え直します
>>515 マルチポストについて理解を改めました、本当にありがとうございます
今回の書き込みで本件のこちらへの投稿は最後に致します
「何も基礎勉強をせずにとりあえず、書いてみました」
まさにそのとおりです、返す言葉が見当たりません、基礎から学び直してみます
皆様ありがとうございました
>>516 参考書は
>>498 特に『DOMScripting 標準ガイドブック』は初心者向き
参考サイトはMDN, MSDN
「仕様書を読め」といいたいところだが、初心者に仕様書は敷居が高いと思われるので、ステップアップしたときに仕様書に手を着けるぐらいでちょうどいいと思う
アドバイスありがとです そもそも一番最初に学ぶ言語でjavascriptはおすすめなんでしょうか? やりたい事はブラウザでやる操作の自動化などです
>>520 やりたいのがクローラ、スクレイパーなら妥当じゃないかも
>>520 クライアントサイドJavaScriptではブラウザの操作を乗っ取ることは出来ない
Selenium 辺りを検討したら?
フォームの自動入力とか、1ページで完結するならJavaScriptのブックマークレットで十分。 複数のページをまたぐ操作についてはAjaxだけでできることもあるし、できなくてもブラウザの拡張機能を自分で作ればJavaScriptだけでほぼ可能。 まあ、手段をいろいろ知ればできることの幅も広がるから、いろいろやってみたらー。
Jscriptに不可能はない ※IEで表示, 操作の可能なサイトに限る
ブラウザのエクステンションもjavascriptだったと思うから個人使用なら わりと何でも自由に出来るかも
GASくみあわせると便利
ブックマークレットはブラウザ操作を乗っ取っているわけではない JScriptはJavaScriptではない 確かに独自拡張を含めていいならブラウザ操作が出来るかもしれないが
「ブラウザでやる操作」の定義がよく分からないからなんとも言えないけどなw もっと具体的にやりたいことを言ってくれれば選択肢は狭まるよ
何言ってだこいつ
超汚染人
531 :
デフォルトの名無しさん :2014/12/29(月) 00:42:00.52 ID:sj3ADqcm
>>516 >>518 3日でマスター HTML5 & CSS3、鳥羽薫、2013
はじめてのJavaScript、秀和システム
掌田津耶乃(しょうだ つやの)、2013
10日でおぼえる jQuery 入門教室 第2版
>>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 配列に格納されている
}
533 :
532 :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'));
jQueryなんて使わなくても、querySelectorで一行で書けるのに…
querySelectorは取ってきた後ループでぐるぐる回さないといけないからな。 それにセレクタを拡張する機能もないし、jQueryの便利な擬似クラスも使えないし まだまだ、jQueryの劣化版って所かな。
ループが嫌ならforEachでできる そもそも属性セレクタを使えばそれすら要らない ライブラリであるjQueryの方が機能が広いのは当たり前 最近のライブラリが便利なのは事実だが、そのせいで既存のAPIを知らずに過ごすのはかなりもったいないぞ
いえ、forEachも使いたくないんですよ。
538 :
536 :2014/12/29(月) 15:52:46.23 ID:IcHAHC1y
俺が意見する意味はなかったようだな レス汚しすまなかった
539 :
デフォルトの名無しさん :2014/12/29(月) 15:55:12.42 ID:/fu+2Q3X
forEach より Array.prototype.map の方が使いやすい
そもそも、初めの一つの要素であることは
>>512 で書かれてるし、>513で標準コードが書かれているからなあ
jQueryを使って回答する意義が見当たらない
最初の方だけ読んでレスしちゃったんでないの
>>540 > jQueryを使って回答する意義が見当たらない
あるとすれば、コードがシンプルになって
可読性とメンテナンス性が高くなるぐらいかな?
まあ。それはプログラミングで一番重要なことなんだけれども
たとえば、
>>513 だとこうなる。
location.href = $('img').attr('src');
これ以上減らせないんじゃないか?っていうぐらい減った。
>>542 そもそも、jQueryで質問してるならともかく、そうでないのなら
標準的なコードで回答するのが、常識。勝手に外部ライブラリ
使って答えるのは、タダの自己満。
コードが減ることが美徳と思ってるなら、それは大きなお間違いだ。
544 :
デフォルトの名無しさん :2014/12/30(火) 09:17:57.02 ID:JWtJz6A1
javascript が糞と呼ばれる所以
>>543 jQuery布教してるんで構わないでください(笑)
コードが減ることが美徳なんて言ってないですよ?
jQueryを使うとコードが減ることは事実だと言ってるだけです。
ライブラリっていうのはそういうものです。
使わなくても書けるけど、使ったらもっと楽になる。
事実でしょ?
>>545 お前がやってることは嵐行為と変わらない。
そして、質問者の学習を妨げてるってことを知れ。
事実かどうかなど お前の自己満 なんだよ。消えろ。
>>546 質問者にとって役に立つかどうかで考えてください。
あなたのその罵倒するだけのレスがなにか役に立ちますか?
私のレスを見たら、jQueryを使えば短くかけることがわかるでしょう。
jQueryを使っていないのは、おそらくjQueryを知らないということ。
そういう人に知識を与えているのです。
私のレスは役に立っています。
あと、消えろと言われましたが、宣言しておきます。消えません。
どうしますか? 私を消す方法でも探しますか?
ここは本スレを追い出されたっつうか自分から隔離されにやってきたライブラリ信者の隔離所だから諦めろ
>>542 >513を読めば、
location.href = document.getElementsByTagName('img')[0].src;
で解決できることが分かる。勿論、querySelector でも良い。
よって、jQueryを使う必要はない。
布教活動を質問スレでやるべきではない。以上。
document.getElementsByTagName('img')[0].src; VS $('img').attr('src'); 2倍以上もあるこの差が小さくなる気配はない。
さすが信者は論点が理解できてないなw
>>549 あんた真面目に答えたいならhp板行きなよ
ここは隔離所なんだって
たまに馬鹿がマジな質問をしに来るけど
布教って… 言ってることがどっかの啓蒙荒らしと変わらんがな
覚えることを増やしたがらないのはアスペ
(略)、このようにECMAScript3でもできるのだから ECMAScript5を使う必要はない。 反論 ECMAScript5を使わなくてできたとしても、 ECMAScript5を使えばもっと簡単になるので 使ったほうが良い。 jQueryを、以下同文
ライブラリを使わないと処理が軽いのは当然だし、ライブラリを利用すると記述量が少ないのも当然。 どっちにも利点欠点はある。 どちらを取るかは製作者の方針次第。 一体何を言い争ってるの??
知らないよ。jQueryを使えば短くかけると実例見せてるだけなのに ライブラリを使った方法を書くなってしつこいんだよ。
お前だよお前
3日前に解決した問題にjしゃしゃり出るのはQuery布教の為。 質問者自身の事は何も考えてないんだろう。
> 質問者自身の事は何も考えてないんだろう。 そりゃ、俺がレスしているのは、 質問者じゃないしね。
imgのsrc取るためにjqueryなんて入れるのは馬鹿らしい
他にも色々使うでしょw
初心者が初めから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++を使って欲しい
そこはC++じゃなくてDにしてほしかった
>>566 純粋なJavaScriptでもコピペするんだから関係ない。
違う問題を混ぜ込まないように
2015年もjQueryは安泰です
572 :
【大吉】 【90円】 :2015/01/01(木) 01:07:39.33 ID:2VBywPBG
初心者が初めからC#を使うのはオススメできないなあ コピペプログラマになりかねない まずは純粋なCに慣れてから、それからDを使って欲しい
JavaScriptも理解してない人にライブラリ本から始めるとか有り得ない PHP始めずにWordPressの改造方法を学ぶようなもの
初心者が初めからBASICを使うのはオススメできないなあ コピペプログラマになりかねない まずは純粋なハンドアセンブルに慣れてから、それからCP/M-80を使って欲しい
ま、ム板なら当然そういう意見も出るだろうね Web制作板じゃそういうのどうでもいいしコピペ一発で動くことが最も重要だから
> コピペ一発で動くことが最も重要だから だからお前はいつまでたってもjQuery使えないんだよw
?
図星かw
最近jQueryが更新されたそうですが、何が変わったかどこのページ見れば分かりますか?
582 :
580 :2015/01/01(木) 12:47:30.80 ID:Ru6Ispr4
なるほど、ありがとうございます! バージョンのつけ方にもルールがあったんですね。 英語は苦手ですが頑張って読んでみます
やたら攻撃的な辺り、図星なのはそっちっぽいけどね
おれがムラタだ
>>583 役に立たないレスしかな無いのに、なんでここにいるの?
jQueryを布教しに来たに決まってるじゃん
質問するのに邪魔なのでjQuery布教は余所でやって下さい
588 :
デフォルトの名無しさん :2015/01/02(金) 20:53:09.97 ID:jpvNiWQX
javascript歴2週間のド素人ですが、 同一ドメイン内のhtmlの高さを取得するようなことは 可能でしょうか?
589 :
588 :2015/01/02(金) 20:56:09.99 ID:jpvNiWQX
質問が舌っ足らずですみません。 同一ドメイン内にあるhtmlファイルのbodyの高さを 取得することは、そもそも可能なのかなということを 知りたかったです。
iframeで
>>589 iframe なら iframe.contentWindow.document.body を参照すれば body の高さを取得出来る
592 :
588 :2015/01/02(金) 22:47:01.35 ID:jpvNiWQX
貴重なアドバイスありがとうございます。 iframeを使えば良いという事ですが、 裏を返せば、iframeを使わなければ 無理ということでしょうか?
ただしiframeの中のドキュメントがロードされてない状態だと 正しい値を取得できないからiframe内のドキュメントの onloadを監視する必要があるが、onload監視前にページ がロードされてしまう時もあるからじゃあページがロード されているかreadyStateで調べればいいと思うがブラウザに よってabout:blankがロード完了された状態になるから注意な
>>592 body要素の高さはJSの他にHTMLやCSSによっていくらでも変わるから
既に指摘されてるようにiframeで一旦DOMにしないと正確な値はわからないよ
そのHTMLとそれが読み込むファイルを解析して予測することもできるけど
必要な手間や時間を考えると個人では現実的な方法ではない
>>592 iframe 出なくても良いが、DOMに読み込まれなければ高さも計算されない
DOMに存在しないものに高さなんてあるわけないだろう?
596 :
デフォルトの名無しさん :2015/01/03(土) 13:52:41.51 ID:duDbuP4G
セイロン
597 :
588 :2015/01/04(日) 00:11:39.15 ID:Hxx9xAHN
なるほど、理屈が解りました。 javascriptは奥が深そうですね。 勉強になります。ありがとうございました。
質問失礼。 出力ファイルの名称と拡張子を指定するにはどうすればいいでしょうか? 環境は、IE最新verです。 よろしくお願いします。
>>599 本当に失礼ですね
それだけじゃ、IEからエクスポートしたいのか、読み込ませるファイルの出力
なのかもわからない上に、IEから操作するのか、別のアプリケーションからIE
に対して操作するのかもわからいですね。
人に質問するときには、5W1Hは守りましょう。
レスポンスヘッダーのContent-Dispositionの事かなあ? クライアント側でどうこうする話じゃないと思うけど
602 :
599 :2015/01/06(火) 15:23:36.34 ID:A7O8bZKT
すみませんでした。 取り下げます
ただ質問を具体化できるほど知識がないだけじゃないの ブラウザならDLさせるんだろうからa要素のdownload属性でググれ
>>603 横からすみません
iPhoneのSafariではdownload属性が使えないのですが、その代替案として何を使えば良いでしょうか。
対応していないブラウザのことまで考えてレスできないとだめだな。 出来ますと言ったのに、あとから出来ませんでしたっていうことになる。 どこまでサポートできるかを調べるのは当たり前で、 それができなければ仕事としては未熟者。
うむ、残念ながらIEの最新版でも未対応
まずXHRで取得してからBlobでも使うしかないかな
こんなの
>>601 も言うようにクライアント側でやっても面倒なだけだよ
取り下げている質問にネチネチ答え続けるのは仕事としては熟練者なのか
仕事なら利益にならないことは捨てる勇気も必要
関連する別の質問の方でしょ
>>610 >>605 は
>>603 を非難しているわけで取り下げられた質問にネチネチと非難しているわけだが、回答は誰もしてないな
曖昧な質問には曖昧な回答しかつかないもの
対象ブラウザか明示されてないのに時間をかけてクロスブラウザ検証する義理もないと思うがな
ボランティアの質問スレに求めすぎだろ
他人に丸投げできる程度の質の高い回答を求めるなら対価を払うべき
検証する必要はない。 Download属性は比較的最近出来たばかりで 知らない人も多いっていう常識さえ知っていればいい。 それを知らないならばニワカなわけで。
そもそもこのスレは仕事でもなんでもないんだから
>>605 は意味のないただの愚痴レスとして流しときゃいいんだよ
615 :
デフォルトの名無しさん :2015/01/09(金) 05:41:21.84 ID:GHJOtrq4
ニワカじゃなくて情弱
自分だけは情弱じゃないという前提
617 :
デフォルトの名無しさん :2015/01/09(金) 08:06:57.04 ID:50+lIvWd
お金にならないことはやらない 人生それほど暇じゃない
大丈夫、ここに書き込んでる時点で十分暇だから
>>617 なんで、便所に落書きしてんの?
暇じゃんww
意外と喰い付きの良い餌だったか
釣りは海か川か湖で
え、このスレで回答するとお金がもらえるのか?!
2chの運営様なんじゃね
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);}); とか出来ないかということです
setAttribute()はDOMの関数。ネイティブオブジェクトの関数ではない . の代わりに [ ] を使えばおk [hoge, hage, ...].forEach(function(e){window[e.name] = e;});
[hoge, hage, ...].forEach(function(e){Object.defineProperty(window, e.name, {get: function(){return e;}});});
で逝けたんですが
>>625 さんの方がシンプルなのでそっちにします
本当にありがとうございました
CoffeeScript 面白いね
DOM というより Element だね window は DOM オブジェクトだが、Element ではないので setAttribute は未定義
629 :
デフォルトの名無しさん :2015/01/21(水) 12:16:55.25 ID:p0u5bixB
iPhoneやAndroidで、Javascriptのwindow.navigator.vibrate()は、使えますか? WEBページから端末を振動させたいのです。
>>629 各ブラウザとOSとハードウェアでサポートしてるかどうかによる。
コードを書くことはできるが、サポートされてない環境ではただ無視される。
× コードを書くことはできるが、サポートされてない環境ではただ無視される。 ○ サポートされてない環境では無視するようにコードを書かないとエラーになる
iPhoneはサポートしてないって書いてあるね。 Androidは新しいやつなら対応しているかもしれない
娘さんに買って貰った泥タブでWebサイトを閲覧したら 突然震え出すタブに驚きお亡くなりになるお爺ちゃんまで想像した
コード全量載せます。
期待結果: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>
PointがAAAとBBBを持ってないからだろw
inheritsの中でprototype上書きしてね? inheritsの後でPointのprototype設定しろ
638 :
デフォルトの名無しさん :2015/01/21(水) 23:40:49.51 ID:OM+rl6vx
ブラウザでF12押せばオペラとSafari以外はデバッガ表示するだろ 聞く前に見ようぜ
>>639 見た結果なんや・・・
上書きってのがすっぽり抜けてた
javascriptのエラーメッセージは たまに判り難いのがときどき沢山ある
TypeError等のES規定の例外ぐらいは頭に入れておいた方がいいと思う ES規定じゃなくても仕様書を読めば該当エラーの詳細が分かるけどね
該当箇所さえわかればどうとでもなるしエラーが出るだけマシだな 問題は想定外の動作をしてるのにエラーが出なかった時だ たいてい解決してみれば単純ミスなことが多いがとにかく時間がかかる デバッガ?使ったことねーよ
使えよ
デバッガ使って一つ一つステップ進めてPointをウォッチ見てれば inheritsの中で上書きされてるって事が分かるのにな
>>643 それコンパイル通ったのに動かねーとか言ってるくらい恥ずかしい
じゃあ死ね
>>641 > javascriptのエラーメッセージは
> たまに判り難いのがときどき沢山ある
Chromeデバッガを使うべし
デバッガの使い方がわからね
651 :
デフォルトの名無しさん :2015/01/25(日) 11:31:53.18 ID:JhgO84F7
Chromeの例外はstack取れてうれしい
>>650 解説してるサイトたくさんあるし適当にいじってればすぐおぼえられる
英語がよめないとか言うんだったらFireFoxの方つかえ
ブラウザの中ではFiredox良いよね
FireDogs
以下の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>
script要素のinnerHTMLから正規表現でも使ってコメント行を削る あとはサーバーに送るなりテキストファイルにでもしてDLするなり
>>656 ありがとうございます。
うまくできました。
…まさかないとは思うけど一応、もし別のファイルにしたいだけだったら JavaScriptの部分をエディタに貼り付けて.jsの拡張子で保存してscriptタグのsrc要素にパスを入れる その場合はHTMLの初心者用スレでも探して詳しく聞くといい
と思ったら要らぬ心配だったか
すいみません、質問です。
>>655 のスクリプトを一つのDIV内のみで表示する方法をご存知でしたらお教え下さい。
それcssの話だからスレ違い
CSS単独じゃできなくね
>>655 でBODYからそのDIVに対象を書き換えるだけだよ
webprogかhpかの板にいって聞いたほうがいい
663 で答え出てるじゃん
できました。 指定したい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は触ったことなかったけどなんとかなるもんですね ありがとうございます。
Javaとは一切関係ないくせにお調子に乗りおって…。
668 :
デフォルトの名無しさん :2015/01/27(火) 19:42:20.64 ID:h7VibLL/
連想配列の値に配列は使えますか? また値の配列にpushしたいときはどう書けばいいですか?
試して分かる事は試せ
array = {}; array["test_1"].push(data_1); こんなんじゃだめでしたどうしたらいいですか?
>>670 array = {};
array["test_1"] = [];
array["test_1"].push(data_1);
変数名arrayにオブジェクトを代入してるのに違和感
>>671 >変数名arrayにオブジェクトを代入してるのに違和感
PHP畑の人なんじゃね?あの言語は配列という名の連想配列しか無いし
javascriptと同じじゃないか
JavaScriptに連想配列はないよ オブジェクトにはlengthプロパティがないし、配列専用メソッドも使えないし、連想配列として足りないものご多すぎる
お、おう
678 :
デフォルトの名無しさん :2015/01/28(水) 01:30:22.81 ID:2wq05yo9
JavaScriptってjqueryとか部品をつかって組み立てていくんですね。部品というかライブラリってややこしくいうんでしたね
配列関係を強化してくれるライブラリとかないかね。
js は a[1] も連想配列ってじっちゃんが逝ってた
>>680 Underscore.js
lodash
web制作管理板には、ライブラリ関連のスレが一杯ある
>>679 連想配列って内部の実装が配列になってるわけじゃなくて
array["test_1"]みたいに配列のようにアクセスできるっていう事だよ
684 :
デフォルトの名無しさん :2015/01/28(水) 12:23:42.72 ID:U/zfeC5A
「連想配列」 は誤訳(キリっ)
>>683 それはただのマップオブジェクトで連想配列ではないと思うよ
配列というからには
・定義順に列挙可能(foreach)
・lengthプロパティがある
・配列専用メソッドがある
これぐらいは出来て欲しい
PHPの連想配列ではいずれも可能だけど、ESでは不可能だよね
配列ってのは順番に意味があるから配列なのであって列挙順がランダムな時点でそれは配列ではない
ES6 の WeakMap でそこそこの要件は満たせる(配列専用メソッドはない)とは思うけど、現時点で連想配列といえるオブジェクトは存在しないと思うよ
686 :
デフォルトの名無しさん :2015/01/28(水) 12:30:47.30 ID:U/zfeC5A
>ESでは不可能 Array.prototype.hogehoge.apply で稼農
associativeに連想という語しか出てこなかったからこんな訳になったみたいだけど 何でもかんでも連想にしちゃうとおかしな訳語になるね 最初に訳した人は英和辞典しか持ってなかったのか?
688 :
685 :2015/01/28(水) 12:39:45.24 ID:3eBrGgj5
689 :
685 :2015/01/28(水) 12:42:43.45 ID:3eBrGgj5
>>686 定義順の列挙はどうやって再現する?
というか、大幅にprototype拡張したら「連想配列ではなかった」と認めるようなものだと思うけど
690 :
デフォルトの名無しさん :2015/01/28(水) 12:53:06.77 ID:U/zfeC5A
>定義順の列挙 それいわゆる「連想配列」の必要条件じゃないから
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(メンバ)の数が増えていくだけ
自分勝手に連想配列の定義を決めて それに則ってないと批判してるだけのバカ
>>689 ちなみに俺はPHPを知らんが定義順てのは同じオブジェクトを最初の方と後の方に入れたら
どういう順番になるんだ?
最初の方だったら定義順と言えるが、後の方だったら格納順と言えるな
694 :
685 :2015/01/28(水) 22:47:49.62 ID:u1gONzR6
695 :
685 :2015/01/28(水) 22:53:55.93 ID:u1gONzR6
>>693 ただ、自分が定義順といったのは
var obj = {c: 'hoge', a: 'foo', b: 'piyo'};
が存在したときに c -> a -> b の順番で列挙可能であるべき、というもの
配列は後で順番を制御可能であるべきだから、push, unshift 的な仕組みは必要だと思うけどね
PHP の連想配列は配列の一部だから配列の機能をそのまま使える
一方Perlはkeysで取り出す際の順番を未定義とわざわざ定義しなおした
hash値順じゃないのか
ハッシュ順ですらない
wiki先生は、ECMAScriptのオブジェクトを連想配列だと明言していらっしゃる
連想配列を標準で提供する主な言語 (Wikipedia の「連想配列」より) ・ECMAScript (JavaScript) - すべてのオブジェクトが、文字列が添え字の連想配列として扱われる ・PHP - 配列と連想配列の区別がない ↑ これを勘違いしちゃったんだね
最近の訃報 MS新ブラウザ開発 Opera元CEO新ブラウザ開発 もうやめてくれ!FirefoxとChromeだけの世界にしてくれ!
PHP厨はやっぱりアホしか居なかった
ECMAScriptの仕様書には「連想配列」の言葉がでてこないんだが、仕様書を読めない人ばかりなのか
>>697 for-in, Object.keys 共に列挙順はランダム
つまり、実装依存ということ
Perlにおいて、keysで返ってくる順番と valuesで返ってくる順番は同じである
>>685 > 配列というからには
> ・定義順に列挙可能(foreach)
「定義順」というのが何を指しているのか良くわからないけど、連想配列の構成要素として決められた順に
列挙可能とかあったっけ?
俺のイメージだと、連想配列は集合にすぎず、順次取り出せはするけどその順序は実装仕様によるって
感じなんだけど。
すまん、685以降を読まずに書いたら、超既出意見だった。
708 :
デフォルトの名無しさん :2015/01/29(木) 17:26:09.84 ID:TYTLl9KK
>>703 悔しいのは分かったから、Wikipediaの方を直しといてよ
まず連想配列は配列ではない
連想配列と配列の区別が無いPHPの方が特殊で順序保持されない言語の方が多い
>>685 は他の言語も勉強した方が良いよ
あとJSだって長さを取得する方法はあるし、PHPにlengthプロパティなんて無い
obj["hoge"]ってアクセス出来るから連想配列って名前がついてるだけなのに、 PHP厨はPHPがたまたま連想配列が配列と同じだからって、連想配列=配列って考えに 凝り固まっちゃってんだよな 連想配列、辞書(ディクショナリ)、マップは同じ意味なのになんで配列にこだわってんだか…
そーいやハッシュとか言語によって呼び方変わるのはなんでだろ?
>>712 内部実装が木構造を使う場合とハッシュテーブルを使う方法があると思うけど
木構造の場合にハッシュとは呼べないからだろう
で抽象的な名前にしたはいいけど、結局木構造とハッシュは速度に大きく差があるから
区別できる必要があって色々な呼び方が残った
さらにPHPみたいに本当に配列と同等にする実装も出てきたから、ややこしい事になってる
>>713 > さらにPHPみたいに本当に配列と同じ
Rubyも同じだが、PHPのやつはハッシュ。
ただし順序も保持する、順序付きハッシュだよ。
OrderedHashともいう。
配列のように扱えるからといって
実装が配列というわけじゃない。
LISPのassocでハッシュでも木構造でもない実装なかったかな
>>714 もちろん実装が配列じゃないのは分かるけど、挙動が配列と同等という意味だ
PHPの実装の詳細は知らんけど、キーが数字だったら連続領域を確保して最適化してる可能性もあるかもね
挙動が配列と同等というならば 挙動は連想配列と同等とも言えるわけで
718 :
デフォルトの名無しさん :2015/01/29(木) 20:22:27.12 ID:KP4aMXE3
jsの配列は連想配列(勃立っ)
>>717 面倒臭い奴だな…
「挙動が配列と同等」
「挙動は連想配列と同等」
ゆえに配列=連想配列となるが、とりあえず何が言いたいのか…さっぱりだな
>>719 違うだろ
PHPのArray ⊂ 配列
PHPのArray ⊂ 連想配列
>>709 事実をいっているだけで何も悔しくないんだがな
Wikipediaの情報が全て正しいと思ってるのか?
仕様書よりWikipediaが信頼できると?
Wikipediaの添削なんて俺は興味がないからやらん
必要だと思う奴がやればいい
言葉が違ったら別物とかワロタ おはぎとぼたもちが違う食べ物って言ってるようなもんだ 今は性質の話をしてるんだよ?
仕様書にない以上、ただの言葉遊びに過ぎないと思うけど それぞれの「連想配列」の定義が違うだけ 厳密な定義は仕様書にしかないんだから、仕様書の外の話なら水掛け論にしかならない 馬鹿にしている人は頭がどうかしてる
これ以上、連想配列云々を議論するなら自らの主張する「連想配列の定義」を明確にした上でその「根拠となる公的文書」を明示すべきだよ 最も、Wikipediaなんてユーザ投稿型の情報サイトは参考にならないし、まともな文書はなかなか出てこないと思うけどね 一次情報を出してくれないと信用できないけど、その辺を理解している人がどれだけいるかも怪しい そもそも、「連想配列」って標準化されてない気がするんだけど、どうなんだろう?
連想配列の定義の認識が違うのは約一名だけどなw 「連想配列」という単語自体は、公的文書で定義されたんじゃなくて、長いプログラミングの歴史の中で共通認識として形成されたんだと思う プログラミングに限らず大抵の言葉はそうやって生まれるからな もし一次情報にこだわるなら、日本語の用語も迂闊に使えない まず「連想配列」に当たる英語は何か、公的文書で調べる必要があるぞ
>配列というからには
>・定義順に列挙可能(foreach)
>・lengthプロパティがある
定義順に列挙可能な配列はPHPにしか存在しないので、配列はPHPにしか存在しない事になり
一方lengthプロパティはPHPの配列には存在しないので、配列はこの世の何処にも存在しないことになる
>>685 の頭がおかしいと言う事でFA
何か問題あるなら
>>724 の通り明示してくれ
>>725 > 長いプログラミングの歴史の中で共通認識として形成されたんだと思う
そういう曖昧な共通認識なら「連想配列」を定義することは出来ないんじゃないかな
>>726 PHP以外の言語って具体的には何?
そのPHP以外の言語の連想配列が「全言語共通の連想配列」を表しているとどうしていえる?
いってみれば、「JavaScriptにクラスがない」っていうのと同じだよ 仕様的にはクラスも連想配列もない でも、クラスや連想配列の性質を部分的には持っている それだけの話
>>727 >>728 言ってることが破綻してる
連想配列の定義ができないと言い張るなら、「クラスや連想配列の性質を部分的には持っている」と言えるはずがない
もし
>>728 を意味のある主張にしたいなら、君は「クラス」「連想配列」の定義の根拠となる公的文書を明示する必要がある
このフレームいつまで続けんの?
>>729 確かに…、
>>728 は正確ではなかったね
正確には「でも、PHPのクラスや連想配列の性質を部分的には持っている」になる
"PHP" は例であって "Perl" などの別言語が入ってもいい
>>729 「連想配列」の公的文書なんて存在しない事を知ってて(というか存在する必要もないが)、
それをよりどころとして、顔真っ赤にしてがんばってるだけだ
>>732 「仕様書にない用語は存在しない」というシンプルな主張をしているだけだろう
否定する理由はないと思うが、「顔を真っ赤にして頑張ってる事」にしたい理由がわからんな
大雪すぎる
>>703 そりゃ、日本語じゃ書いてないからな。出てこないだろ。
悔しすぎて変なことを言い出したぞ
ECMAScriptに書いてないだけで、連想配列の定義は存在するよ。 もちろん国が定義しているわけじゃないがw
>>735 ,737
別に英語でもいいけど、ソースは?
連想配列の初出ってなんだろうね 自分は perl で知ったよ
最近はKVS(Key-Value-Store)とも呼ばれるようになったな こっちはもっと大掛かりなデータベースを指す事がほとんどだが
http://www.w3schools.com/js/js_arrays.asp 連想配列は文字列インデックス named index が使える配列のことであって、JavaScript の場合はそれをサポートしていない。
a を配列として定義しても、a["key"] = "value"とした時に Javascript では裏で a を普通のオブジェクトとして再定義しており、.length やら配列用のプロパティ、メソッドは不正確な結果を返すようになる。
まあ納得の説明だな。
えっ そんな話聞いたことないぞ
>>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はバグってるが要素数を取得する事は可能だろ
もう、連想配列は、named indexが使えるコンテナってことでいいじゃん。 >> 745 > lengthも連想配列の定義に必須なのかよ? lengthやcount、sizeなんかが使えると便利なんだけどね。
person.keys().length
ああそれそれ どっこいしょ
↓こんなん作って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; }()); }
if (!Map) { の時点であかんやろ if (!window.Map) { にしないと あと、文字列以外のkeyに対応したいなら、setの時にkeyを配列に順に入れて、getの時にindexOfで検索すればいける
>>751 別に俺用で全て承知の上で使ってて、特に問題はなかったから、それでいいんだ
>>751 こういうのだけを.jsに書いて最初に読み込むようにしてるから問題ないよ
あとnode.jsの場合もある
たとえ特定に場合で動作していたとしても、プログラマとして そういうコードは書けないな。 すごく面倒だっていうのならわかるが対して面倒でもなく、 すぐに問題が有るってわかるからつい書いてしまう。 それがプログラマだと思うが、書かない=問題を認識してない=技術力が低いって ことだと思うね。
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は使われない。
>>756 > Mapをサポートしているブラウザであっても標準のMapは使われない。
試せば分かると思うけど、標準で Map を実装しているブラウザでは native code が使われるよ
巻き上げが発生するからこそ正しく動作する
まあ、自分なら typeof 演算子で function 判定するけど
>>755 いいたいことが一切読み取れないのだが、俺の読解力の問題かな?
>>756 IE11とchrome使ってみたが、ネイティブのMapが優先されてるんだが、どうなの?
仮にネイティブでなく、さらに var Map; if (!Map) { と解釈されたとしてもundefinedに上書きされることはないだろ
760 :
751 :2015/01/30(金) 21:35:47.48 ID:O0ehqMMx
うおマジだ、varを見落としてて勘違いしてしまった
>>750 のコードで問題は起こらないわ
さっきは済まなかった
ただやっぱり変数の巻き上げに頼るコードは、可読性の面でやはり良くない気がするな
>>760 > ただやっぱり変数の巻き上げに頼るコードは、可読性の面でやはり良くない気がするな
それには同意
自分ならこうする
if (typeof Map !== 'function') {
var Map = function Map () {};
// 以下略
}
>>761 if (!Map)はMDNとかでも普通に使われているイディオムだから別に問題無い
Polyfillに可読性とかどうでもいいんだ、想定通り動けば十分
>>762 期待通りに動くのだからそれ程強く主張するつもりはないよ(ポリシーの違いだし)
下記は結構気になる点ではあるけど
・size が書き換え可能
・hash を直接参照可能
・has は hasOwnProperty の方がいいかも (※現コードでも問題はないけど、prototypeを辿る必要はないかと)
>>750 同じキーで2回セットすると size がおかしくなるね
var map = new Map;
map.set('key', 'value');
map.set('key', 'value');
console.log(map.size); // 2 (※1であるべき)
それと StringMap を匿名関数で括る必要がない気がする
>>764 > 同じキーで2回セットすると size がおかしくなるね
うぉ、それは致命的な問題だ
++this.size;
↓
this.size = Object.keys(this.hash_).length;
にすべきか
>>764 > それと StringMap を匿名関数で括る必要がない気がする
グローバルにStringMapが漏れちゃうから括ってる
>>765 Object.keys の計算コストを嫌うのならこうする
if (!this.has(key)) {
++this.size;
}
>>763 のいうように size を読み取り専用にするなら Object.defineProperty も併用する必要がある
>>766 var Map = function Map () {};
Map.prototype = {};
でグローバル名前空間に影響しないと思うけど...
>>767 if (!this.has(key)) {
this.hash_[key] = value;
++this.size;
}
一応指摘しておくと、こうしないと永久にsizeが増えんぞ…
>>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行書き換えただけだとなぜ考えない?
sizeメソッドがコールされるたびに、foreachまわして数えろよ 状態を増やせば増やすだけバグの温床がふえるだけだぞ 速度なんてよっぽどでなけりゃ気にならんよw
ああ、代入が先に来るから size が増えないという意味か かっとなって悪かった だが、言い方には気をつけて欲しいものだな
>>773 なるほど
厳密に実装するならばsizeはObject.definePropertyでgetを実装すべきなんだろうね
ID:hCZ/B06qはカチンときすぎだ ここは2chなんだから相手に誠意を求めるな 力を抜け
「言い方には気をつけてほしいものだな」という
言葉にカチンと来た
>>775 w
はいはい
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
うんこでそう
>>778 間違った記述なので期待通りに動作しない
eval("ああ"); // ReferenceError: ああ is not defined
↓
typeof eval('void 0') === 'undefined'; // true
JavaScriptの統合開発環境みたいなの拾ってきたw
DX Studio
http://www.dxstudio.com/ Freeバージョンはそのまま使えて、開発ライセンスは登録が必要。
マルチプラットフォーム、EXEファイル生成可(ライセンス版のみ)w
DirectX9ベースで、インストールされていない場合は自動インストール。
JavaScriptの実験用に使えるw
# ただし、全部英語で、ある程度の英語スキルが要求されるw
NG追加っと
787 :
デフォルトの名無しさん :2015/02/08(日) 08:03:00.58 ID:tUjKNEQ0
ぐろ
広報がアルバイトなのか?
しかし20年もするともう一度世界大戦が・・・ 今の若手連中はもう一度戦地に行ったのだろうか
子供が消耗品だった時代
791 :
デフォルトの名無しさん :2015/02/11(水) 21:49:27.12 ID:z1YCt8TB
神JSerが長い規制の海を越えて戻ってきましたよ。 どんな質問にもバッチリ答えますよ。
>>793 楽してPolyfillライブラリを使うのが目的ではありません
仕組みを知りたいのです
ちなみに少なくとも下2つは ES6 に準拠していませんが、本当に理解して紹介していますか?
>>974 じゃあpolyfillコードを読んでください。
polyfill を書く場合、どのようなコードになるのでしょう?
その答えがそこにあります。
>>794 別にES6に準拠してるなんて一言も書いてないじゃん
Polyfillなんて完全準拠を意味してるわけじゃないし
797 :
デフォルトの名無しさん :2015/02/11(水) 22:12:17.74 ID:z1YCt8TB
>>791 ES5の範囲でサブクラスのことまで考慮する必要はない。
どうせ他にも再現できない細部はあるのだから、
Mapという挙動を再現することだけ考えればいい。
上でも出てたが配列を2つ用意してシコシコするのでいい。
NaNだけには注意して。そうすれば問題ない。
>>795 ES6 に準拠しているか準拠していないかわからないライブラリを確認するのは無駄ではないでしょうか
OrdinaryCreateFromConstructor 部分が ES6 に準拠しているなら参考になりますが、どのライブラリが相当しますか?
>>796 OrdinaryCreateFromConstructor の挙動がわからない、と私は書きました
少なくとも、OrdinaryCreateFromConstructor 部分は ES6 に準拠しているべきでは?
799 :
デフォルトの名無しさん :2015/02/11(水) 22:20:07.48 ID:z1YCt8TB
>>798 何か勘違いしてるみたいだけど、OrdinaryCreateFromConstructorは要はnew演算子を使った時の内部処理、
つまりインスタンスオブジェクトへのプロトタイプの設定なんかでMapの挙動とは直接関係ないよ。
>>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. でいきなりつまずきました
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 のような内部データの領域を確保している感じ
>>802-803 ありがとうございます
ほぼ理解できたと思います
>>804 >>803 のコードに近づけるなら下記コードのイメージですね
function Map(){
this.MapData = Object.create(Map.prototype);
}
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のインスタンスではないよ。
まあ細かな内部処理の形にこだわってもしょうがない。
この辺り実装はパフォーマンスのために工夫するものだから。
外から見て期待する部分の振る舞いが同じなら中身のことまでそう気にすることはない。
JavaScript の初心者スレッド はないのでしょうか
>>806 そのコードで問題ないです
動かない原因で考えられるのは、ブラウザが対応していない、addEventListenerのタイミングが適切でない、くらいかと
【環境】 Android のOperaClassic
【やりたいこと】ユーザサイドスクリプトでjQueryを使いたい。
PCのFF上のGreasemonkeyだと
@require
http://hogehoe/jquery.min.js とかで使えるようになりますが、スマホのオペラクラシックでは外部ライブラリを参照する方法は無いでしょうか?
それはブラウザ毎の仕様によるから該当スレ探してそっちで聞きな 汎用性ならUserScriptの中にライブラリをコピペで入れちゃうのが楽だけど