+ JavaScript の質問用スレッド vol.78 +
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
【FAQその1】 Q1. 開いた別窓/フレームの内容にアクセスできないのですが… A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。 Q2. JavaScriptでローカルファイルを読み/書きたいのですが… A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに… Q3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが… A3. セミコロンで複数の文を区切れます。onclick="foo();bar();"としましょう。 Q4. document.write(...)でページ内容を追加したいのですが… A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。 innerHTMLは非標準ですがIE、Opera、Safari、Gecko(N6/N7/Firefox等)で対応済。 Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが… A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。 Q6. DOMでtable要素にtr要素を追加しても表示されないのですが… A6. DOMでは(XHTML 1.x除く)tbody要素にtr要素を追加する必要があります。 tbody要素はtbodyタグを書いていなくても自動的に作成されます。 またはtable.insertRow()/tbody.insertRow()を使いましょう。 Q7. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが… A7. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。 Q8. フォーム部品名を変数にした「...myform.変数名.value」が動きません… A8. 「document.forms.myform.elements[変数名].value」でどぞ。 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。 Q9. Aタグのonclickで動作指定してるのですが時々動きません… A9. 「onclick="...;return false"」としないとページ移動しちゃうから。
【FAQその2】 Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが… A10. 取得には document.defaultView.getComputedStyle() を使う必要あり。 IEでは要素オブジェクトのプロパティcurrentStyleを使う。 Q11. 100*1.15の結果が114.999…998となってしまうのですが… A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。 Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが… A12. IE7/Gecko/Opera/Safariのnew XMLHttpRequest()、IEの new ActiveXObject("Msxml2.XMLHTTP.6.0") (または"Msxml2.XMLHTTP.3.0") を使えばできます。古いブラウザだと隠しフレームに読むなどのワザが必要。 Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません… A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();}; という風に無名関数を作りましょう。中に書かれたコードが実行されます。 Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが 「"...this..."」とか「function(){...this...}」ではうまく行きません。 A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。 「function(x){return function(){...x...};}(this)」のようにthisを別の変数に 束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中) Q15. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが… A15. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、 offsetがマッチした位置、sが置き換え前の文字列全体になります。
【FAQその3】 Q16. input type="file"の値を設定(参照)できないのですが… A16. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。 Q17. getElementById('ID名')や$('ID名')で要素が取れないのですが… A17. コード実行時点でHTMLがそこまで読まれてない。onload中でやるとか。 【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
----------------テンプレここまで----------------
改めて読み直してみるとひっでぇテンプレだなw 誰かWiki立てて集約させろよ
そう思うなら「誰か」じゃなくて自分でやりなよ
言いだしっぺの法則
12 :
Name_Not_Found :2010/05/09(日) 03:31:41 ID:UTcE5Lg7
Comet+Ajaxでのリアルタイム2Dゲームを作ろうと考えています サーバーの方は書き上がったのですが、AjaX側が上手く出来ず困っています。 通信が完了しないうちに読み込んだデータを取得するにはどうしたら良いでしょうか。 XMLHttpRequest.readyStateが1のうちにonreadystatechange時にresponseTextを取得しようとしましたがうまくいきませんでした。 何卒御教示よろしくお願いします
非同期通信はブラウザによって差異があって面倒だからprototype.jsとかjQueryとかライブラリを使うと 簡単にどのブラウザでも動くものが作れる
IE9未満切り捨て
まずreadyStateとは何かを調べて出直せ
3〜4の間に取得できる
【FAQその3】
Q16. input type="file"の値を設定(参照)できないのですが…
A16. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
https://developer.mozilla.org/en/DOM/File //example = <input type="file"> node
alert(example.files[0].getAsDataURL());
<script type="text/javascript"> view = function(obj){ var img = document.createElement("img"); img.src = obj.files[0].getAsDataURL(); document.getElementsByTagName("body")[0].appendChild(img); } </script> </head> <body> <input type="file" onchange="view(this)" /> <br /> 選択した画像 : </body> 面白いね
セキュリティ制約のため絶対に不可。
セキュリティ制約のため設定(参照)は絶対に不可。
なんだろ、
>>17 のなかでは
>>17 これで取得した画像ファイルの情報を、スタイルシートの指定みたいにrepeat, positionの指定をして
特定のDIV要素のbackgroundイメージとして表示させられないでしょうか?
(positionはDIV要素のサイズ変更に伴い後で変更できる必要があります。)
無理ですか?
どこがわからないの?
[DOMオブジェクト].style.backgroundImage = "url('"+example.files[0].getAsDataURL()+"')"; かな
24 :
21 :2010/05/09(日) 16:20:43 ID:???
>>23 example.files[0].getAsDataURL() で取得できるのはURLじゃないので、それでは無理では
26 :
21 :2010/05/09(日) 16:33:40 ID:???
>>25 それにはrepeat, positionについての記述がどこかにありますか?
自分で探せ
28 :
21 :2010/05/09(日) 16:40:46 ID:???
今
>>23 で言われたことを試してみましたが、それで出来るんですね。
URL以外は設定出来ないと思い込んでおりました。馬鹿でしたね。
ありがとう!!
両方だよ
34 :
Name_Not_Found :2010/05/10(月) 14:17:32 ID:wVueH85P
35 :
34 :2010/05/10(月) 14:18:35 ID:wVueH85P
すみません「ot」って入力して変換されたところでエンター送信しちゃいました…
>>1 乙です。
釣られないぞ!
googleimeで超学習してもottまで入力しないと出ないぞ
スレのレベルが恐ろしく低下してるな(笑)
訳わからん奴が増えてまともな奴が消えてしまった
ブログランキングのリンクをクリックで新規ウィンド表示 それを一瞬にして閉じる。 メインウィンドウの操作で上記方法は可能でしょうか? クリックした本人はにランキングサイトを見せないで直ぐに閉じるようにしたいんですが。
帰れ
42 :
Name_Not_Found :2010/05/11(火) 18:32:12 ID:+CibXAjO
>>40 可能
ただし、見せないレベルで直ぐに閉じたら子Window側の処理が完了するかどうかあやしい
しかもWindowが一瞬でも開いたらユーザーは嫌がるだろうから結果的にアクセス数が減るってのが定説
あとユーザー側のセキュリティでポップアップブロック喰らう
自演で串刺してランキング回した方が効率的
43 :
42 :2010/05/11(火) 18:35:51 ID:+CibXAjO
>>40 すまん、ユーザー操作で新規Windowあげるならポップアップブロックされないかも
閉じる処理は簡単だから頑張れ
そもそもクローズできなくないか?
なんで?
XMLHttpRequestってブラウザキャッシュがあればキャッシュが使われるんですか?
正規表現って便利だな・・・ 今までfor使ってた処理が一行で収まるようになったし非常に高速だ そこで質問ですが、JavaScriptを書くのに便利なWindows用のフリーのエディタがあったら教えてください
ググレカス
>>49 もちろんと言うかもう一度ググってみましたが、やはりコレといった物は見つかりませんでした
入力補間は必要なく、文法チェックや誤字脱字のチェック、色分け程度があるだけで十分なのですが
textarea タグに wrap="off" を使わずに同じ効果を与えることはできませんか? wrapを使うと、HTML Validatorさんが「そんなプロパティーは無いぞボケ」って毎回警告してくれますが スタイルシートでwhite-space:nowrapとかそれっぽいものを試してみましたが、どうやってもできません。
divの中にtextarea
textarea wrap cssでぐぐるといっぱい出てくるな。 CSSでやりたいんならwhite-space使え、 それで無理なら諦めてwrap属性使え、って話らしい。
57 :
52 :2010/05/12(水) 00:22:07 ID:???
>>55 1年ぐらいずっと探してたんですが、やっぱり無理ですかね
補完いらないっていってるのに補完画面見せ付けるなんてw firebugでいいよ
60 :
Name_Not_Found :2010/05/12(水) 08:33:57 ID:l84YwbL5
エディタネタも必ず1スレに1、2回上がるような テンプレに入れちゃった方がよくないか? それと、いつもRedRailsが出ない不思議w
>>60 は?
ここはRubyスレじゃないんだから当たり前だろ
>>53 ,56,58,59,60
ありがとうございます
Emacs, gvim …… 有名なCUIテキストエディタ。Windows向けにGUI化した物。
メモ帳 …… Windows標準のテキストエディタ。
NetBeans, eclipse …… Javaで作られた統合開発環境。
Firebug …… Web開発支援ツール。Firefoxアドオン。
RedRails …… eclipseプラグイン。
この中でJavaScriptの色分け編集目的だけで選ぶなら、Firefoxを使っているのでFirebugですね。
他はCUI産で操作に癖がありそうだったり、余分なものが付きすぎていたり、Javaアプリに抵抗があったりします。
意外に、HTML, XHTML, CSS, JavaScriptあたりを色分けしてくれるだけのフリーのエディタって少ないんですね。
JavaScript抜きならez-HTMLが便利なんですが・・・。
試してみましたが、FirebugもJavaScriptだけ色分け表示してくれないんですねw でもデバッグは簡単に行えそうなので積極的に使っていこうと思います ありがとうございました。
>>62 >意外に、HTML, XHTML, CSS, JavaScriptあたりを色分けしてくれるだけのフリーのエディタって少ないんですね。
挙げられてないだけでいくらでもあるよw
ここで聞くよりソフトウェア板のエディタスレがいいんじゃないかね
俺的にEmEditor freeとかMeryで十分なんだが
使い慣れたらどれでもよくなる
正直エディタごとき自分で探せない奴なんてゴニョゴニョすぎる
TeraPadを長年愛用しとる
>>64 スクリプトタブのコードがハイライトされても意味なくね?
ぶっちゃけメモ帳だけでも困らない
メモ帳で困らないのは、困らない程度のものしか書かないからさ(キリッ
Firebug知らないけど
>>64 の画像見る限りハイライトされてるような・・・?
予約語とかが違う色になってるよね
そういうことじゃないんだろうか
VimにJSLint入れれば俺TUEEEEEできる 多分他のもできるんじゃないか つーかFirebugはエディタか?
Mac用だけどcodaいいよー。webkitのデバッガ/インスペクタも横に表示しながら作業できる。
>>75 FireRainbowってFirebugのスクリプトタブのコードにハイライト当てるだけでしょ?
Firebugをエディタ的に使うならコンソールタブだと思うんだけど
firebug大昔入れたけど使い方が分からなすぎる
cssの調整しか使ってない
スレタイ嫁おまんちん共
>>79 前提って何?Firebugをエディタに使うってこと?
>>48 ,51,62からの流れかと思ってたが違うの
Firebugも使いこなせないって、なにそれ怖い
>>83 定型文を多用するやつに優れたやつはいない
Firebug、WebInspector、Dragonflyとか使わずにJavaScript書くって 未だにalertデバッグとかしてるのかな。 徒歩と自転車くらいの差はあるだろうに。
書いてデバッグなしでぶつけ本番余裕でした
それで本当にバグを一切出さない奴がいるからな、マジすげぇわ
色分けだけならgeditで十分だな
90 :
Name_Not_Found :2010/05/13(木) 19:28:26 ID:JeywsDZ8
try-catch使う香具師は素人 alertで値出す香具師は情弱 firebug使う香具師は低脳 メモ帳使う一発bugなし運用(納品)の香具師はスーパーハカー
>>90 これぞ2ちゃんねらーって感じのレスだな。
俺も褒められたいからメモ帳以外アンスコしますた!
93 :
52 :2010/05/13(木) 20:39:30 ID:???
褒められたいなら、viエディタを使うといいアルよ
viをIDEのように使う俺は変態
コードの使い回しが一発で動いても全然不思議じゃないけどな 腐ってる可能性はあるが
96 :
Name_Not_Found :2010/05/13(木) 23:22:07 ID:IKsmdGgL
発酵スパゲッティ
おもんなっ!クソやわ
メモ帳とか言ってる奴はにわか スーパーハカーはコマンドプロンプトでedlinを使う
結局かっこつけたいってことな、はい終了
モテたい
好きな子頭に思い浮かべて寝ろ
修造乙
firebugのプロファイラは普通に便利じゃ
firebugの使い方kwsk説明してるページまだー?
106 :
Name_Not_Found :2010/05/14(金) 04:56:34 ID:k/Da04GB
iframeを使って居るのですが 子から親の関数を呼び出すことは出来ますか ----------parent.html------------ <html> <body> <script type="text/javascript"> function test(){ alert("ok"); } </script> <iframe src="child.html" /> <div id="xxx"></div> </body> </html> ----------child.html---------- <script type="text/javascript"> top.document.getElementById('xxx').innerHTML = "ok";//問題なくできる //ここでparent.htmlのtest()を使いたい </script>
107 :
Name_Not_Found :2010/05/14(金) 05:00:16 ID:k/Da04GB
parent.htmlに間違いがありました 正しくはこうです <html> <body> <script type="text/javascript"> function test(){ alert("ok"); } </script> <div id="xxx"></div> <iframe src="child.html" /> </body> </html>
109 :
Name_Not_Found :2010/05/14(金) 08:18:04 ID:ljNKr0ny
>>108 できました!!!
ありがとうございます
おかげさまで計画がまとまりそうです
110 :
40 :2010/05/14(金) 11:12:53 ID:???
>>42 親切なアドバイスありがとうございます。
ただ・・・
子ウィンドウに閉じる記述は見つかるんですが、
親ウィンドウに子ウィンドウを開いて閉じるというのが見つからなくて・・
ヒントを教えてもらえませんか?
とりあえず今は、
「このリンクをクリックすると5つのランキングサイトが個別に一括で開かれます。」
という但し書きを入れてリンクを書いています。
111 :
40 :2010/05/14(金) 12:52:45 ID:???
自己解決しました。 有り難うございました。
112 :
40 :2010/05/15(土) 12:25:13 ID:???
iframeを非表示にして、その中に呼び出す方法に変えました。
それセキュリティレベルによって表示されなかったりするんじゃね
114 :
40 :2010/05/15(土) 13:10:24 ID:???
表示されない人にはそれでいいです スクリプトオフでも表示されないので、そう言う事気にする人にはかえってそれでいいんじゃないでしょうか
showModelessDialogで特定のボタンを押した時に操作画面が開くようにしたのですが、 IEではボタンを押した数だけ別窓が開いてしまいます。 これはフラグを立てるなどして自己管理しないと防げないものでしょうか?
そうですね。
118 :
Name_Not_Found :2010/05/16(日) 18:34:06 ID:OaPL2kbG
余計なお世話かもしれないけど、imgタグをaタグで囲んで、 aタグのhref要素の方を画面読み込み時にJSで書き換えた方がいいんじゃない? ・JSを切っていてもデフォルトのジャンプ先を指定できる ・リンク先がステータスバーに表示されるのでユーザーが安心できる みたいなメリットがある。
とりあえず別ウィンドウで開くならwindow.open
ポインタ変えたいならstyleかcssでいいさ
なんで1引くん?
0から始まるからじゃない?
あ、round()か。yahooの確率が高いな。
126 :
125 :2010/05/18(火) 03:04:37 ID:???
127 :
125 :2010/05/18(火) 03:22:17 ID:???
夜中に勝手に事故解決できました。すみません。 後は実行エラーが残っているので、自力でやって生きます。
128 :
Name_Not_Found :2010/05/18(火) 04:03:03 ID:O7AdrCKm
>>127 tetxのtypoか。超悩んだ。進数変換プログラムって宿題っぽいな
var t1 = document.getElementById("t1").value;
var n = document.getElementById("n").value;
console.log('検算:%o', parseInt(t1).toString(n));
var div;
var mod = [];
while (t1 > 0) {
div = parseInt(t1 / n);
mod.push(t1 % n);
t1 = div;
}
document.getElementById("ans").value = mod.reverse();
129 :
Name_Not_Found :2010/05/18(火) 05:41:11 ID:UKDVi0As
>>118 わかる方いますか?
scriptはjsファイルでまとめてやってるので
<a href="" target="_blank"><img src="" alt="" border="0" height="150" /></a>
<script type="text/javascript" src="*****.js" charset="utf-8"></script>
その二つを使ってなんとかやりたいのですが
>>129 >>119 に書いてある通りでやるのはダメなの?
aタグにid="random"とか何か振っておいて、最後の行を
document.getElementById('random').href = tag[p];
って変える
質問があります。 IE限定の仕様で、F8のファクションを使用すると、 表示元の画面から別の画面へ遷移する機能を設けたのですが、 表示元の画面の入力項目で入力中に半角カナ変換(F8)を行うと、 無条件に別の画面に遷移を行ってしまいます。 日本語半角カナ変換のF8を認識せず、 単発のF8を判定する良い方法はないでしょうか?
132 :
Name_Not_Found :2010/05/18(火) 12:52:49 ID:aiHJO9jP
>>131 案じゃなくて申し訳ないんだけど、
F8である理由は?
133 :
Name_Not_Found :2010/05/18(火) 13:01:02 ID:ousShdR2
>>131 画面内全ての入力フィールドのいずれかにカーソル当たってる時は
F8機能の関数をreturn falseすれば?
>132 業務アプリ政策時に、 F1からファンクションを割り当てて、 F12まで使用しており、 ある特定の処理がF8なのです。 >133 ご回答ありがとうございます。 実装して試してみましたが、 やはりF8変換候補の入力域⇒変換確定後⇒同一入力域内で、 F8で他の画面に遷移したいというのがありまして、 なかなか悩みどころです。
135 :
Name_Not_Found :2010/05/18(火) 13:44:31 ID:ousShdR2
>>134 IE8はこれで問題なく機能したよ
つーかF8変換後に強制画面遷移は馬鹿仕様だろ
F8変換後に全角カタカナ入れたり出来ないじゃん
window.onload = function(){
window.document.onkeydown = function(evt){
if(evt){
var kc = evt.keyCode;
}else{
var kc = event.keyCode;
if(document.activeElement.id == 'text'){
return false;
}
if(kc == '119'){
alert('F8押下確認!');
window.open('','_blank');
}
}
}
}
検索キーワードが浮かばなくて分からないので質問させてください。 大量に画像があるページを開いたときに、画像を読み込むかどうかを観覧者が選択でき OKをしたときのみ画像の読み込みを開始させるという事はJavaScriptで可能でしょうか? 処理は全てのimgタグに対してでかまいません。
できますよ
>>136 「画像 javascript 遅延 表示」とかでいいんじゃない?
それとも表示するって閲覧者がやったら全部一気に読み込みたいってこと?
139 :
136 :2010/05/18(火) 15:05:50 ID:???
>>138 >それとも表示するって閲覧者がやったら全部一気に読み込みたいってこと?
その通りです。imgタグをクリックで画像を表示するようにしてもいいかもしれません。
HTMLに手を加えたり、余分なコードは無くしたいのでJavaScriptのライブラリは使用したくありません
どのタイミングでどのようにして画像の読み込みをさせないのかの情報が少なくて困りました。
140 :
Name_Not_Found :2010/05/18(火) 15:09:33 ID:ousShdR2
>>134 F8変換後にエンターキー押されたらF8関数を機能させるとか、どうよ?
エンターキー押下後に文字の修正時にF8変換出来なくなるけど
141 :
136 :2010/05/18(火) 15:19:07 ID:???
ちなみに、画像が大量にあるアーカイブページのデータ転送量をできるだけ抑える目的と、 重いページを開く覚悟をもった人にだけ開いて欲しいという目的があるので、 見た目だけ延滞表示させるようなスクリプトは意味がありません。
>>139 ,141
どっちみちHTMLに手を加えることになるし、
遅延表示も見た目だけじゃなくて後から読み込むのだからやり方は同じだよ。
<script> function displayImg() { document.getElementById('imgarea').innerHTML = '<img src="hoge.jpg">'; } </script> <button onclick="displayImg()">画像表示</button> <div id="imgarea"></div> こういうことだろ? HTTPヘッダ見れば分かると思うが、ボタンをクリックしてからサーバから画像をとってきてる。
HTMLに手を加えたくないって事は、userscriptかなんかを提供するって事か? 板違いじゃないかね?
>>143 それはHTMLに手を加えなきゃできないだろ
1行コメントに日本語は使えない縛りがあったりしますか? html上で書いていたときは問題なかったのですが、jsファイルに切り分けたところ、 日本語のコメントの部分でひっかかりました コメントを削除したら動くようになりました htmlはsjisで、jsファイルはutf8で保存していました なぜだろうとずっと疑問に思っています
とりあえずHTMLと文字コードが異なるならcharsetは指定したほうがいい
charset="utf-8"
>>149 lazyloadにたどり着いた上で話してると思ったんだけどな
lazyloadしかけてもimgのsrc書き換える間のリクエストはあるから
> データ転送量をできるだけ抑える目的
の目的から外れるのかなと思って。
抑えるって言ってるからそれでもOKなのかもしれないけど。
chromeだとlazyloadが開始する前に かなりのリクエストが発行されてるよな 鯖的には優しくないのう
見かけの速さを実現するためならなんでもするのがChrome
154 :
136 :2010/05/19(水) 14:14:06 ID:???
質問にお答えいただき、ありがとうございます 色々調べてみて、分からなかった「どう画像のダウンロードを止めるのか」の部分はこんな感じになりました スクリプトが読まれた時点でCSSにimg{display:none;}を加え、onloadよりも早くimg要素のsrcを書き換える関数を呼びました これで様子をみてみます var ua = window.navigator.userAgent; if(window.ActiveXObject !== undefined){ //IE var css = document.styleSheets[0]; css.addRule("img", "display:none"); document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); var script = document.getElementById("__ie_onload"); script.onreadystatechange = function() { if (this.readyState == "complete") { stopLoadingImage(); } }; } else if (ua.match(/Firefox|Opera|Chrome/i)) { var css = document.styleSheets[0]; css.insertRule("img { display:none; }", css.cssRules.length); document.addEventListener('DOMContentLoaded', stopLoadingImage, false); } else { //例外です Safariはフリーズしました }
155 :
136 :2010/05/19(水) 14:49:59 ID:???
Firefoxでセキュリティエラーが出ますね css書き換え部分を下記に変更しました document.write('<style id="addcss" type="text/css">img { display:none; }</style>');
156 :
Name_Not_Found :2010/05/21(金) 15:08:33 ID:X7uHGX0U
<script type="javascript"> <![CDATA[ document.writeln('.header-image { display: none !important; }'); ]]> </script> シンタックスエラーとなりますが、原因がわかりません。 お願いします。
//<![CDATA[ 〜 //]]> あとtypeはtext/javascriptね
>>156 XHTML5ならMIMEタイプをapplicatin/xhtml+xmlにしろ
document.writelnも使えない
なんで5
今時新規にxhtmlで構築する人なんているのかね? html5もだいぶみえてきたしxには見切りつけてhtml4に戻ってる人が多そうだが
いえおれもです
xhtmlは自己満足の世界
現状どっちでもいいってことか
html4だとruby(言語じゃなく)が使えないからxhtmlって理由もある。
xが付くとまた回帰するってことはよくあるよね。
rubyこそjavascriptでやろうぜ
168 :
Name_Not_Found :2010/05/21(金) 17:49:18 ID:X7uHGX0U
156です。 解決しました!みなさんありがとうございました。
169 :
Name_Not_Found :2010/05/22(土) 00:32:18 ID:3I72MqYc
JavaScriptを始めようと思っている者です。 ajaxやjQueryは等を使ったwebページを作成した場合、 閲覧する人も、ajaxやjQueryのランタイムのようなものをインストールする必要があるのでしょうか?
画像を使ったHTML(webページ)を作成したときに 閲覧する人は画像を事前準備(インストール)しなくても勝手にDLされる っていうのと同じ
171 :
Name_Not_Found :2010/05/22(土) 00:48:06 ID:3I72MqYc
回答ありがとうございます。 早速、jQeryを使ったjavascriptを作成しようと思います!。 ところで、javascriptって ホームページビルダー(Dreamweberは持っていないので) とか使うのは邪道でしょうか?
好きにすればいいと思うよ その気になればメモ帳でも作れる
つーかJavaScript覚えたてならむしろメモ帳なりテキストエディタなりの方がいいかも
>>171 dreamweaverな
ホームページビルダーより適当なフリーエディターのほうがいい
175 :
Name_Not_Found :2010/05/22(土) 02:01:06 ID:3I72MqYc
171です。 とりあえず、ホームページビルダーを使ってみたら、、 入門書通りにソースを書いても、それ以外のコードが少し混ざってしまう。 いい点といえば、ボタンやらテキストボックスの場所をマウスで微調整できるところ。 多分、多少の記入漏れとか文法間違いはチェックする機能があると思うけど、 javascriptを使うためのソフトじゃないから不便でも文句言えない。 eclipseを使うって本には書いてあったけど、細かい設定とかあって難しそうだった。
ビルダーひでぇ そーいえばジャストが買い取ったんだっけ?
177 :
Name_Not_Found :2010/05/22(土) 02:30:00 ID:3I72MqYc
ジャストシステムが販売してるけど、 サポートとか、開発はIBMのままらしい。起動画面にはIBMと書いてある。 余談だけどEclipseも、もともとIBM製らしい。
178 :
Name_Not_Found :2010/05/22(土) 07:15:41 ID:lNWa/wWG
セレクトボックスA, B, C, D(Dが最終的な値を決定するセレクトボックス)があるとして、 Cが変更された →自分の値に応じてDの値を変更 Bが変更された →自分の値に応じてC, Dの値を変更 Aが変更された →自分の値に応じてB, C, Dの値を変更 あとはそこにあるコードの24-29行目と同様、 「分類B-じゃがいもごとの分類Cリスト」 「分類B-にんじんごとの分類Cリスト」 「分類B-ピーマンごとの分類Cリスト」 「分類B-スイカごとの分類Cリスト」 「分類B-オレンジごとの分類Cリスト」 …… を間違いなく根気よく書いていけば終わる。
で、こんなことやってられないので、JavaScriptでリストの中身まで 全部いじるやり方はお勧めできない。 もちろん値のリストにもよるが、 全てのパターンのセレクトボックスを全部自分で書いてしまい (この例のセレクトボックスBなら、<select>〜</select>を4回書く。 C, Dはさらに増えるけどまあ仕方がない)、 選択された値によって表示・非表示を切り替える方が まだやりやすいんじゃないかと思った。
Googleのパックマンどうやってつくるんだあれ・・ すげえよ
どこ行くと見られんの? それ
トップページだろ
184 :
Name_Not_Found :2010/05/22(土) 13:31:25 ID:WnZ6qoN8
jQuery使ってphpにPOSTした結果を ”順番”にテキストエリアに入れたいんですが、どうしたらいいでしょうか。 ・実行中リアルタイムで帰ってきた結果をその都度テキストエリアに入れたい 自分で組んでみたのですが、 順番にならなくて困っています。
186 :
184 :2010/05/22(土) 13:32:37 ID:WnZ6qoN8
ちなみにですが、200〜300ぐらいPOSTします。
187 :
Name_Not_Found :2010/05/22(土) 13:35:14 ID:WnZ6qoN8
>>185 $(function() {
$("#loading").hide();
$("#FSubmit").click(function(){
var blahs = $("#F textarea").val().split("\n")
var len = blahs.length;
$("#loading").show();
for (var i=0; i<len; i++) {
$.ajax({
type: "POST",
url: "s.php",
data: "blah=" + blahs[i],
success: function(msg) {
$("#resultForm textarea").val($("#resultForm textarea").val() + blahs[i] + "," + msg + "\n");
}
});
}
$("#loading").hide();
return false;
})
})
こんな感じです。
(#loadingも処理中だけ表示させたいんですが、今のところうまくいってません。)
>>187 何か質問とコードが曖昧でどういう結果が欲しいのかわからんな。
textareaに改行付きのどういうコード組んだら、どういう風に表示されるのが正解なの?
そもそも200行から300行あるなら、それをblahで繋げて1回だけphpに処理させた方が良くない?
あ、「どういう入力したら」の間違いね
190 :
Name_Not_Found :2010/05/22(土) 14:02:20 ID:WnZ6qoN8
191 :
Name_Not_Found :2010/05/22(土) 14:07:35 ID:WnZ6qoN8
>>188 すいません。
テキストエリアが2つあり、
左のテキストエリアの各行をphpにPOSTして、
その結果を改行区切りで右のテキストエリアに反映させる、という処理です。
左の右のテキストエリアの各行を、
データ:結果で一致させたいのです。
処理はなんでもいいのですが、仮に元データの数値に2を掛けるというようにします。
textarea1:
2
3
1
2
3
というデータがあり、ボタンを押すと、phpの処理が完了し次第どんどんtextarea2に
結果が追記される。
textarea2:
4
6
2
4
6
最終的にこのようになります。
>そもそも200行から300行あるなら、それをblahで繋げて1回だけphpに処理させた方が良くない?
それだと、200~300のPOSTが全て完了するまで
ページが読み込み中になってしまい、ユーザビリティ的によくないと思ったので、各処理が完了し次第反映させたいのです。
>>191 それなら、
data: "blah=" + blahs[i],
でなく、
data: "blah_" + i + "=" + blahs[i],
みたいにしてphpに渡し、phpのレスポンスをもらった番号付きで返す方が間違いがないんじゃね?
それなら返ってくる順番が違っても復元できる
{1:6}
{0:4}
{3:4}
{4:6}
{2:2}
みたいに返ってくるから、レスポンス用の配列一つ用意しておいて返ってきたハッシュの番号のところにデータを入れてく
$("#resultForm textarea").val()には配列を改行でjoin展開したものを毎回渡すだけ。
つか、毎回$()でテキストエリアの要素とって、そのval()取得して連結って効率悪いだろ
194 :
Name_Not_Found :2010/05/22(土) 14:28:53 ID:WnZ6qoN8
>>192 ちょっと見てます
>>193 その方法で1つの行の処理が完了し次第逐一反映させることってできます?
>つか、毎回$()でテキストエリアの要素とって、そのval()取得して連結って効率悪いだろ
効率悪そうだなぁと思いつつ代替案が思い浮かばず・・・
なにか良い方法ありますか?
表示させたい順番に配列に入れればよろし
196 :
Name_Not_Found :2010/05/22(土) 14:59:34 ID:WnZ6qoN8
>>195 その方法だと表示の仕方はどうなります?
197 :
Name_Not_Found :2010/05/22(土) 15:05:11 ID:WnZ6qoN8
>>193 途中で処理が止まったとして、
整合性とれない気がします。。
私の理解が違うのかな?
>>197 途中で処理が止まったら仕方なくない?
非同期処理だからレスポンスの順番が変わってしまうってのが問題だと思ってたのだけど違う?
199 :
Name_Not_Found :2010/05/22(土) 15:31:49 ID:WnZ6qoN8
>>198 仕方ないですか・・・。
途中の100個まで処理が終わったけど、何かの理由で止まったとして、
順番に格納されるなら、その100個までは保存できるけど、
全ての処理が終わるまで順番は保障されないなら、
どっちにしろ最後まで待たなきゃいけないので。
async: false;
で想定の処理はできているんだけれど、やっぱり遅いんですよね。。
非同期処理にしたいけど、結果の順番は保証したいっていうのは、
矛盾しているのかな
>>199 例えば冗長化された2台のwebサーバでphpの処理をしていたとして、
「1台は超重い」「もう1台は超軽い」って言う状態があった場合に、
奇数番目のリクエストが1台め、偶数番目のリクエストが2台めって言っちゃうと、
多分初めの一つ目のリクエストがなかなか返ってこないよね。
その時にとりあえず偶数番目だけは表示したいってのなら非同期でいいけど、
1番目のレスポンスが返ってこない限り2番目以降は表示しないってのならそもそもphpに1回だけリクエスト投げた方がいい
そもそもPHP使わなきゃいけない処理のなのかな?
>>201 そこはスレ違いだからどうでもいいだろw
仮に二倍するような処理って書いただけで実際はもっと複雑なんだろうし。
いや、全部javascriptでできれば、悩み解決かなと思って。 ちなみに$("#loading").hide();はsuccessの中でlenの長さと結果の長さを比べて処理しないとダメだと思う。
順番に配列に入れるなら 必要な長さの空文字列の配列を作成 successのコールバックでインデックスを指定して配列に入れる 表示する時は毎回joinで全てテキストエリアを上書き
205 :
Name_Not_Found :2010/05/22(土) 15:54:17 ID:WnZ6qoN8
>>200 なるほど確かに。
>>201-202 実際やろうとしている処理は、
Webページの情報を一部とってくるという処理です。
なのでネットワークの遅延もあり200〜300の処理を1度のphpリクエストにしてしまうと、
ページ読み込み中がとても長くなってしまい、
最悪Timeoutすることも考えられるので、
Javascriptにしました。
順番を犠牲にすることも考えて、asyncオプションなしでやっているのですが、
>>187 のコードで言う、success:の部分(現在は助言を受けいかに変更しました)
success: function(ret) {
result.push(blahs[i] + "," + ret);
$("#resultForm textarea").val(result.join("\n"));
},
ここの、blahs[i]
がundefinedになります。
これは一体・・・??
data: "blah=" + blahs[i],
この部分はちゃんと送られているようなの(retで確認できている)ですが・・・。
resultがundefinedなんでは。
>>205 そのfunctionはコールバック関数だからそこでblahsを読もうとしちゃダメ
blahsのblahs.length番目の値を呼び出そうとしてるから期待してることはできないよ
なので、php側で貰った番号を返した方がいいって話。
json形式にしてもいいし、タブ区切りとかにしてsplitとかにしてもいいからレスポンスから抽出したら?
208 :
Name_Not_Found :2010/05/22(土) 16:06:40 ID:WnZ6qoN8
>>206 いえ、元データと結果をカンマ区切りで
結果テキストエリア(#resultForm textarea)に反映させているんですが、
結果はちゃんと元データに合ったものが帰って来ています。
Firebugで
result.push(blahs[i] + "," + ret);
にブレークポイントを設定しましたが、
データ数-1番目(ラストのデータが反映される前)に処理が止まる(ブレークする?)
209 :
Name_Not_Found :2010/05/22(土) 16:09:11 ID:WnZ6qoN8
>>207 なるほど。
知識が足りず完全には理解できないですが、
ちょっと仰る通りに書いてみます。
(理解はあとでw)
>>204 がいいんでない?
返るって来るのが遅いデータは空行になって、データ:結果は一致するんじゃないかな。
>>193 自分で試してみたら、このハッシュの返し方イマイチだったわ
{
index: 1,
val: 6
}
とかの方がrespons.indexとかで拾えるから楽なんだった
212 :
Name_Not_Found :2010/05/22(土) 16:54:29 ID:WnZ6qoN8
>>207 +
>>204 で良い感じにできました!!
ありがとうございます!!
#loadingの処理をやってきます
213 :
Name_Not_Found :2010/05/22(土) 17:51:21 ID:WnZ6qoN8
>>203 あれ?#loadingの処理ってsuccessの中じゃだめですよね??
214 :
Name_Not_Found :2010/05/22(土) 18:02:08 ID:3I72MqYc
先日ホームページビルダーを使っているといった者ですが、 色々本を調べてみると、jQueryを正式にサポートしたマイクロソフトの無償ツールがあるようです。 Visual Web Developer 2008 Express Edition これを使ってみようかと思います。
ゴミを捨てて地雷を買うのかww jQueryの話になってるので便乗するけど、 $('map').append('<area />'); ができないんだけど、みんなできる? 1.2.6なんだけど。
>>215 Firefoxで試した
1.2.6できない
1.3.1できない
1.4.1できる
mapとか使わんわ
218 :
Name_Not_Found :2010/05/22(土) 23:15:27 ID:3I72MqYc
>>215 visual web developerはサーバーとかも選ばなければいけないから考え直した方がいいかもしれない。
firebug+firefox+jQueryがベストな組み合わせってことかな?
>>216 ぐはぁっ
やっぱりか・・
mapはjQuery使わずやるか・・
mapも使いこなせないカスがいるのか
そう自虐的になるなよ
222 :
Name_Not_Found :2010/05/23(日) 02:17:16 ID:NcQDOKca
FireFox3.6.3,WinXP-Proです すいません。AAとJavaScriptを組み合わせた(と思われる)アニメで質問です。 一ヶ月ほど前、鳩山首相がUFOにに乗ったAAがブラウザ内を左右に動くコード(スクリプト)を 見つけたのですが、保存し忘れて手元にありません。 どなたかお持ちの人いますか?
作れ
作ろう
>>180 説明ありがとうございました
結局少し仕様を変更する事にしたのですが、少々テキストファイルの読み込み等で質問があります。
上で記載した感じで、最終的にセレクトリストで選択した物、例えば"短剣"を元に、外部ファイル"item.text"から
一行ずつ読み出してその中に一致している文字列があれば指定文字毎に読み出してHTMLのテーブルに表示させたいと思っています。
このプログラムに必要な要素について説明されてるサイト等を教えていただけないでしょうか?
もしくは上記プログラムに必要な要素を教えていただけないでしょうか?
参考情報
・item.text
木炭,1,木材\n
銅,1,木炭,2,銅鉱石\n
青銅,1,錫,1,銅\n
鉄,1,木炭,2,鉄鉱石\n
短剣,3,鉄,1,木材\n
このテキストファイルを読み込んで下のように表示させたい(┳、━、┗等はとりあえず分かりやすくするために記載)
短剣┳鉄[3]┳木炭[3]
┃ ┗鉄鉱石[6]
┗木材[1]
※上の図は短剣で検索された行を読み込んだ後、さらに鉄を検索して材料と必要個数を表示。
すいません、グダグダと書きましたが ・外部ファイルから1行読み出し ・長い文字列と指定された短い文字列の一致判定 ・指定区切り毎の読み取り の3点がおそらく自分が理解してない事だと思っているため、よろしくお願いいたします。
227 :
179 :2010/05/23(日) 05:03:57 ID:???
jQueryで済む程度なら、今はXHRのブラウザ差なんかほとんどないけどな
jQueryはほとんどの差すらないからな
それはない。まじで
>>227 他に慣れた言語があるなら、そっちでitem.textをJSONモドキのitem.jsに変換して
<script src="item.js">で一発ロードしたほうがなにかと楽
もし他言語使えないのなら・・・JSから生成するとなると結局XHRに頼ることになるから
キャッシュ的効果しか意味ねーな
手作業での変換はミスの元だし
>結局XHRに頼ることになる textareaにぶち込んでおく方法を忘れてた
>>227 レス感謝です
テキストファイル読み込むのって結構ややこしいんですね・・・と思ったのですが、ちょっと勘違いをされてる可能性があるので
補足しておきますが、テキストファイル自体はサーバー側にあるものを読み込みます。
作りたい物としては、ゲーム内でのアイテム生産時の必要材料の個数等を表示させるものです。
まず材料か製品か、次にそれぞれで何を作るか(武器、防具、消耗品等)、その後どの生産レベルの物を作るか、最後に品名を選択。(セレクトリスト自体は計4つ)
このリストを順に選んでいき、最終的に作る品名を選択した時点で下の適当な位置に
>>225 の下の図のような感じで必要な材料と個数を表示させるというものです。
処理としては、品名を選択したらテキストファイルを読み込み、1行取り出し、その行内に品名と同じ文字列があるかどうかを確認、
一致するものがあれば先頭からカンマ区切りで配列に読み込んでいき、配列の3つ目、5つ目、7つ目、11つ目、15つ目がある場合にその文字列を元に再度ファイル先頭から
1行ずつ読み込み確認していく。
これで最終的に原料(生産物で無い物)までを配列に格納され、後はそれを順に書き出す。
テキストファイル内の書式
アイテム名 , 材料1個数 , 材料1 , 材料2個数 , 材料2 , 材料3個数 , 材料3 ・・・ \n
この他に材料の個数自体を計算する処理とかがありますが、このあたりは省きます
失礼しました・・・テキストファイル自体がJavaScriptじゃ読み込めないんですね・・・。
JavaScriptでテキストファイルを読みこむ事はできるよ?
>>227 をよく読んで調べるといい
あと、
>>235 の処理だと、連想配列にIDを入れて再帰的に処理した方が楽な気がする
>>225 の例で行くと、item.textを適当に書き換え
{
"001":{"name":"木炭","item1":"木材","quantity1":1,"id1":"006"},
"002":{"name":"銅","item1":"木炭","quantity1":1,"id1":"001","item2":"銅鉱石","id2":"007","quantity2":2,},
"003":{"name":"青銅","item1":"錫","quantity1":1,"id1":"008","item2":"銅","id2":"009","quantity2":1},
"004":{"name":"鉄","item1":"木炭","quantity1":1,"id1":"001","item2":"鉄鉱石","id2":"007","quantity2":2},
"005":{"name":"短剣","item1":"鉄","quantity1":3,"id1":"004","item2":"木材","id2":"006","quantity2":1}
//木材・鉄鉱石・錫・銅がなかったので勝手に追加
"006":{"name":"木材"},
"007":{"name":"鉄鉱石"},
"008":{"name":"錫"},
"009":{"name":"銅"},
}
これを読ませて、itemの記述があったらidを元にこの連想配列を再帰的に読みに行くようにすればいいと思う
>>238 わざわざリレーショナルにしなくてもこれでいいんじゃない?
{
"木炭": { "木材": 1 }
"銅": { "木炭": 1, "銅鉱石":2 }
}
木材等の元素的な素材はデータにないようだから
それを逆に使って、undefinedが返ってきたら再起しない
240 :
Name_Not_Found :2010/05/23(日) 15:13:40 ID:ANV2IBSs
FirefoxでWinXP使用。 文字コードで質問です。 ※タグの記号がLive2chのプレビューでは消えてしまうので、[〜]で代用しています。 WebにあるCanvasサンプルで[meta charset="utf-8"/]のものがありますが、 これを含むHTMLをローカルに保存し、Firefoxで再生すると毎度文字化けになります。 しかし、同じFirefoxでも[meta charset="Shift-JIS"/]にするとOKです。 なぜこうなってしまうのでしょうか?
多分ファイルそのものの中身と一致してないんだろう とりあえずそのページのURL出してみなよ
>>213 見てるか分かんないけど一応。
successの中に書かないと結果が返って来る前に、$("#loading")がハイドされちゃうんじゃ?
243 :
240 :2010/05/23(日) 18:32:27 ID:???
試してみて文字化けにはならないけど。 使ってるFirefoxのバージョンは?
245 :
240 :2010/05/23(日) 19:14:38 ID:???
>しかし、同じFirefoxでも[meta charset="Shift-JIS"/]にするとOKです。 なんだからShift-JISで保存してるだけでしょ。 utf-8で保存し直しなさいな。
247 :
244 :2010/05/23(日) 20:27:12 ID:???
>>245 Firefoxのバージョンはうちと同じだな。
文字コード変換をする変なテキストエディタとか介したりしてない?
248 :
Name_Not_Found :2010/05/23(日) 21:01:38 ID:KwnuKgRY
今書いてる文字のエンコードがなんなのかわからなくなる エディタは使いづらいね。
メモ帳の自動改行は罠
251 :
240 :2010/05/23(日) 21:39:21 ID:???
すいません。メモ帳を使っています。
>>246 utf-8で保存すると文字化けするので質問しました。
252 :
240 :2010/05/23(日) 21:53:05 ID:???
>>246 申し訳ないです。
「utf-8で保存」というのは、XPでの保存でのことですね。
保存時に文字コードをUTF-8にしたところOKでした。
※つまり、私のミスです。
連想配列の添え字ってスペース使えましたっけ?
何でも好きなもん使いやがれ
255 :
Name_Not_Found :2010/05/23(日) 23:25:31 ID:DN94CcL2
質問させてください。 ネット対戦のオセロゲームを作ろうと思うのですが、 クライアント側はjavascriptを使うとして、 サーバ側はどんな言語がいいでしょうか? また、その場合その言語と、javawscriptとの連携について書いてある本がありましたら教えてください。
>>255 javascriptがサーバ側を意識することはないから自分のやりやすい言語でやったらいい
つまり
>>254
257 :
Name_Not_Found :2010/05/24(月) 02:45:19 ID:uvViwiyS
Firefox3.6のWinXP-Proです。 Canvasで<canvas id="canvas1" width="300" height="300"></canvas> として、この中に外部JPGを読み込むにはどうしたら良いでしょうか? 最終的には外部JPGをXY平面内で移動させて、その軌跡を -------- | | -----------☆ という感じで描きたいので、先ずは読み込むところから始めたいです。 ※Googleで[JavaScript Canvas 画像 挿入]とかで調べましたが分かりませんでした。
var x = 150, y = 150; var canvas = document.getElementById('canvas1'); var ctx = canvas.getContext('2d'); var img = new Image(); img.onload = function() { ctx.drawImage(img, x, y); }; img.src = "hogehoge.png";
259 :
257 :2010/05/24(月) 08:23:00 ID:???
260 :
257 :2010/05/24(月) 08:46:09 ID:???
駄目でした。
外部画像じゃなく内部画像でやってみ
var canvas = document.getElementById('canvas1'); var img = new Image; img.addEventListener('load', { x:150, y:150, ctx:canvas.getContext('2d'), img:img, handleEvent: function(e) { this.ctx.drawImage(this.img, this.x, this.y); } }, false); img.src = "hogehoge.png";
263 :
257 :2010/05/24(月) 10:20:12 ID:???
>>260 テメエ! IDが出ないからって勝手に俺になりすますなよ!
この板ではこんな行為が常識なのか?
264 :
257 :2010/05/24(月) 10:47:23 ID:???
>>263 はい。Web製作板なんですから,偽者くらいは当然分かっていて,
サワヤカに「xxxは偽者です,やってみたところ,,,」とか
流してください。
>>263 怒るぐらいならいまからでもID出せよ、sageなくていいからw
265も言ってるけど、試してみますじゃなくて試したッ!なら使ってもいい
>>298 ,239
レス感謝
すいません、とりあえず態々別のファイルにレシピを作らず、もう1ページの中にそのような感じで
全部書き込んでしまうことにしました。
そっちのほうがややこしくならずに済みそうですし・・・。
ところでその{}内の要素の間にある : の意味って何なんでしょうか?
それと、今作ってるページがこれです
http://owakari.web.fc2.com/seisan.html このセレクトリスとの下に4番目のセレクトリストを選択し終えた後、動的に・・・というんでしょうか、
アイテムを選ぶ毎にレシピが表示されるようにしたいのですが、document.writeで表示させてやろうかと
思うもその方法だと別のページに切り替わってしまいます。
これを切り替わらずに表示させる方法を教えていただけないでしょうか?
>>268 基礎中の基礎、ObjectリテラルとinnerHTMLを勉強してこい
270 :
Name_Not_Found :2010/05/24(月) 17:37:19 ID:zoDm4VZU
a = b || c って書き方は三項演算子みたいに特別な呼び名が付いていたりしますか?なんて名前ですか?
>>270 何それ・・・?
a == b || cならまだわかるけど
その式はプログラムとして成り立つの?
どういう使い方をするのかぜひしりたいわ
bが真ならbを、bが偽ならcを代入 論理演算子だからってbooleanが返ってくる仕様とは限らない あと優先順位は押さえとけ
<script> var a,b,c; a=b||c;b=true;c=false; alert(a); </script> undefinedになったけど
undefined = undefined || undefined; なにがしたいんだ
277 :
275 :2010/05/24(月) 18:20:17 ID:???
ああ、ごめん a=b||cをc=falseの後に変えたらできたわ 三項演算子の簡易バージョンみたいなものなのね 勉強になりますた
>>275 そりゃそうだ
var a, b, c;
b = true; c = false;
a = b || c;
にすればOK
>>275 引数に初期値を持たせたいときとか
function func(var) {
var = var || 'test';
}
覚えておくとだいぶ楽になるよ
280 :
Name_Not_Found :2010/05/24(月) 18:30:30 ID:cQZ0loD8
>>277 >三項演算子の簡易バージョン
いや、ただの(論理)演算子だよ。
+とか-とかと立ち位置的にはかわらん。
281 :
275 :2010/05/24(月) 18:32:28 ID:???
論理演算子って条件式以外で使ったことなくて・・・ 変数にも使えるのは知らなかった
「変数(代入文?)にも使える」という認識からなにか歪んでる 原則として文は式から構成される、条件式もただの式、代入文の右辺も式 逆に言えばif文の条件部は式が許されているから論理演算を含めることができている ついでに単純なif文も flag && func(); や flag || func(); で可能 if (flag) func(); if (!flag) func(); で済むから使う必要ないけど 評価がどのような流れで行われているかを知っておくと無駄な関数実行を減らせる
漢字が変数名にできちゃうようなJavaScriptでも さすがに予約語は無理だわ
>>279 それだと引数が与えられた場合も無駄に代入が行われてしまう
素直に if (!arg) arg = 'default'; の方が良いよ
変数名に使えない文字列を予約語って言うのかしら
なるほど、変数名だけじゃなくてプロパティ名にもラベル名にも使えないってことね。 言われてみれば当たり前の話だけど、厳密性は厳密性で大切だよな。指摘ありがと!
<script type="text/javascript">
<!--
var x=1; //製造時の個数
var list = new Object();
list["木炭"] = {"木材:x*1};
list["銅"] = {"木炭":x*1,"銅鉱石":x*2};
for (i in list["銅"]) document.write( i + ':' + list["銅"][i] + ' ' );
//-->
</script>
こういう感じで書いているのですが
>>238 ,239の内容はこういう事でいいんでしょうか?
あとなんとなくは分かるのですがundefinedが返ってきた場合に再起しないってどういう感じのことでしょうか?
list["銅"] = {"木炭":x*1 + {"木材":1}, "銅鉱石":x*2};
みたいな方法でやろうと思ったけど内側のメンバ名と値が読み出せないし・・・
>内側のメンバ名と値が読み出せない それをするのが再帰 list["銅"]の処理中に木炭に出会う、そうしたらlist["木炭"]で銅と同様の処理をする 末端に辿り着くまで内側へ内側へと同じ処理を繰り返す さて、そうなるとlist["木炭"]の処理中にlist["木材"]をやることになるわけだけど どんな値が返ってきて、それに対してどう処理すればいいか考えてみてくれ
>>285 意外なことに、ベンチとってみると差がない。むしろ論理演算子のほうが速いくらい
>>286 定義が逆だ。キーワード、予約語だから識別子(変数名など)に使えない
enumという変数を使っててエラーが出て原因がわからず ハマった経験あり。 予約語だった。
293 :
Name_Not_Found :2010/05/24(月) 22:58:57 ID:8mTzTcMg
文字列中の数値を比較するのに 下記の方法より簡単な方法ってありませんか? var a = "number_20"; var b = "number_3"; var x = a.replace("number_", "")-0; var y = b.replace("number_", "")-0; alert(x > y); //true
>>290 分かりやすいレス感謝
for inで繰り返す処理の中で、取得したメンバ名を使ってさらにfor inさせてやることでうまくいけました。
あとは上で言われたinnerHTMLについてもう少しよく調べればなんとかなりそうです。
ありがとうございました
>>293 こんな感じか?と思ってやったもののむしろ行が増えたわ
var str2int = (function() {
var re = /[0-9]+/;
return function(str) {
return parseInt(re.exec(str)[0]);
}
})();
var x = str2int(a);
var y = str2int(b);
function str2int(str) { return parseInt(/\d+/.exec(str)[0]); } これで十分だろw
>>296 おぉw初め関数にしないで2行で書いてたからそのまま変数残してた。無駄なクロージャだったな
parseInt使うと先頭に0が入ってたときに
>>293 と動作が変わるな
299 :
Name_Not_Found :2010/05/25(火) 02:26:45 ID:fV4wwzYu
質問いたします。 var data = { test1: { year: 2010, month: 5, day: 25 }, test2: { year: function(){ alert(new Date().getFullYear());}, month: function(){ alert(new Date().getMonth()+1);}, day: function(){ alert(new Date().getDate());} } }; for(var i in data.test1){ alert(data.test1[i]); } for(var i in data.test2){ data.test2[i]; } 最初のループでは当たり前ですが順番に「2010」「5」「25」と出力されます。 では2番目のループでも順番に「2010」「5」「25」(今日の場合)と出力させたい、 つまり、順番にメソッドを実行させたいのですが、どうすればよいでしょう?
data.test2[i]();
hashのfor inは順番が保証されてなくね?
302 :
299 :2010/05/25(火) 02:59:57 ID:fV4wwzYu
>>300 ありがとうございます。
こんなに簡単なことだったんですね。
×302 ○301
セレクトリストから選択した値を知るにはどうすればいいのでしょうか?
306 :
Name_Not_Found :2010/05/25(火) 08:22:37 ID:G+Tv2IlL
selected index値しか取れないならindex値をswitch文でセレクトvalue値決め打ち
決めうちってなんだ
308 :
Name_Not_Found :2010/05/25(火) 13:42:25 ID:babe/xjj
select.valueは安易すぎか。 select.options[select.selectedIndex].valueっていつも書くけど。
IEの挙動がよくわからん position:absoluteで要素を重ねて置くと、下に隠れている要素のtextやborderだけが 上に見える要素のイベントリスナーを無視してマウスイベントを受け取るんだが
IE無視しようぜ
>>311 同意したいところだ・・・('A`)
#少なくとも自分で出来ると言ったことは実行してくれ>IE
>>310 似たような症状を経験したことがある。
なぜかclickイベントだけが発生しなくて、mouseupで代用した。
なんとかScript側でIEを他のブラウザの動作に合わせられないものか・・・。 <html> <head> <title>test</title> <style type="text/css"> textarea { width: 200px; height: 200px; margin-top: 200px; } #red { border: solid 4px #000000; background-color: red; width: 50px; height: 50px; position: absolute; left: 50px; top: 50px; } #red:hover { cursor: pointer; background-color: blue; } #transparent { border: solid 4px #000000; width: 200px; height: 200px; position: absolute; left: 0px; top: 0px; } </style> <script type="text/Javascript"> window.onload = function() { var t = document.getElementById("textarea"); document.getElementById("red").onclick = function () { t.value = "red Click\n" + t.value; } document.getElementById("red").onmouseover = function () { t.value = "red Mouseover\n" + t.value; } document.getElementById("red").onmouseout = function () { t.value = "red Mouseout\n" + t.value; } document.getElementById("transparent").onclick = function () { t.value = "transparent Click\n" + t.value; } document.getElementById("transparent").onmouseover = function () { t.value = "transparent Mouseover\n" + t.value; } document.getElementById("transparent").onmouseout = function () { t.value = "transparent Mouseout\n" + t.value; } } </script> </head> <body> <div id="red" style="position: absolute;">red</div> <div id="transparent">transparent</div> <textarea id="textarea"></textarea> </body> </html>
IE「無駄無駄無駄無駄無駄無駄無駄ァ!」
ページ中の特定の文字列の背景色を変更したいのですが どのようにしたら良いでしょうか?
>>316 <span>で囲んでCSSを設定する。
<FONT bgcoloe=”red”>www</FONT>
www
320 :
Name_Not_Found :2010/05/26(水) 15:27:16 ID:EnY05hZT
jquery.csv2table.jsでcsvファイルを読み込んで表示しているのですが ブラウザでキャッシュを無効にしてなければ初回表示にhtmlファイルとjsファイルをキャッシュすると思うのですが csvファイルもキャッシュされるのでしょうか?
いいえ
>>321 ありがとうございます。
キャッシュされるようにしたいのでhtmlに埋め込んで作ることにします
323 :
Name_Not_Found :2010/05/26(水) 19:57:05 ID:lrmtaB3m
bokuno koto sonnani kirai desuka? -- Bill (Gates)
いや普通キャッシュされるだろ、と思ってソースコード見てみたら あえてキャッシュが効かないようにしてるのか。 ライセンスはpublic domainって書いてあるから、 > $.get(url+"?"+(new Date()).getTime(),"",function(data,textStatus){ この行を > $.get(url,"",function(data,textStatus){ に書き換えれば多分ブラウザにキャッシュされるようになる。 試してないけど。
Twitter APIの日付フォーマットが "Wed May 26 13:48:16 +0000 2010" っていう形なんですが、 これを "2010-05-26 22:48:16" (日本時間は+9時間後) に変換したいです。 var str = eval("(" + "{time:'Wed May 26 13:48:16 +0000 2010'}" + ")").time; str = str.replace(/\w+ (\w+) (\d+) (\d+):(\d+):(\d+) \+\d+ (\d+)/, "$1, $2 $6 $3:$4:$5 GMT+0900"); var dt = new Date(new Date(str).getTime() + (1000 * 60 * 60 * 9)); alert(dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate() + " " + dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds()); こんなに面倒なことをしなきゃダメですか?
>>325 evalがひどい…
まあ、それは置いといて、IE以外で良いなら
var dt = new Date('Wed May 26 13:48:16 +0000 2010');
でOK。IEも+の前にUTC入れるくらいで動くんじゃないかな。未検証。
328 :
325 :2010/05/27(木) 10:54:34 ID:???
>>326 ありがとうございます。
いろいろ試したら、"+0000"を"UTC"に変えるだけでいいみたいです。
ちなみにIEです。
(〜略〜)
var str = "Wed May 26 13:38:16 +0000 2010";
// 上は実際には下のように取り出す
// var str = eval("(" + $(this).attr("data") + ")").time; // JSON文字列を取得するのでevalしてtimeプロパティを取り出す
str = str.replace("+0000", "UTC");
var dt = new Date(str);
alert(dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate() + " " + dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds());
(〜略〜)
329 :
Name_Not_Found :2010/05/27(木) 11:25:12 ID:tsfcljst
お遊び 最後の出力のところで yy-mm-ddがyy年mm月dd日という表記でもいいなら これが一番簡単。 javascript:(function(){alert(new Date("Wed May 26 13:38:16 UTC 2010").toLocaleString());})(); javascript:(function(){alert(new Date("Wed May 26 13:38:16 GMT 2010").toLocaleString());})(); UTCとGMTの違いをあんまり理解してないが。
イベントリスナーってたえずイベントターゲットとイベントタイプを見張り続けているんですか?負荷が掛かるんですか? (¬¬)ジー…→ イベントターゲット&イベントタイプ ↑ イベントリスナー
ただのコールバック 見張り続けなくてよいようにイベントという仕組みがある 厳密に言えば、ハードやOSやブラウザがイベント対象を常に見張り続けてるから イベント(コールバックの実行)が発生しなければそれ以上の負荷は起きない
>>331 どうもありがとうございますm(_ _)m
巨大な画像を読み込むとき、 上から順にだんだんと表示されていったり、 白紙のページになり砂時計が出て、しばくらしたらぱっと画像がでてきたりします。 ブラウザの挙動によって異なるのか、画像形式によって異なるのかは調査中なのですが、 画像より後ろにあるソース(普通のテキスト文章など)の邪魔にならずに、 テキストは全て先に表示し、画像を読み込んでから別途表示するようにしたいのですが、 何かヒントをください。 画像読み込み中は、そこの部分に画像が出てくるよということを知らせるために、 ローディング%も表示したいのですがどのように実装するのかそれも併せてヒントいただけるとうれしいです。
>画像より後ろにあるソース(普通のテキスト文章など)の邪魔にならずに よくわからん。 画像の読み込みでレイアウトが変わらないようにしたい?? ならimgにサイズ指定 >ローディング表示 javascriptで実装しているのをおれは見たことがないな。
pixivの迷惑スクリプトみたいな奴か
337 :
Name_Not_Found :2010/05/27(木) 19:01:52 ID:Zu16xlQ7
人気馬を飛ばしたら さっさと死ね目暗と言われること間違いなし
for(){ func() } function func(){ /* hoge */ } func(); function func(){ for(){ /* hoge */ } } それぞれどっちがどうですか?何か良いこととか悪いこととかありますか
/* hoge */の処理を使い回すなら上 ループごと使い回すなら下
それだけで判断しろと言われたら後者 関数呼び出しはコールスタック云々で少なからずオーバーヘッドがある 実際には名付けることに意味を求めたり、必ずしもループが必要ではなかったり ループ条件のパラメタで引数が煩雑になることを避ける等で前者を選ぶこともあり得る
(function(f) { return (function(g) { return function(m) { return f(g(g))(m); }; })(function(g) { return function(m) { return f(g(g))(m); }; }) })(function(f) { return function(n){ return (n < 1) ? 1 : n*f(n-1); }; })(10); これでグローバル汚染せずに10の階乗が求められるらしいのですが return functionだらけで意味が分からないんです 誰か解説してください
function f1(str) { alert(str); } f1("hoge"); f2 = function(str) { alert(str); }; f2("hoge"); この二つがほぼ同じ var f3 = () { return function(str) { alert(str);}; }; f3()("hoge"); f3()の返値はf2と同じだから f2("hoge") と ( f3() )("hoge") も同じ あとは自分で考えてくれ
arguments.calleeと名前付き関数式で書き換えろ
>>342 無駄を省いていったらこーなった。
(function(n) {
return (n < 1) ? 1 : n * (function(m) {
return (m < 1) ? 1 : m * arguments.callee(m - 1);
})(n - 1);
})(10);
てゆーか、これでいいのか。 (function(n) { return (n < 1) ? 1 : n * arguments.callee(n - 1); })(10);
やりたいこと: 自分のデスクトップに置いたファイル、 file:///myportal.htmlから、ある種のマッシュアップによる 俺様ポータルが作りたい。 フレームで他のページの美味しいところを混ぜ合わせるだけね。 Greasemonkeyでもできるっぽいけど、ブラウザの中をいじりたくない。 1、フレームでいろんなポータルをひとつのページに張り込んだとします。 よそのフレームの中のDOMツリーって、myportal.htmlの中のJavascript から書き換えられますか? 2、フレームとフレームを、縦横分割じゃなく、上下に重ねられますか? できれば、半透明合成で重ねあわせができるとうれしい。 3、どこかをクリックすると、フレームの中がフレームから独立し、 (独自のタブとかの)普通のページになる、、、というのはできますか?
speeddialでいいんじゃね
>>348 んまあ、正しいんですが、
いろいろイジってみたいお年頃なんですよ。
とりあえず、
1、お気に入りのサイトの美味しい所を張り合わせる。
(ここまではSpeedDialでも可能)
2、それぞれのサイトのDOMツリーをmyportal.html内部のJavascript
から書き換えて、
自分なりにカスタマイズする。
「2」がやりたいんですよ。
もちろん、Stylish/Grease
でも可能ですが、myportal.htmlの<script>からじゃ無理?
別のフレームのDOMを見る方法ってないの?
アクセスできるというのは逆向きにアクセスされるってことでもあるからなぁ ブラウザとしては許したくないだろうね gmのunsafewindowがunsafeな理由もそのへん
「イベントがバブリングする場合、親要素でイベントを監視する」 の意味が分かりません。簡単なサンプル書いていただけないでしょうか?
>>350 親フレームから子フレームの場合のみアクセス可能、
とかって無理?
あ
>>354 うーん。ローカルのファイルからならできる、とか例外ないですか?
グリモンっていう解法にあるのにこだわりや縛りを見せるなら自分で探せよ
どうしても分からないので質問です。 var msg = (function() { var gb = "なのだ" + "。"; return function(str) { return (str + gb); } })(); と function msg(str) { return (str + "なのだ" + "。"); } では、効率上違いはあるのでしょうか?
差はあるけどその例なら誤差
つーか上と下じゃ用途が違うんじゃないか
無名関数が変数をホールドしてしまうから、上の方が不利かな
javascript:(function() {var max=10; var z=document.links; var t='/search?q=cache:'; for(i = 0; i < z.length && 0 < max; ++i) { if (z[i].innerHTML && z[i].href.indexOf(t) != -1) { void(window.open(z[i].href)); max--;} }}) (); 拾い物のブックマークレットなのですが、 これをjavascriptに変換していただけないでしょうか? お願いします
すいません、.jsで保存してブラウザでjavascriptとして利用したいのです。
.jsで保存してブラウザでjavascriptとして使えばいいのでは?
ああ〜、確かにそうだ>< sleipnirで使える.jsにして欲しいのです 必要な情報を書かなくて申し訳ないです
sleipnirで使える.jsにして使えばいいと思うよ
普通に使えるけど?
>>369 まじっすか!
そのままjsで保存するとdocumentが宣言されてませんと出るのですがやり方間違ってますかね?
知らんがな
sleipnir使うやつっているんだ
すいません、的外れな質問だったようなのでもう諦めます・・ スレ汚し失礼しました!
374 :
Name_Not_Found :2010/05/30(日) 14:02:09 ID:RYoMC4t5
普通に使えるだろ つーかレイプスレで聞いた方が早いかと
もし条件に合わなければ与えられた引数をそのまま返す関数って無駄ですか? 条件に合った場合は処理して返すんですが関数を通す前に振り分けるものですか?
>>375 関数の性質によると思うけど、よくあるよ。
その関数を何個も呼び出すことを考えたら毎回関数を呼び出す時に条件を書かないといけない。
そう考えたら関数の中でやった方が楽でしょ
>>376 どうもありがとう
説明されて納得できました
378 :
Name_Not_Found :2010/05/30(日) 15:30:51 ID:8zkkHols
すいません1から100までの範囲でフィボビッチ数列を表示するjavascriptのサンプルコードがどこかであったのですが ご存知の方いらっしゃいませんか?
ここは探し物のスレではないので、自分で作って分からない所があったら聞きに来るのが良かろう
あんまスマートじゃないがこんな感じじゃね 最初の0と1は手動で入れてる var a = new Array(); a.push(0); a.push(1); while(1) { a.push(a[a.length-1]+a[a.length-2]); if (a[a.length-1] >= 100) { a.pop(a[a.length-1]); break; } } alert(a);
381 :
Name_Not_Found :2010/05/30(日) 17:09:44 ID:RYoMC4t5
ジャパネットたかたのCMの節で。 ♪フィ〜ボナッチ フィボナッチ ピサのレオナルド あだな〜
スポポビッチって奴が居たな 由来はなんだったんだろうか
スッポンポンなbitch
スポポビッチとヤムーの名前の由来がわからない セットで行動してるから同系の由来だろうとは思うけど検索しても的外れな予想しか書いていない 同時期に出てきた敵はみんなおまじないの合言葉
スポポビッチはスポポの息子。 スポポは型抜きガム。 ヤムーは菊池桃子。
駐車場を写した写真上をクリックすると駐車場上の座標が返ってくるというものが作りたいのですが、 難しすぎて分かりません・・・。 引数に駐車場の広さ、写真上の座標、そして3D空間上のカメラ位置の情報が必要な事は想像できるのですが、 具体的にどのようにしてカメラ位置の情報を取り、どのような計算式が必要なのでしょうか・・・?
>>387 そんなすげえ物をここで聞いて作るの?
原点に返ってクリッカブルマップにでもしてはどうでしょう。
Googleに入社してください
390 :
Name_Not_Found :2010/05/31(月) 14:32:33 ID:e8Nmbw7s
下記のコードでナビゲーションのマウスオーバーとマウスアウトの 状態を表現しているのですが、現在表示されているアクティブページの時に、 backgroundPosition:0 -90pxにしたい場合はどのようなコードを加えればよろしいですか? <script type="text/javascript"> //<![CDATA[ jQuery(function(){ jQuery('#GlobalNavigation a') .css( {backgroundPosition: "0 0"} ) .mouseover(function(){ jQuery(this).stop().animate({backgroundPosition:"(0 -45px)"}, {duration:350}) }) .mouseout(function(){ jQuery(this).stop().animate({backgroundPosition:"(0 0)"}, {duration:250}) }) }); //]]> </script>
if(アクティブページなら) jQuery('#GlobalNavigation a').css( {backgroundPosition: "0 -90px"} ) これええやん ifの条件は自分で書け
392 :
Name_Not_Found :2010/05/31(月) 14:54:26 ID:mVgMTzVr
>>387 >どのような計算式
サラッと一言で聞いてくるなあ。
「足し算です」みたいな簡単な答えで済むのを期待している?
3D空間上のカメラ位置ってのがよくわからん
マウスアウトで00に戻るな
じゃあifのとこで条件分岐させとけばいいんじゃね
396 :
Name_Not_Found :2010/05/31(月) 15:06:45 ID:e8Nmbw7s
>>394 そうですね。00に戻ってしまいます。
>>395 詳しく教えていただけませんか?
初心者で申し訳ないです。
>>390 程度のことを質問しないとわからない時点で
ソースコピペ確定だろ
少しは自分で勉強してこいと言いたいと言っておく
jQuery(function(){ if(アクティブページなら) { jQuery('#GlobalNavigation a').css( {backgroundPosition: "0 -90px"} ) } else { jQuery('#GlobalNavigation a') .css( {backgroundPosition: "0 0"} ) .mouseover(function(){ jQuery(this).stop().animate({backgroundPosition:"(0 -45px)"}, {duration:350}) }) .mouseout(function(){ jQuery(this).stop().animate({backgroundPosition:"(0 0)"}, {duration:250}) }) } });
399 :
Name_Not_Found :2010/05/31(月) 15:12:09 ID:e8Nmbw7s
>>397 自分の作成したサイトからのコピペですが・・・・
>>396 jQuery('#GlobalNavigation a').each(function() {
var pos = jQuery(this).hasClass('active') ? '0 -90px' : '0 0';
jQuery(this).css({ backgroundPosition: pos }).mouseover(function() {
jQuery(this).stop().animate({ backgroundPosition: '0 -45px' }, { duration: 350 });
}).mouseout(function() {
jQuery(this).stop().animate({ backgroundPosition: pos }, { duration: 250 });
});
});
jsでやるもんじゃねーけどな
別のサイトのHTMLを張り込みたいんだけど、どうしましょう?
具体的には、こんな風。
----
<SCIRPT>俺様スクリプト</SCRIPT>
<!-- 以下は、他サイトから頂き-->
<!--#exec wget -O -
http://www.famous_site.com/index.html >
(以下は、SSIの実行結果)
<html>
有名サイトのHTML
</html>
----
404 :
403 :2010/05/31(月) 17:14:09 ID:???
あ、当然ですが、 403の例(SSIを使えば簡単)を、 Javascriptのみでどうやるか、ってことです。 他のサイトのHTMLをべたっと貼り付けるJSってないんですか?
クライアントを踏み台にするんか
セキュリティ制限で無理 サーバサイドでやれと
407 :
403 :2010/05/31(月) 17:21:26 ID:???
やっぱ不可能なの?
インナーフレームでやればいいじゃん ていうかフィッシングですか?
409 :
403 :2010/05/31(月) 17:39:18 ID:???
フィッシングじゃない。 やりたいのは、 スーパーグーグル!とかいって、 ようは、グーグルの検索ページにボタンをいろいろつけたやつ。 グーグルのHTMLをそっくり頂いて、 あとは、俺様JSでボタンをつけるだけ。 どうだ、安直だろ? インナーフレームだと、 検索結果のページにいったときにURLが変にならないですかね。
好きにしたら?
それなら何もそっくり頂かなくたって google?ie=hoge&q= な form を置いて、 ボタンでサーチクエリを変動出来るようにすればすればいいだけじゃん なんでフィッシング紛いのことするのか分からん
youtubeに字幕入れるのと同類な寄生サイトか 他社のコンテンツの流用サイトはやめたほうがいいぞマジで
ユーザースクリプトを配布するとええよ
414 :
Name_Not_Found :2010/05/31(月) 20:44:14 ID:mVgMTzVr
GoogleMini使えよ。 期待している以上のこと出来るよ。
無名関数/クロージャ/prototypeあたりを使ったことが無いのですが これらを理解すると何か得することはありますか?
ありますよ
JScriptでJAVAをエミュレートするものを作ろうとしているのですが 24GHzあれば処理落ちしないで動作しますでしょうか 32GHz、48GHzではどうですか?
>>403 真っ赤wwwwwwwwwwwww
人気者だなw
>>417 Javaをエミュレートってのは、バイトコードを実行するVMを作るって事?
リッチなツールチップとかリンク先のサイトのスクリーンショットとかポップアップする機能の ポップアップされる要素はdocument.body直下に入れてポップアップさせるのが普通ですか? それともポップアップを呼び出すイベントを起こしたターゲット要素直下に入れてポップアップさせるのが普通ですか?
「普通」のライブラリのソース読め、せめてDOMインスペクタ使って挙動調べろ 百聞は一見にしかずだ
>419 その場その場である程度の関数だけエミュできれば大丈夫です
その場その場ってなんよ。 どっちにしてもバイナリで読み込むんじゃろ
>>417 その「エミュレータ」という言葉は正しい意味で使っているのか。
: ある機械部品やソフトウェアを動作させるのに、オリジナルの
: システムを用意するのが難しい場合に、オリジナルと全く同じ
: 動作をするより簡便なシステムを用意することがある。
: この装置をエミュレータと言う。
この場合、Javaをエミュレーションするということは、Javaバイト
コードには手を加えずにそのまま動くようなJVM(Java仮想マシン)を
作る、という意味になると思うんだが。Javaで書かれたJava仮想マシン
ならあるから(Jikes RVM で検索)、それをJScriptで書き直すとか?
>>422 意味が判らない。
ソースから移植じゃなく、バイトコードを実行しないと駄目?
426 :
Name_Not_Found :2010/06/01(火) 12:36:01 ID:4RhBgP6F
>>420 bodyの下に入れるのが無難。
っつーのも、そういうのって大概、スタイルをposition:absoluteにして
期待した位置に表示するじゃん?
なのでターゲットになる要素に入れると、原点が(0,0)にならんというか
offsetParentがbodyにならなくて位置合わせが面倒になることがある。
<body>
<div style="position:absolute;">
<div>←ターゲット
最近さ、プログラムを書くことより金髪のアメリカ人女性と友達になりたいと思うのね どうしたらいいですか?
移住
ブロンドにこだわるならノルディックの方がいいと思う アメリカは黒髪ばっかだよ
goto Iceland;
アメリカ人は日本の経済力じゃ相手にするのは無理だから 東欧の貧乏諸国の白人美人を探してください
433 :
Name_Not_Found :2010/06/01(火) 16:34:01 ID:4RhBgP6F
>>432 いや、必ずしもそうなるとは言わんよ。
ターゲットになる要素の位置を起点にして云々する場合もあるだろうし。
>423-425 そのコードが何とかで合ってるみたいです 実は作ると言ったのは友達で 自分は友達にその動作環境を貸す約束をしてしまったので 期限までに動作するスペックにしないといけません 32GHzで足りないのなら大学で借りようと思ってます 32GHzで足りそうかだけベテランの勘で教えていただけると幸いです
エミュレーションするJVMで何を動かすかによるけど、おもちゃプログラム をひどくゆっくりでも動かせることだけ示すのなら普通のマシンでも 問題ないんじゃないの。しかしJVMをJScriptで書くって大変だと思う。 まあお友達の健闘を祈ります。
>>435 32GHzって市販PCじゃないだろ。
質問する場所を間違えてると思う。
無形関数の処理の流れが分からないので教えてください。 下記の全角を半角に変換する関数がなぜ1行で書くより処理効率がいいのか、 そして、どうしてreturnのあとの無名関数にzenToHanで渡した引数が渡るのか理解できません。 var zenToHan = (function() { function codeChange(str) { return String.fromCharCode(str.charCodeAt(0) - 65248); } return function(str) { return str.replace(/[A-Za-z0-9]/g, codeChange); } })();
簡単にその式を書き換えるとこうなる。zenToHanという変数に関数を代入。 function zenToHan(str) { return str.replace(/[A-Za-z0-9]/g, function(str) { return String.fromCharCode(str.charCodeAt(0) - 65248); }); } 処理効率は分けたほうがいいのか?gogleかどっかで分けないほうが早いってのを見た気がするんだけど。
>>439 ありがとうございます。
function(){ 〜 }();と書くことで、zenToHanに代入する時に無名関数が実行されて、
codeChange内部関数が定義?され、最後にreturnで無名関数を返すことで
結果的にzenToHan = function(){ 〜 }と同じ事になるからzenToHan()で引数が渡せるわけですね。
実際に計測してみるとクロージャを使った方が1〜3割程早いのは、
置換え処理の度に関数が作られるか、先に定義された物が使いまわされるかの違いでしょうか。
>>440 素直な実行環境ならそうなるだろうな
JITのあるFxのような環境なら大差ない可能性もある
プロトタイプって短いコードでも積極的に作ったほうがいいんですか?
443 :
Name_Not_Found :2010/06/02(水) 20:48:24 ID:UOx6KxWa
>>442 必要なら使えばいいし、必要ないならいらない。
した方がいい、とかいう理由で使うもんでもない気がする。
プロトタイプベースじゃなくて言葉通りプロトタイプの話かよJS関係ねーw なんだって最初に作った物が実質的なプロトタイプに成り果てるからあんまり気にすんな
Canvasって、VMLやSVGみたいに連続直線(polyline)を描く処理命令が無いんですか?
>>447 出来ればVMLみたいにスムージング表示して欲しいんですけど。無いんですね?
>>448 それはちょっと大変w
出来んことないけどさ。
Canvasはビットマップ、SVGはベクター。 CanvasはPhotoshop、SVGはIllustratorみたいなものだと思え。 役割が違うからAPIも違う。
452 :
Name_Not_Found :2010/06/03(木) 01:25:40 ID:4x7dCUPd
どっちかというとスムージング処理のせい(?)で座標に0.5足さないと1ピクセルの直線が描けない(ボケボケの直線になる)仕様をどうにかしてほしい
IE9はcanvas対応するの?
するよ
×や、Ctrl+F4で、ページを閉じようとした時に、 if(confirm("閉じようとしています。よろしいですか?")) 〜 って出したいのですが、javascriptで可能でしょうか? 注1)リンクでページを移動しようとした時の話(window.onunload)ではありません。 注2)ボタンをクリックしたら閉じるの話(window.close)ではありません。
458 :
Name_Not_Found :2010/06/03(木) 05:40:44 ID:zZeUxes/
jsonpがクロスドメインを実現するための手法だということはわかったのですが いまいちすっきりわからないので教えてください。 scriptタグで外部ドメインのスクリプトを読み込みクロスドメインを実現する、 とjsonpを解説しているウェブサイトがありますがこれは誤りですよね? jsonpを返すyoutube apiなどへのアクセスは、外部ドメインのスクリプトを読み込まずにも可能ですし? で結局jsonpは、callback関数名とデータをjson形式で取得しているだけで 外部ドメインのデータに普通にアクセスできいると思うのですが、 Same-Originポリシーはどうなったんでしょうか?
>>458 何が聞きたいのかもっとはっきりさせてから質問しような
2段落目はほとんど言葉遊びの類になってしまって不毛なんだが一応間違いといえば間違いだ、
正確には「scriptタグが外部ドメインのスクリプトを読み込める仕様を利用している」ということだな
3段落目はscriptタグで外部ドメインのスクリプトを読み込むことが当たり前になっていたから
いまさらそれを制限することはできないって判断したんだろう
まぁ問題ではあるがアクセスされる側が外部ドメインのスクリプトからのアクセスがあることを承知の上で
json(p)形式のデータを吐き出さないと成立しないからそれほど深刻というわけでもない
>>458 jsファイルはsame-originで保護するような「情報」じゃないということ
もしJSONPに漏れて困るデータを載せたヤツがいたらただのアホ
463 :
458 :2010/06/03(木) 13:17:56 ID:zZeUxes/
>>459 >>461 有り難うございます。
質問が曖昧ですみません、もう少し教えてください。
jqueryを利用してコードを書いているのですが、
その中でscriptタグから外部データを読み込むようなコードを書くような必要がなく
scriptタグで云々と書かれているjsonpとはなんなんだ?と思っていた次第です。
もしかして、jqueryが動的に適切なscriptタグを埋め込んでいるんでしょうか?
>動的に適切なscriptタグを埋め込んでいる そう JSONPは指定されたコールバック関数を(引数としてデータを付けて)呼び出すだけのJS ライブラリ(+自作コード)の呼び出し部分を添えられたデータとも言える
jQuery とか prototype.js って中身を知らないで使うと問題発生時に不便じゃないか。
>>460 どのみちhtml5の目玉機能は全て実装せざるをえないでしょう
しなかったらさらにシェア落ちるのは明白だしMSもそれは危惧してるはず
html5はgoogleが推してるしな
質問です。 a.html と b.html があります。 a.html にはバナー画像が2枚あります。(A画像とB画像) b.html にはフォームのプルダウンメニューがあります。(「ああああ」と「いいいい」) a.html のA画像をクリックして b.html へリンクした時、「ああああ」が選択された状態、 a.html のB画像をクリックして b.html へリンクした時、「いいいい」が選択された状態に したいのですが、どうやるかさっぱりわかりません。 どなたか教えていただけませんか?
a.htmlからb.htmlに移動するときに選択に応じてURLに?queryか#hashを付け加える b.htmlはlocationを見てどちらが選ばれたか判定
>>470 >>471 ありがとう。
概念的には何となくはわかるんですが、Javascriptがあまりよく理解できていないので、
具体的にどうすればいいかがわからない。
似たような動きをするサイトとか、サンプルとか知らないですかね?
随分探したんだけど、あんまり見つからないんですよ。
スレ違い
やってることの一つ一つは初心者レベルだから 基礎から頑張るか、丸投げできる場所で丸投げしてこい
475 :
458 :2010/06/03(木) 20:00:09 ID:???
>>464 >>465 ありがとうございます。
理解できすっきりしました。
これから、ライブラリのソースのほうもなるべく読んでいきたいと思います。
1秒間限定で0.1秒間隔で初期値0でint型のaをインクリメントし、それを出力するものを作りたいのですが、うまくいきません。 調べたところによるとsetIntervalで1秒と決め、setTimeoutで0.1秒間隔にすればよさそうなのですが・・・ 宜しくお願い致します
あ、setIntervalは違いますね でも0.1秒間隔なので、aが10になったら1秒なのでwhileでa>=10にすれば良さそうですね。
function func() { a++; if (a != 10) { setTimeout(func, 100); } } setTimeout(func, 100); もしくは function func() { a++; if (a == 10) { clearInterval(timer); } } var timer = setInterval(func, 100);
<HTML> <HEAD> <TITLE>test</TITLE> <SCRIPT LANGUAGE=javascript> <!-- var a; a=0; function func() { a++; if (a != 10) { setTimeout(func(), 100); } document.write(a); } function load(){ setTimeout(func(), 100); } //--> </SCRIPT> </HEAD> <BODY LANGUAGE=javascript onload="load()"> </BODY> </HTML> 10までカウントするのはOKです。 でも0.1秒間隔で1~10まで増加するのを目で確認したいのですが、うまくいきません。 どうすれば解決できますか?
ブラウザを信じる
ワラタ
それtimeoutじゃなくて直でfunc()呼んじゃってるで
document.writeは忘れろ 簡単にでもDOMとinnerHTML覚えろ
484 :
Name_Not_Found :2010/06/03(木) 21:51:47 ID:xqh/ft93
var a = 0; (function(){ console.log(a); if(++a < 10) setTimeout(arguments.callee,100); })(); まあ、余裕で1秒以上かかるんだろうけど。
0.1秒間隔の更新を目で確認できるほどの動体視力を持っている人間はいるのだろうか? というかブラウザによるだろうけどそんなに頻繁に表示を更新してたら重くて仕方ないからある程度まとめるんじゃないだろうか?
0.1秒って10fpsの1フレームだろ、反応するならまだしも見るだけなら余裕 TV60fpsゲーム30fpsも一般的にあるし10fpsの動画とか思った以上にカクカクするぜ?
数字を読むって話じゃないの
カウントアップぐらい読めるよ 「5のときにキーを叩け」が簡単じゃないだけ
<html> <head> <title>カウント</title> <script type="text/javascript"><!-- a=0; function timer(){ document.getElementById("cnt").innerHTML=n+"パーセント"; setTimeout("timer()",100); a++; } //--></script> </head> <body onload="timer()"> <p>現在:<span id="cnt"></span></p> </body> </html> innreHTML使ったサンプル改変しました。 なんとか目視できますが、1秒だったら停止して欲しいです。 aが10になったら停止でいいと思うんですけど、うまくいきません。 宜しくお願い致します。
if文加えばいいだろう
今やったらできました お騒がせしました
強制的に再描画する関数っ何でないのかね
必要ないから
明らかに必要ないから
495 :
492 :2010/06/04(金) 00:46:34 ID:???
よく考えてみればちょっと別のことしようとしたら処理待ちになりそうだな
496 :
Name_Not_Found :2010/06/04(金) 01:13:00 ID:2EIoN/8T
リロードする方法って location.href location.reload location.assign location.replace の他にありませんか
F5
めたたぐ
499 :
Name_Not_Found :2010/06/04(金) 09:10:43 ID:mfO/mvih
>>496 現在の画面でhistory.back()して
前画面側のonLoadイベントにhistory.forward()で強制遷移
while(true){alert("再起動して下さい");}
501 :
Name_Not_Found :2010/06/04(金) 14:36:01 ID:J84S1fa4
ブラウザ依存の実装になると思うんですが、FireFox で新しいタブを開き、なおかつ開いたタブにフォーカスを移したくないです。 window.open だと新しいタブは開きますが、同時にそちらのタブへ表示が切り替わってしまいます。 こうではなくて、今まで操作していたタブを表示したままにしたいです。 開く前のウィンドウで focus しても何も起こらず、開いたウィンドウの方で blur をすると、そのタブを含むブラウザウィンドウから フォーカスが外れて違うブラウザウィンドウにフォーカスが移りました。 これを実現する方法はあるでしょうか?
無理です
それでどんな詐欺をするつもりですか?
詐欺ではありません みんな儲かる話です
ユーザの気づかないうちに広告を自動クリックさせるんですね
506 :
501 :2010/06/04(金) 15:51:54 ID:???
やりたいのは、画像のサムネイルをクリックするとその原寸画像が表示されるんだけど、 大抵は何個もクリックして後でまとめて見るという流れが多いので、いちいち開いたタブに切り替えたくない ってのがやりたい理由。 なんにしても、できなそうですよね。 つか、これで引っ掛け的なことってできるかな?
そういうのが好きな人はそういう設定にしとるわ
zipでおk
>>507 その設定ってどうやるの?
新しいウィンドウをタブで開くかどうかの設定と、新しく開いたタブに切り替えるかどうかの設定はあるけど、
その設定いじっても、新しいウィンドウをタブで開いた後でそのタブに切り替えないってことはできてないよ。
CTRL+リンク とかで開くタブは設定どおりに動いてるけど、window.open ではダメだったりしない?
> 大抵は何個もクリックして後でまとめて見るという流れが多いので、いちいち開いたタブに切り替えたくない って考えの人は個人個人でそういう操作してるでしょ FirefoxならCtrl+クリックで新規バックグラウンドタブに開く
典型的な小さな親切余計なお世話
サムネイルを選んでもらってアルバム化(リスト化) できあがったアルバムを開いて写真を見る っていう作りにしたらいいんじゃねえか
新しいウインドウを開かずに、同じウインドウ内に画像を読み込んで表示すればいんじゃね。
>>510 イベント拾ってその中で window.open しなくちゃならないんだけど、それだと CTRL 押しててもそうならないんだってば。
>>511 というか自分が使うためのスクリプトなんだけどね。
だからできないならできないでいいんです。
なんでそんな程度のもんをjsで開かせようとするの?
要素(タグ)を加えたり消したり位置を変えたり、ページを弄る動作をする前に、 仮想ページを作り仮想上であらかじめその動作をさせて動作後のページ(主に要素の位置)がどうなるか確かめる といったことをしたいのですが こういう感じでする、というヒントを教えていただけると幸いです ちなみに現在は見えないiframeの中に同じページを作って仮想ページとして扱っています
>>514 >イベント拾ってその中で window.open しなくちゃならないんだけど、それだと CTRL 押しててもそうならないんだってば。
Firefoxのアドオンで可能だよ
>>515 要点だけまとめたから単純な話になってるけど、条件に応じたいろいろな処理を伴っているのです。
クライアントのローカルディスクに置いておく、自分用のツール群の一部です(処理対象は外部サーバだけど)。
UI や設計についてアドバイスしてくれようとするのも有難いことではあるのですが、それならそこも含めて質問するので、
とりあえずは当初の質問にあるような動作についての回答だともっと有難いです。
Firefoxの拡張スレとかユーザスクリプト系スレで聞きゃいいのに
答えはとっくにでてるだろ?
>>518 条件によっては可能。条件が不明なら答えようがない。以上。
>>521 >>518 じゃないが、その情報に興味あり。
どういった条件でどうやればそれが実現できるの?
アドオン導入ですか?
userChrome.js は JSer のたしなみ
自分のためならGreasemonkeyのGM_openInTabでいいんじゃないのか
>>524 ごめんうそ、間違えた。フォーカスはfirefox自信の設定だった。
>>516 要はプレビューでしょ?
そのままiframeでいいんじゃねえかなぁ
innerHTMLを書き換えてもいいかもしれんが、絶対座標指定の対応が面倒くさいし
これからプログラミングの第一歩としてJavascriptを 勉強しようと思うんだが、どうやって学習していくのが 一番効率がいいのだろうか? 一応HTMLとCSSの基礎は理解している。
とりあえずFirefox+Firebug入れてHTMLとDOMの関係、DOMのAPIについて調べる
他の言語にする
DOMはDOMであってJavascriptではない
そのへんのサンプルでもいじってなさい
必要は発明の母
本読んで、自分で書いてみて、他人のソース読んで、 慣れてきたら仕様書読んで、更に自分で書いてきた コードを読み直して書き方を改めて、常に最新の動向を チェックし続けるのが一番効率良いんじゃないかな。
できるやつは大抵それに近いことしてるもんな できないやつはコピペばっか
<a><img></a>の上に、さらに<a><img></a>を重ねたい。 具体的にいえば、 <a href="atari"><img src="atari"></a> の上に、 <a href="ooatari_tokubaibi"><img src="ooatari_tokubabi"></a> みたいなの。 で、これを、Javascriptでやりたい。 document.getElementByID(atari).appenChild(ooatari_tokubaibi) とかやると、優先順位の関係で「大当たり」が背面になっちゃう。 どうしましょう。 大当たりを前面にしないとだめなんだけど。 なお、style.zIndexはz-Index/zIndex双方ともうまくいきません。
<a><img src="atari" style="position:absolute;z-index:1"></a> <a><img src="ooatari_tokubabi" style="position:absolute;z-index:100"></a>
z-indexってIEでなんか不具合なかったっけ
あ、非常に大切なこと: もとのHTMLは書き換えられないんです。 あくまで、Javascriptを追加することしかできない。 よって、 <a><img src="atari" style="position:absolute;z-index:1"></a> の「style="position:absolute;z-index:1"」は無理。 z-Indexって、重なる相手もposition属性を持ってないとダメでしょ。 そこがクリアできない。 もちろん、「Atari」にJavascriptでposition属性を注入することも できるかもしれないけど・・・。 いずれにせよ、全部Javascriptでやんないとダメ。
DOM操作をしらないのかおまいは あのHTMLが超ヒントなのに
>document.getElementByID(atari) とかかいてるってことは <a href="atari"><img src="atari" id="atari"></a> とかなってるの? もっと正しいものだしてくれないと
文章読むかぎりatariにのみidがふられてるっぽいな
ほらよ <script> window.onload=function(){ var img = document.images; img[0].style.position='absolute'; img[0].style.zIndex='1'; img[1].style.position='absolute'; img[1].style.zIndex='10'; } </script> <a><img src="atari"></a> <a><img src="ooatari_tokubabi"></a>
document.getElementByID(atari).parentNode.appenChild(ooatari_tokubaibi) こうしなきゃ <a><img><a><img></a></a> とかいう不可解な構造になるんじゃね
そのとおりです
一万行近く分割して書いていると変数名を被らないように考えるのが大変なのですが いっそa b c... とつけた方がいいでしょうか? 諸事情で携帯で作成しています 「PCで書け」は泣くので言わないでください
スコープ!
つ[名前空間]
紙にかけばいいじゃない。
俺なら頭に描くぜ
肉
iPadで書け
>>545 Bluetooth搭載のケータイに乗り換えて、Bluetooth接続のキーボードで書くのはどうか
ちゃんと変数に命名規則つけないと 無意味につけてるから被る心配がでてくるわけで
一万行書いてて関数名に悩むことはあっても 変数名に悩むことはありえん
Bluetoothキーボードはつかってます 変数名とは関数名も含んだつもりでした 一応関数は大文字、変数は小文字を使っています これからもまだまだ拡張する予定で、どの値をいつ使うようになるのかがわかりません それでほとんどがグローバル変数となってしまいます
javascriptでグローバル変数はほぼ必要ないだろ…
まぁわかりにくくていいならabcとかでもいいんじゃね
>>556 この辺がいまいちよくわからないから聞きたい。
複数の関数から使用したい値やデータはどうしてますか?
毎回引数でたらいまわし?オブジェクトなどに埋め込んで毎回取得?
>>558 引数で渡すのが一般的だと思うけど、
できるなら関数群含めてクラス化しちゃうのがベストじゃないかな。
隠蔽・抽象化の練習は、いろんな意味で今後も役に立つよ。
あとは匿名関数でスコープを限定するとか?
561 :
Name_Not_Found :2010/06/07(月) 12:25:01 ID:EDN3aegW
グロスコに変数をつくると、参照がいつまでも残って重くなりそう、 っていう気分的な問題で、極力作らんようにしちゃうなあ。 なりそう、って良くない考え方だとはわかっちゃいるんだが…
漢ならカウンタのiやjも黙ってグローバル
そしておもむろに再帰
再帰を別の表現にするの難しいっす というかどうすればいいかわからないっす
「/(。〇。)ゝ〃ヾ(^^ヘ)エイッ
JavaScriptって末尾再起の最適化ってやってくれるn?
最適化はコンパイラの仕事でしょ
JIT
schemeやluaのように末尾再帰の最適化が言語仕様として定められているかという話だろう ちょっと試してみりゃわかる話だけどな (function(){return arguments.callee()})() chrome 6.0.422.0 dev RangeError: Maximum call stack size exceeded Fx 3.6.3 InternalError: too much recursion
グローバル変数はグロ変数か・・・ってあながち間違いじゃなかったw
いろんな言語にあるディレクトリ系の関数のglobってなんの略なんだろうな
globbing
【募集】グローバル変数らしい変数名
グローバル変数 = hugahoge;
日本語英数字入り乱れる文字列をできるだけJavaScriptのみで圧縮する方法を教えてくださいませんか? escape()した後の量を元より減らしたいのです できればライブラリーではなくやり方を教えてください お願いします
578 :
Name_Not_Found :2010/06/08(火) 08:43:40 ID:NFjvqsDI
>>577 文字コードのパターンをSwitch文で0とか1とかで指定
これをfor文でString.lengthまで回す
本来の文字データよりは軽くなる…かな?
めちゃくちゃ軽くしたいなら全ての文字データの数だけCaseを作るしかないんじゃね?
>>577 デフレート圧縮が簡単じゃないかな。
よくある Javascript のソース圧縮もこれだね。
それにしても、なんでエスケープした後に圧縮するの?
joinで配列要素を連結した文字列を取得できますが 配列の区切りに文字を使用したくない場合、どのようにすれば良いですか? .join('')ではカンマ区切りになってしまいます。
.join('配列に存在しない文字列').replace(/配列に存在しない文字列/g, '') もっときれいなやり方がある気がしてならない。
>>580 元の要素をベターッと隙間なく並べたいってこと?それなら、カンマ
区切りの文字列からカンマを取るだけでよいのでは?そんな気がし
てならない。
>.join('')ではカンマ区切りになってしまいます。 > ["a", "b", "c"].join("") "abc" ならんだろ こういうことでもしたんじゃないか? var sep; // 空文字列を設定したつもり ary.join(sep); // 引数無し相当でjoin呼び出し
IEやFirefoxは沢山の要素を作るとき、 変数に<div onclick="start">などの文字を追加していき最後にinnerHTMLでまとめてぶちこむ方が高速ですが この場合無、名関数でスクリプト全体を囲んだ内部関数を呼び出すことはできませんよね?
585 :
580 :2010/06/08(火) 18:27:39 ID:???
>>583 おっしゃるとおり.join('')で普通にできました。
阿呆なことしてました。
>>581-582 replaceでの置換は思いつきませんでした。
文字列を限定できるなら使えそうですね。
覚えておきます!
ありがとうございました。
>>584 よくわからんが、無名関数を他所で呼び出すことは名前がないためアクセスできず無理
innerHTMLに渡す文字列にscriptがあっても実行は無理
やはりそうですよね・・・ DOMで要素を追加していくとIEやFirefoxでかなり遅くなるので 無名関数で囲まずに置くことにします。ありがとう。
588 :
Name_Not_Found :2010/06/08(火) 19:41:36 ID:PkSI4MYZ
>>587 (function(){
var window.AAA = function(){
alert("hello");
};
})();
みたいに、手の届くところに置くのは?
それだったら var myObj = {}; をグローバルに宣言して、無名関数内に myObj.foo = function(){}; を入れる方がいいね。
>>588 なるほど
親要素でイベントを監視して、idか何かで判定して
eventオブジェクトを引数で渡してしまえば確かにできるかも・・・!
「マラソンを走ったあとは早めにポカリ飲むといいよ」 「なるほど、確かにシャワー浴びてからビール飲むのがいいかも」
592 :
Name_Not_Found :2010/06/08(火) 20:54:53 ID:sNFqHSyY
素朴な疑問。
テレビガイドのページが読み込まれるとき、
左上にある番組表をクリックしようとすると、
かならずといっていいくらい、その下の広告をクリックしてしまいます。
http://www.tvguide.or.jp/ IEでもChromeでも同じなので、
よく見ていると、
その上の「TODAY's CHECK」の欄の高さが
しばらく高めに開いて、
その後上下に縮むので、
マウスの位置がちょうど広告にくるようです。
これはJavascriptでやっているのでしょうか?
意図的ということはないですよね?
593 :
Name_Not_Found :2010/06/08(火) 21:10:14 ID:PkSI4MYZ
>>592 よくありがちっつーか、しょうがないっつーか。
TODAY'S CHECKのところ。
まず文字列がリスト表示されるコンテンツとして完結している。
それをJSが整形して、マーキー風に流れる様になる。
っていう二段階を踏んでるから、表示されてからガコガコっと高さが変わるんだね。
最初から高さをCSSで決め打っておけば問題なんだけど。
そうすると「JSが動かないが、CSSは効く」っていうレアな状態だと
リスト表示が見えない、ってのを気にしているのだと思う。
個人的には誰得?な感じがします。
>「JSが動かないが、CSSは効く」っていうレアな状態 逆ならともかく、レアと言うほど少なくはない
>>593 横からどうでもいいツッコミだけど、firefoxでNoScriptを有効にしてる環境だとよく発生する
>「JSが動かないが、CSSは効く」
Firefoxを使っていて且つNoScriptを導入している人がどれくらいいると思ってんの? 統計で見たらほんの一部じゃん
どうしても気になるならJavaScriptでCSSを有効にするのはどうか var link = document.createElement("link"); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = src; document.getElementsByTagName("head")[0].appendChild(link);
598 :
Name_Not_Found :2010/06/08(火) 22:47:49 ID:PkSI4MYZ
>>594-595 すまん、レアな状態ってのは言葉が変だった。
標準状態(デフォ)でそういう実行環境はレアだよね、ってことっす。
>>596 サイトによってもだいぶ率は変わりそう。
JSを切るのは別にFF+NoScriptだけの特権じゃないしね。
なんかこのページの動作見てると段々イラッとしてくるな 最後のチェック見せるまで何秒待たせる気なんだ
JSフレームワークってみなさん使いこなせてますか? prototype.jsを使ってる場合、 document.getElementById("foo").style.color="red"; document.getElementById("foo").style.fontSize="2em"; これが、 $("foo").setStyle({color:"red",fontSize:"2em"}); とかけますが、 idを$(id)でとることは知ってても、setStyleで複数スタイルを設定できると知らずに、 $("hoge").style.color="red"; $("hoge").style.fontSize="2em"; と書いてしまう人もいると思います。 このようにフレームワークを使ってても使いこなせず、 無駄なコードを書いてしまわないためにはどうしたらいいのでしょうか? チュートリアルやドキュメントをしっかり読んで覚えていっても、 知らなくて無駄になるコードがでてきてしまうと思いますが、 それは仕方がないと割り切ってやるしかないですか?
コード嫁
中身も知らないライブラリをよく使えるな。
まじですか?みなさんあのコードを全部読んで理解してから使うんですか? それはすごい・・・
>>603 オブジェクト指向の基本的な考え方で
中身を知らないで使えるのが利点だと思うのですが
扱い方を知るためにソースコードを読み進めるというのは本末転倒だと思います
通常は使い方を示したドキュメントを用意するだけです
開発環境使だと<script>で読み込むだけでprototype.jsとかjQueryとかの関数の候補が出てくるから楽だわ
とりあえずAPIを全部読んでどんな関数があるか把握しておけば 「ありえない」レベルのコードを書くことはなくなるんじゃないか
はいはい中身全部把握しててすごいですね
ソース全部読むのと自作するのとどっちが楽かな。
>>601 prototype.js とか jQuery なんて規模の小さなフレームワークなんだから、
まずは一通り、ざっくりとリファレンスに目を通しては?
とりあえず「何ができるか」だけ覚えておけば、あとは逆引きで調べられるしね。
>>605 あとオブジェクト指向を誤解してるよ。
ブラックボックスたるのはプログラムからであって、人間にとってでないです。
ソースを追っかけられる選択は時代的にも必須かと。
お勉強にもなるしね!
言語にインポート機能すらなく しかも常にクライアント側にダウンロードされなきゃいけないものが 従来のライブラリと同じ考えでいけるわけがなかろ
だからある意味、ライブラリと呼べるのはホストオブジェクトのDOMまで それ以降は制作者の都合でしかない便利ツール
だね
jQueryにはcreateElementできる関数がないのがたまに不便だなあ メモ Element = function(n,a){ var e = document.createElement(n); if(a instanceof Object) for(var i in a) e.setAttribute(i,a[i]); return e; } >>> new Element( "input" , { type : "text", value : "hello" , name : "example" } ); <input type="text" value="hello" name="example">
function(){}(); (function(){})(); この二つに違いはあるのでしょうか?
>>612 意味がわからない。
従来のライブラリって .so とか .dll のこと?
それと何が違うの?
言語構造から開発思想を制限しすぎじゃない?
>>613 意味がわからない。
その便利ツール、汎用性の高い再利用可能なプログラムが
「ライブラリ」なんじゃないの……?
それってnewいらないんじゃ?そしてappendchildされてないですよね。 作るなら、 Element = function(n,a){ this.elm = document.createElement(n); if(a instanceof Object) for(var i in a) this.elm.setAttribute(i,a[i]); } Element.prototype = { append: function (p){ p.appendChild(this.elm) }, setAttr: function (){ 略 } } みたいな?
>>618 newしてるのは分かり易くするため、appendしないのはあくまでもエレメントを作るだけの関数だから
要は
$("body").append(new Element("div",{class:"hage"}));
のように使いたいだけ
>>616 ()で括って一つの表現にしてるだけ、違いは無い
構造を分かりやすくするためによく使う
>>617 お前さんはWebという環境の制限を無視し過ぎ
場合によっちゃクライアント側の制約に応じてライブラリの中身さえ削らなきゃいけないのに
汎用性? そいつは一体なんだ?
>>623 関数探しても無いと思ったらそうやって作れたのかありがと
>>619 htmlそのままでよくない?
$("body").append('<div class="hage"></div>')
そして意味もないのにnewするのはどうかと思う
docomoに次いでSoftBankもJavaScriptに満足に対応したので これからJavaScriptを使った携帯サイトが増えてくると思いますが 携帯の場合ゲーム等のコンテンツにかなり使えるのではないかと考えています (端末間の仕様差も少ないですし) もし成功したらJavaScriptの名をもっと高められるに違いありませんし、これはやるしかないですよね そこで質問なのですが、音楽等の処理にFlashを使おうと考えてます そこでJavaScriptとFlashを連携させたいのですが、hashの指定で可能でしょうか? それともパラメータの書き換え? 最悪Flashごと入れ替えるしかないですか? また、JAVAと連携させたいときは起動リンクのパラメータを変えればよいですか? めんどくさいでしょうがどうかお願いします
>>626 JavaScriptでFlashをいじりたいならSWFObjectが便利
flashはjavascriptから操れるんだが、携帯用は無いのか? flashを全部ページにおいておいてjsで再生とかやるけど。 javaはわからんすまん。
>>621 「クライアント側の制約」と「Webという環境の制限」は別問題では?
場合によっちゃ MFC だってソースいじるし、それこそライブラリのリビルドなんて当たり前じゃない?
修正が必要だからって汎用性が無い、ライブラリじゃない、ってのはちょっと無理矢理すぎるよ。
あるものそのままじゃなきゃヤダなんてロマンチストすぎ。
LLなら(物理的にも労力的にも)コードが比較的読みやすいっていうのと LL故にドキュメントがおざなりなことも多いから、勉強も兼ねてコード読むのが推奨されるんだよな javascriptもその例に漏れてないだけだと思うぞ カプセル化も結構だが、原理の知らないツールなんて使えても使いこなせはしねえよ
>>629 言っとくが「あるものそのままじゃなきゃヤダ」と言ってるのは
>>605 その他で
俺はWebでは「ライブラリのリビルドなんて当たり前」で
「あるものそのまま」で使えるのはクライアント側のDOMが限界だと言ってるんだぞ?
>>631 続き
>>629 だから「あるものそのままじゃなきゃヤダ」という
「汎用性の高い再利用可能な」ものがライブラリだというお前の定義に従うなら
その辺のものはライブラリじゃない、ということになるだけ
>>605 の思考的には継承やらオーバーロードしろってことだろう
prototype.jsとjquery.jsの両方をインクルードするサイトが少なくないのは 結局、汎用性の高い部品の共通化がうまくできてないってことでは そこでまた標準化プロセスになって時間がかかるんだろうけど
>>616 宣言と式。まったく別物。
function(){}
関数宣言として扱われる。識別子のない関数宣言は構文違反。
(function(){})
小括弧の内側は式として評価され関数オブジェクトを返す。
識別子付けて「関数宣言だ」てなことにならないように。
要は関数式として評価してもらえれば小括弧で囲む必要なんてない。
>>631 え、じゃあ、
>>621 では何が言いたかったの?
あなたの背景知識がわからないから何ともだけど、
正直な感想、井の中の蛙っぽいです。
>>635 重箱だけど「文」と「式」ですね。
>>636 正直な感想、俺もお前が何に絡んできているのかよく分からない
>>621 が何言いたいのか知りたいだけじゃないの?
>>638 (function() {})()
これが式。
function(){}()
これは文。関数宣言はしていない。
>>641 function(){}()
ECMA-262に従えば、これは文ではない
名前がないから関数宣言でもなくsyntax error
さらに言えば、JScriptなら
(function(){})()
これは式であり、同時に宣言でもある
言語規格か言語仕様のどちらをとり上げるかの問題だが、
少なくともお前さんの書き方は混乱を招く
10進数を16進数に変換したいのですが alert(255.toString(16)); だと255は数値ではなく変数として扱われるので動きません かといって var i = 255; alert(i.toString(16)); とわざわざ一度変数に入れるのは冗長な気がします そこで alert((255).toString(16)); としたところうまく動いたのですが見慣れない感じでなんかきもちわるいです もっとすっきりした書き方はないでしょうか?
>>643 それが一番すっきりしてると思う。
が、定数だったら素直に16進数で書けば、もっとすっきりする。
定数なら、その場限りで変更はないんだから。
>>644 なるほど!盲点でした
どうもありがとうございます
>>642 サイ本にfunction文と書いてあるから
>>641 みたいな理解(誤解)はよく見かける
実際、JS 1.5の拡張構文としてならFunctionStatementがあるし
それでも「関数宣言はしていない」の意味は分からないな
>>642 のように構文エラーと言うつもりだったのか
JS 1.5の拡張構文だから宣言ではないと言いたいのか
function文は全て宣言ではないと本気で信じ込んでいるのか
JScriptは式の位置でも関数宣言をできるようにして関数式もどきを実装していたのか、知らなかった ところで手続き型言語において、手続き順を無視して処理されるstatementなんて存在するの?
648 :
○~* :2010/06/10(木) 17:10:19 ID:aROAQs7U
var doc=document,Btn,str; window.onload=function(){ Btn=doc.getElementsByTagName('input'); Btn[0].onclick=function(){loadjs(0)} Btn[1].onclick=function(){loadjs(1)} } function loadjs(n){ var Scrpt,scrpt; Scrpt=doc.body.getElementsByTagName('script'); if(Scrpt.length>0){ doc.body.removeChild(Scrpt[0]);} scrpt=doc.createElement('script'); scrpt.type='text/javascript'; scrpt.src='./exam'+n+'.js'; doc.body.appendChild(scrpt); scrpt.onload=function(){alert(str);} } 以上は ボタンクリックで読み込む外部 js ファイルを切り替える script です. Mozilla 系 web-browser では問題なく動作します. (これを応用した掲示板を運用中) ところが最近になって IE ではエラー出まくりで使い物にならないとの報告が. どうやら IE では scrpt.src='./exam'+n+'.js'; の部分がエラー発生源となる模様. なんとかならないかしらん ???
試しにローカルでexam0.jsとexam1.jsを作って scrpt.onload=・・ を変えてページ移動のスクリプトを実行させてみたけど エラーにはならなかったよ。 ちなみにIE7
今日のググルのトップは背景に写真でてますが、 ブラウザの描画範囲を縮小拡大したりサイズかえると画像もリサイズされます。 あれはどのようにやるのでしょう? ブラウザの描画領域がかわったことを検出できるイベントなんてありましたっけ? あとimgならwidth,height指定できますが、 cssのbackground-imageっぽいし、どうやってサイズを指定してるのでしょう? 見当のつくかたぜひ教えてください。
>>647 計算機科学での定義は知らないが
ECMA262のVariableStatementで変数生成されるのは実行スコープ開始時だし
3rd-ed.なら正規表現リテラルが評価されるのはプログラムまたは関数開始時
>>648 IE6ならそのままではonloadが発火しない
どうするかは有名だから探せ、ただし信頼性は高くない
そしてIE6でその書き方は典型的なメモリリークパターン
652 :
○~* :2010/06/10(木) 18:33:25 ID:aROAQs7U
>>649 さっそくの お返事 ありがとうございます.
報告の主は IE8 でした.
さらにオイラは OS の関係で 5.17 しか使えず, やはりダメ.
だからと言って "IE はダメよん" とも言えず, 回避策があるならと藁にも すがる思い....
回避策がない場合, 掲示板の設計を根本からやり直さざるを得ず (うわぁ〜ん)
653 :
○~* :2010/06/10(木) 18:40:43 ID:aROAQs7U
>>651 さっそくの お返事 ありがとうございます.
>典型的なメモリリークパターン
具体的に どの辺が まずいのか おせ〜て _(._.)_
>>650 body 直下に div を付けてそこに背景画像を表示させてる。
div のサイズはタイマーで随時更新してると思う。勘だけど。
今どきの若い子はbackground-sizeも知らんのかのう
>>650 window.onresizeでimg要素のheightとwidthを調整してるだけじゃね
658 :
650 :2010/06/10(木) 19:20:30 ID:???
>>654-657 レスありがとうございます。
>>654 おおう・・・これですね!テストスクリプト書きましたがうまく作動しています。
キーイベントとマウスイベントとonloadぐらいしか知らなかったので助かりました。
教えてくださってありがとうございます。
>>655 なるほど。タイマー使って随時サイズをとるなんて手法もありますね。
どうもありがとうございます。
>>656 background-sizeは知っていますが、
css3だしgoogleが使ってるのか疑問でして・・・
ソース検索しても(webkit,background-size,backgroundSize)出てこなかったので、
違う方法でやってるのかなぁと。
>>657 img要素の背景使用はないと思います。
>>651 なるほど、varがあった
VariableStatement内部でわざわざAssignmentExpressionではなくVariableDeclarationを定義して使っていることといい
制御構文下に置けない・自己代入を認めないといった、StatementやExpressionとして振る舞いきれなかった
なり損ないに(少なくともECMA262では)Declarationを名付けて区別しているということか
>>658 >img要素の背景使用はないと思います。
分析したいならFirebugやDOM InspectorみたいなDOM視覚化ツールぐらい使おう
>>658 >img要素の背景使用はないと思います。
googleがやってるのはまさにそれなんだが
img要素をzIndexで重ねて背景画像のように見せかけてるだけだよ
661 :
650 :2010/06/10(木) 20:17:05 ID:???
>>659 DOM視覚化ツール使ったことなくて使い方がわからなくて・・・
後で調べてみます。
>>660 img使ってる画像だと(z-indexで後ろに表示されてるものでも)、
左クリックしたままアドレスバーやデスクトップにもっていくことで、
画像が表示されたりコピーされたりするものという認識があるので違うのかなぁと思いました。
間違った認識だったんですかね?
ソースをちゃんと読めればこんな問題も起きないのにorz
精進します。
662 :
661 :2010/06/10(木) 20:20:08 ID:???
>img使ってる画像だと(z-indexで後ろに表示されてるものでも)、 >左クリックしたままアドレスバーやデスクトップにもっていくことで、 >画像が表示されたりコピーされたりするものという認識があるので違うのかなぁと思いました。 >間違った認識だったんですかね? すみません。間違った認識のようでした。 同じwidthとheightを指定していればこの操作は不可能でした。 ということでimgでやってるのかもしれませんね。 どうもありがとうございました。
「かもしれない」んじゃなくて本当にそうやってるんだってばw そしてそのD&Dが効かないのはそれよりも手前にdivが敷き詰められているから。 ぐだぐだ言わずにFirebug入れればいいのに。
・Firebugの使い方がわからない ・自分じゃ理解できないので確かめようがない だから「かもしれない」と言ったんでしょう
ま、ソース読まずに実装するってのは訓練としてはすごくいいんだけど、 答え合わせ的にソースも読まないと成長しないよね。
>>665 独力で、だな
人に聞くぐらいならソース読んだ方がずっといい
chromeにデフォルトでついてくる「要素を検証」が便利だぞ。 5になって使いにくくなったが。
しかしgoogleのようにケチャップソースだと読む気も起こらない・・・
>ケチャップソース 何それ?
ごめん スパゲティーといおうとしたら ナポリタンが思い浮かんで なんかしらんけどケチャップになった
IE8ならF12押して開発ツール使えばいいけど つい最近Firebugがブックマークレットになってるのを知った
googleのは汚いけど入り組んでいるわけじゃないから ケチャップぶちまけたようなソースってことで俺は納得しちゃったぞw
674 :
Name_Not_Found :2010/06/10(木) 22:28:59 ID:6jqyulEK
>>670 ,672
ねーよww
しかし、何でパスタコードって言わないんだろうかって思うのは俺だけじゃない筈
からまらないパスタもあるからだろ
スパゲティしかパスタを知らないなんてカワイソス
ペンネ旨いよね
何がパスタだ?すかしてんじゃねえよ? おめえらはいたーりゃーじんか?あ? この西洋かぶれめ!
>>648 俺ならこんな感じにするな。IE5で動くかわかんないけど。
イベント類はaddEventListenerとattachEventを使うほうがスマートだと思う。
var setBtns = function() {
var chJS = function(num) {
if (document.getElementById("myJS")) {
var oldScriptElm = document.getElementById("myJS");
document.body.removeChild(oldScriptElm);
}
var newScriptElm = document.createElement('script');
var jsSrc = '/js/' + num + ".js";
newScriptElm.setAttribute('id', 'myJS');
newScriptElm.setAttribute('type', 'text/javascript');
newScriptElm.setAttribute('src', jsSrc);
document.body.appendChild(newScriptElm);
};
var chJS_0 = function() { chJS(0); };
var chJS_1 = function() { chJS(1); };
続き var myBtns = document.getElementsByTagName('input'); if (window.addEventListener) { myBtns[0].addEventListener('click', chJS_0, false); myBtns[1].addEventListener('click', chJS_1, false); } else if (window.attachEvent) { myBtns[0].attachEvent('onclick', chJS_0); myBtns[1].attachEvent('onclick', chJS_1); } }; if (window.addEventListener) { window.addEventListener('load', setBtns, false); } else if (window.attachEvent) { window.attachEvent('onload', setBtns); }
IE5とか動かんでええやんけ
IE6が腐った牛乳だとするとIE5は何になるんだ
必要もないのにsetAttribute使われると目が疲れる
いや、
>>652 で5.17って書いてあったからさ。
setAttributeってDOM的にちゃんとしてるイメージだから使ってるけど、
実際のところ、無意味なのかな。
IEで動作させることを考えるなら myBtns[0].onclick=chJS_0 myBtns[1].onclick=chJS_1 にしないと駄目みたいね。
グローバル汚染とかクロージャとかよくわからないので勉強したい
>>686 クロージャの使用は可能な限り避けてください。(MDCより)
>>685 Win IE6とIE8では動作したよ
>>686 JavaScript The Good Partsがおすすめ
689 :
Name_Not_Found :2010/06/10(木) 23:55:44 ID:7ULvU7mm
>>678 秘伝のタレ、なんて言い方もありますな。
ちょっと意味合いが違うけど。
>>689 こんがらがったプログラムを秘伝のタレって呼ぶの?
セキュリティアップデートが終了したブラウザとかサポートしちゃあかんやろ
値か何かを返す関数と何も返さない関数 それぞれ呼び名はありますか?
693 :
Name_Not_Found :2010/06/11(金) 00:36:28 ID:6V/WZx/w
>>690 担当者・部署・制作会社の間で長年引き継がれて、
仕様書が薄れゆくなか、継ぎ足し継ぎ足しされて、
もうどうにも身動き取れなくなってきたコードのこと、らしいよ。
なるほど、秘伝のタレ意外と合ってるなw
>>692 その二つの比較において「関数」「手続き・プロシージャ・サブルーチン」と
区別することはあるけど、統一的な用語ではないし
javascriptにおいては何も返さないことがないから区別がない
便宜的にはvoid関数と言えば通じるかもしれないけど
void演算子と勘違いされる可能性がなきにしもあらず
>>684 Element::setAttribiute('src', ..)
HTMLScriptElement::src = ...
HTMLScriptElementはElementを継承している
もしcreateElement('script')で必ずしもHTMLScriptElementが生成されるとは限らない
(例えばXBLのscript要素が生成される可能性がある)ならばsetAttribiuteを使う
最初からHTMLScriptElementしか相手にする気がないならsrcでおk
インターフェイスの存在理由そのものだろ
だいたいdocument.bodyなんつー超レガシープロパティを使っといて
しかもwindowなんつー明らかにブラウザ上での実行が前提のコードで
何で要素操作だけ「ブラウザ上に限らない(キリ」的に書いてんだって話
上半身は革ジャンなのに下半身は海パン+便所サンダルみたいな気持ち悪さ
Prototype.jsってもう時代おくれなんですか? どこもjQuery使ってるような・・・ 一般的なプログラマーならPrototype.jsのほうがしっくりきますよね
698 :
Name_Not_Found :2010/06/11(金) 03:35:11 ID:6V/WZx/w
>>697 どちらも好き嫌いがある気がするが…
まあ、使いたいメソッドがあるかどうかじゃね?
Prototype.jsってRoRの一部だって聞いたけど、
RubyとオレオレJSライブラリって組み合わせだってよく使うし。
Prototype.jsはDOMの拡張が忌み嫌われているんじゃないの しかも作った人自身がその部分は失敗だったって言ってなかったっけ
Objectの拡張だろ
ページ内の幾つか(=連続してない)の要素<a>のonclickにある関数を書いておいて、 クリックでその関数が実行されたら、その要素の前や後の要素を特定って簡単ではないですよね? <a onclick="test('〜〜要素ごとに違う〜〜')" 現在考えているのは、document.getelementsByTagName('a')からString(a[i].onclick).match(/test\(/)が真である要素の配列をつくって、 onclick="test('〜〜の〜〜が最後に実行されたものと同じやつを探して、±1するというのなんですが、 これ以上にスマートなやり方は無いでしょうか?
>>701 何がやりたいのかよくわからないな
> クリックでその関数が実行されたら、その要素の前や後の要素を特定って簡単ではないですよね?
previousSiblingとかnextSiblingで辿ってくのじゃだめなの?
>>702 Lightboxみたいなのを自作しているんですが、前の画像次の画像へ移動するには前後のonclick="testを探さないといけなくて、
<a>の階層はバラバラなので、getElementsByTagName('a')がまず思いつきました。
>>703 a要素に連番の入ったidを割り振れば簡単じゃない?
なんだか基本設計を変えた方がよさげだけど。
サンプル見ないとさっぱりわからないネ 結局前後とは何を指してるのか
メモリーリークってIE7以降のブラウザにも影響あるのかな? そろそろIE6切ろうと思うんだが
>>706 ああ、誤解を与えたかもしれないが
DOM-HTMLがそもそもレガシーから始まっており
Window、HTMLDocumentそのものがレガシーの正当化に過ぎないという意味で
「レガシー」を使った
事実XHTML5でHTMLDocumentは使えないようになっただろ
>>704 ,705
前後はそうですね、
オミトロンで全ページ対象に導入しているuserscriptのようなものです。
素直にidつけて回してみます。。。とcss3セレクタでうまい取得方法がありました。
a[onclick^=test]
710 :
709 :2010/06/11(金) 17:50:27 ID:???
いろいろ途中で送信してしまった。 前後はそうですね、→jQuery('a[onclick^=test]')[4].onclick()の状況なら jQuery('a[onclick^=test]')[3]とjQuery('a[onclick^=test]')[5]ってことです。 セレクタで取得しても最後のイベントの発生した要素の番号がわからないので また別にいじらないといけないですね。orz
>>695 どうもありがとう
違いはないから名前も付いてないんですね
712 :
Name_Not_Found :2010/06/11(金) 19:35:26 ID:6V/WZx/w
>>699 その流れで、このスレでエライ怒られたことがある。
ちょうどPrototype.jsが話題だった頃。
質問した時に、要素にあれこれメソッドをくっつける作りになってて、
「そんなことしたら、他の人がいじろうとしたときに云々…」と。
おまえら俺のサイトでなにする気だよ!と思った。
>jQuery('a[onclick^=test]')[4].onclick() 何これjQueryの文法?見た感じべき乗でもなさそうだしきんもいのう
単なる属性セレクタだろ
CSS3ではこの辺も入るんだよな確か
^がべき乗じゃないときもいという意味なら、その発想の方がきもいな
アホを刺激しないように
^を実装するとしたらそれは演算子として扱うようにするのがたいていの開発者思想 ただJavaScriptにそれは通用しない
正規表現disってんじゃねーぞ いややっぱdisってもいいや
CSSでも実装されてるのに何を今さらって感じだな
>>718 悪いが、鬱陶しいから確証がないならいちいちリンク挙げんな
俺もだいたい目を通しているんだから、見落としが明らかなときだけ挙げてくれ
とは言え、今回は明らかに俺の誤りだったから
>>708 は撤回する
XHTML5でdocument.writeが使えないということを
HTMLDocumentをサポートしないと脳内変換してしまっていた
すまんかった
とにかく、俺が
>>696 で言いたかったのは
「レガシーな」HTMLDocument::bodyを前提にしておきながら
「レガシーな」HTMLScriptElement::srcを避けるのは無意味であり
スタイルとして一貫してなく不格好だということ
ここで俺は「レガシー」を後方互換性確保の意味合いが強いという
それだけの意味合いで用いている
根拠はDOM2-HTMLの1.1-1.3節、DOM-FAQあたり
規定で定義されればレガシーでない、という立場なら
今やdocument.allすらレガシーではなくなった
^= $= この2つは分かりやすい *= ~= |= これらはあれだな
レガシーレガシー連呼すんじゃねえよ 横文字かっこいいとかおもってるの?
説明下手なだけ、ほっといてあげるべき
726 :
679 :2010/06/11(金) 22:18:25 ID:???
>>718 , 722
なんだか濃密な議論サンクス
深い意味もなくsetAttribute使ってたけど、
不快感を感じる人もいるんだね。
俺としては、属性値の設定はsetAttributeで統一したほうが読みやすい
って感じがあるな。慣れちゃったからかも。
ところでdocument.getElementsByTagName('body')[0]って、
ブラウザ互換的に安全に使えたっけ?
>>722 レガシーレガシー言うから、久々にマジック・ザ・ギャザリング思い出しちまったぜ。
レガシーはレガシー。他の言葉がない。
遺産でいいじゃん
732 :
679 :2010/06/11(金) 23:39:16 ID:???
>>729 前からIEは嫌いだけど、setAttributeは使えるだろ。
ふつーイベントにsetAttributeを使うことはないし、
IE 6以降なら、基本的にstyleだけ気をつけりゃ十分。
>>726 setAttributeは値を必ず文字列として扱う
たとえばinput.setAttribute('checked', true)は<input checked="true">にする
もちろんこれは誤りでchecked="checked"が正しい
だが最近はブラウザが補正してくれているから気付かない奴が多い
setAttributeは属性の意味を考慮せず言われたままセットするだけだから
HTMLの文法が頭に入ってなきゃきちんと使えないんだよ
DOMをHTMLに戻して検証にかければ、当たり前だがエラーになる
一方、DOM-HTMLのはプロパティの種類に応じて
数値・ブール値として、あるいは絶対URIに適切に変換してくれる
いろんな情報がごっちゃになって結局間違えるくらいなら
setAttributeなんか使わない方が無難だろうよ
IEバグで言えば、ごく一時期setAttribute('class')||setAttribute('className')なんて
馬鹿げた書き方が流行ったんだぜ
IEは酷いが、こんなのに疑問すら持たず喜ぶアホどもも大概だ
> HTMLの文法が頭に入ってなきゃきちんと使えないんだよ 考え方の相違かもしれんが、HTMLを理解してる人には、 むしろsetAttributeのほうが自然で使いやすいと思う > 数値・ブール値として、あるいは絶対URIに適切に変換してくれる こういう変換は、コードに不透明感が出るというか
動きゃいいんだよ、好きにやれや
> checked="checked"が正しい HTML 4.01 Transitionalだとこういう書き方はしないし HTMLの種類によって正しいかどうかは違ってくるかと
それじゃ納得行かないから揉めてんだろw
主に
>>696 さんが
>>737 してもいいんじゃないの
checked="checked"の属性名を省略してるってことでしょ
>739 違ってたら申しわけないけど、 それは省略したんじゃなくてxmlに対応させたんじゃなかっけ
var Foo = function(){}; Foo.prototype = {}; と、 var Foo = {}; についてですが、 前者の中身にアクセスするにはFooをインスタンス化しないといけない。 後者は中身をスタティックに呼ぶことができる。 という認識であっていますか?
インスタンスがなくてもFoo.prototypeから直接アクセスできるお
744 :
742 :2010/06/12(土) 08:00:09 ID:???
>>743 確かめました。
参考になりました。どうもありがとうございます。
>>728 懐かしいなw
俺もウルザ、マスクス・ブロックの頃はまってたわw
最近、ホームページを作っています そろそろJavaScriptを使ってみようと思っているのですが中学生でも始められますか? あと、家にパソコンないんですけど携帯で作ってる人もいるみたいなのですが大丈夫ですか?
釣りだろうが携帯は無理
携帯でタグ打ち(笑
携帯のメールでスクリプトタグかなんか使って動きつけたりして遊べたよな
ケータイのメモ帳なんかでサクサクっと作ってたらそれはそれでカッコいいかもな。
751 :
Name_Not_Found :2010/06/13(日) 00:25:06 ID:r7uGUWW0
OS:WinXP-Pro,ブラウザ:Firefox3.6.3,サクラエディタ使用 HTML5のCanvasで線の色が徐々に変わる線グラデーションを実現したいのですが うまくいきません。 記述は原点座標からsetInterval()で繰り返し動作しながらX,Yが増分し、そのXを16進数化 して色を指定する形をとっています。 var canvas0 = document.getElementById("Canvas0"); var context0 = canvas0.getContext("2d"); //以下繰り返し動作 x += dx;//座標の増分 y += dy; iroX="#9999"+x.toString(16);//16進数化して色を指定 // context0.strokeStyle = iroX; context0.lineTo(x, y); context0.closePath(); context0.stroke(); context0.moveTo(x, y);//開始位置に起点を移動 これだと線の色は変わりますが描いた線全体が同時に変わってしまいます。 理想形は [茶色→→→→→→青色] です。 どうすべきでしょうか?
フルブラウザ用に即席で単純なbookmarkletを作ったことあるけど あのダイヤル入力でサクサクは無理だった
754 :
Name_Not_Found :2010/06/13(日) 01:07:05 ID:LGBUqndd
function Class(name){ this.name = name; this.meth = function(){ var req = opensocial.newDataRequest(); req.send(function(){ alert(this.name)}); }} opensocialの話が含まれていますが、Javascriptでの書き方の問題だと思うので教えてください。 非同期通信を行いリクエストを受けた後のcallback関数内のalert(this.name)でエラーが出ます。 thisがClassオブジェクトを指していないのが原因だと思うのですが、 callback関数内で呼び出しもと?のClassオブジェクトのプロパティを参照したい場合どうしたら良いのでしょう?
>>754 var self = this;
req.send(function(){
alert(self.name)});
}}
一日ずーといじってたら、何をどうして良いのか分からなくなって仕事がすっかり止まってしまった
757 :
751 :2010/06/13(日) 01:36:04 ID:???
>>753 レス有難うございます。beginPathを含めましたが、今度は線そのものが出なくなりました。
Googleで調べましたが、面内のグラデーション記述はありましたが、線の色変更は見つかりませんでした。
下記が試したコードです。
context0.moveTo(0, 0)
context0.lineWidth = 5;
var x = 10;
var dx = 1;
var iroX;
function draw() {
x += dx;
y += dy;
iroX="#9999"+x.toString(16);
//
context0.beginPath();
context0.strokeStyle = iroX;
context0.lineTo(x, y);
context0.closePath();
context0.stroke();
}
function startDraw() {
timerID=setInterval(draw, 20);//繰り返す
}
再度間違いをご指摘頂けないでしょうか?
context0.beginPath(); context0.moveTo(0, 0);
>>755 有り難うございます。
思った通りの動作をしました。
>>760 draw内の
beginPathとlintToの間にmoveToでアンカーを初期化しないとあかん
てか、 var grad = ctx.createLinearGradient(0, 0, WIDTH,0); grad.addColorStop(0,'#999900'); grad.addColorStop(1,'#9999ff'); ctx.strokeStyle = grad; ってしておいて、setIntervalのなかで ctx.lineTo(x, y); ctx.stroke(); だけでいけるよ yの初期化忘れないようにね
>747 >748 >749 >750 ありがとうごさいます 友達に携帯でもJavaScriptが使えるiswebというサイトを教えてもらいました 作れたらまた書き込みます
>>763 お前は何を言っているんだ
てか、JSに関係ないことは書かなくていいから
あんま中学生いじめてやるなよ 書籍かえばノートにでも考えながら書いて いざパソコンを触る機会があったら コードをうつして実行してみればよい 昔の人は机上デバッグで本当にそんなことやってたらしいよ
>>761-762 できました。下記が試した記述です。
var x = 0;
var y = 0;
var dx = 1;
var dy = 1;
var iroX;
context0.lineWidth = 5;
function draw() {
context0.beginPath();
context0.moveTo(x, y)
x += dx;
y += dy;
iroX="#9999"+(x+16).toString(16);
// (x+16)で色の補正。これが無いと黒から始まってしまう。
context0.strokeStyle = iroX;
context0.lineTo(x, y);
context0.closePath();
context0.stroke();
}
なお、今回の線描画は最終的には直線でなく関数の曲線で行いたい
ので
>>762 さんの方法は適用できません。
canvasで作成された画像のみが表示されているhtmlがあるのですけど、 このhtmlを<img src="hoge.html">みたいな感じにできないでしょうか?
そこはiframeだべ
770 :
768 :2010/06/13(日) 12:35:35 ID:???
>>769 やっぱそうしないとだめですか。
サーバ側のでードから画像を生成するプログラムなんかは、
HTTPヘッダでContent-typeを指定すればブラウザで画像として扱われるのですが、
JavaScriptはクライアントサイドですし、
canvasはそもそもそれら画像生成プログラムとは根本的に仕組みが違う気がするので、
無理なのかなぁとは思ってました。
どうもレスありがとうございました。他の方法でページにうまく組み入れることにします。
それより地震だよ結構長く揺れてるよコワイヨママン
771 :
Name_Not_Found :2010/06/13(日) 12:39:18 ID:g/ZEW02X
Firefox3.6のWinXPです。 画像を読み込み面内で移動させて、その軌跡の線を下記のように 描こうとしています。 ------- | | -----------☆ (教えてもらった記述) var canvas = document.getElementById('canvas1'); var ctx = canvas.getContext('2d'); var img = new Image(); img.onload = function() { ctx.drawImage(img, x, y); //x,yを変化 }; img.src = "Gazou.png"; ※線描画の記述は割愛 ここで、画像が上記のPNGの場合は上のAAのように 線と画像が分離して描画できたのですが、GIFだと ☆☆☆☆☆ ☆ ☆ ☆☆☆☆☆☆☆ と連続してしまいます。何故でしょうか?
onload使うのを止めても同じ結果?
javascriptで function test(x,y,z){ } という関数を作って test()と引数を入れないでもエラーが出ることなく動作します xは必須でyとzはオプションにしたい場合 function test(x,y,z){ if(!x) { return; } } といった感じで実装しないといけないのでしょうか? それとyとzは指定しなかった場合デフォルトでとある値を使いたいので某言語風に function test(x,y=1,z=2){ var yy=y; var zz=z; } のような書き方をしたのですが動きませんでした この場合 function test(x,y,z){ var yy=y; var zz=z; if(!y){ yy=1; } if(!z){ zz=2; } } と書くしかないのでしょうか?よろしくお願いします。
function test(x,y,z){ if(typeof x != 'undefined') { y = y || 1; z = z || 2; 処理 } }
>某言語風に トライ&エラーも大切だけどそのぐらいはリファレンスで済まそうぜ false扱いの引数を無視していい場合 if (!x) throw "arguments error"; y = y || "default"; 厳密にチェックしたいなら if (arguments.length < 1) throw "arguments error"; // 最低1個 switch (argument.length) { case 0: throw "arguments error"; case 1: y = "default"; case 2: z = 0; }
777 :
773 :2010/06/13(日) 13:32:01 ID:???
>>775-776 レスありがとうございます
本質的には同じような感じに処理しないといけないんですね
throwはどこに投げてるのか分かりませんがこういう書き方もできるんですね
その辺も含めてわからないことが多いので
ご指摘通り
>>1 にあるMozillaのリファレンスをじっくり読んでみたいと思います
>>776 重箱だけど、 throw "文字列" はIEでエラーになるよ
エラーが起これば良いわけだから動作的にはあんまり問題ないけど
正しくエラーを投げるには throw new Error("文字列");
FirefoxとIE6では問題なかったからそれでいいと思ってた> throw "hogehoge";
>>777 強いて言えばエラーコンソールに
>>778 知らなかったthx
IE8で試してみたら、catchする分には問題がないけど
エラーメッセージとして投げるにはErrorオブジェクトの必要があるみたい
If Crockford catches an error, he roundhouse kicks it again.
*** JS ************************** var skip; $("#box").click(function(){ skip = 0; $("#box a").click(function() { skip = 1; }); if (skip == 0) { alert ("box selected"); } }); *** HTML ************************** <div id="box" style="width:100px;height:100px;"> <a href="">link</a> </div> ************************************ jQuery 1.3.2です。 100x100のDIVボックスがあり、ボックス内をクリックすると「box selected」とメッセージを出します。 しかし、Aリンクをクリックした場合は表示しないようにしたいのですが、上手く動作しません。
>>783 .clickの指定からしておかしいな。それはboxがくりっくされたときにaのonclickにつけてないか?
aがクリックされたらイベントの伝播を止めればいけるはず。ぐぐれば山ほど情報が出てくるよ。
var skip = 0; $("#box").click(function(){ if (skip == 0) { alert ("box selected"); } skip = 0; }); $("#box a").mousedown(function(){ skip = 1; }); こうだな
>>784 が答えてるが補足。
http://semooh.jp/jquery/cont/doc/event/ 要素が重なってるので、clickイベントが上の要素下の要素、
つまりaタグからdivタグへと順に伝播(バブリング)してゆく。
aタグのclickイベントの中で return false とするか、
Eventオブジェクトの stopPropagation() 等を呼んでやればいい。
>>782 テキストフォームの値をバリデーション関数に渡して
エラーだったらalertを出して処理中止、そうでなければ続行、
なんていうときにこう書いたり……しない?
try {
バリデーション関数(xxx);
} catch(message) {
alert(message);
return false;
}
void型の関数の場合、無名関数を使って、 プロパティのように呼ぶことも可能ですが、 ()を省略したいがために、 無名関数を使うのはやめたほうがいいですよね?
なにを勘違いしたのかわからんが関数実行に()は不可欠
すみません無名関数を何か勘違いしていたようです
790 :
783 :2010/06/14(月) 01:09:11 ID:???
>>784 >>785 >>786 ありがとう!
重なると伝播するんだな…
aタグのclickイベントの中で return false とすると、
今度はaタグのリンクが機能しなくなってしまうので、
>>785 さんの方法で希望する動作になりました。
jQueryのanimateについてです。 変数ABCの中の数字をbackgroundPositionに入れる場合 $("#Contents").stop().animate({ backgroundPosition : ABC+"px 0" }, 'slow','swing'); とすれば背景の横の位置にはABCの値が入りますが 縦の位置に入れたい場合どうすればよいのでしょうか? おしえてください。
>ABC+"px 0" 自分で答え書いてないか? 何か勘違いしてる?
コピペか? まあそんなのはどうでもいいけど pxのうしろの0はなんなの?
>>792 上の例の場合
水平がABC 垂直位置が0
になってしまいます。
これを逆にしたいのです。
>>793 コピペではないです。
>pxのうしろの0はなんなの?
背景の垂直の位置です。
これがないと水平位置ABC 垂直位置50%になってしまいます。
逆にしたいならABCと0を逆にしたらいいじゃないのさ
>763です 無事使えましたが質問があります document.write("テスト") はiモードとフルブラウザ両方で動いたのですが alert("テスト") がiモードだけ動きません どうしてなのでしょうか
>>796 セキュリティの関係で無効化されてるだけ
iモードがしょぼいとしか言いようがない
フルブラウザでそのまま開発して下さい
>>795 ためしに
backgroundPosition : "0px menuTop+px"
としましたが動かないです。
逆にしたい場合どう記述すれば良いでしょうか?
alert("0px menuTop+px")
>>786 バリデーション関数は例外前提で作らないだろ…
>>798 答えを書いてもいいけどそれじゃまた同じとようなことで躓くだろうからちゃんと勉強しろ
まずは""でくくられた部分はテキストとして扱われることくらい理解してこい
当然テキスト中では変数の内容参照なんて無理だからな
質問です。 for文で複数の対象にそれぞれ引数の違うonclickをつけたいのですが eleAry = document.getElementsByTagName(td); for (id=0; id<ary.length; id++){ eleAry[id].addEventListener('click',function(){change(id);},false); } のようにしても、どの対象も実行される時のid値を参照してしまいます。 これをfor実行時のidを綺麗に渡してやる方法はありますか?
804 :
Name_Not_Found :2010/06/14(月) 17:30:14 ID:eAV3KPzU
>>803 スコープについて調べてみるといいかもしんない。
for(var id=0 ; id<eleAry.length ; id++)(function(id,item){
item.addEventListener('click',function(){ change(id); },false);
})(id,eleAry[id]);
805 :
804 :2010/06/14(月) 17:32:11 ID:eAV3KPzU
ごめんなさい。
>>804 は変数名変えた方がわかりやすかったかも。
for(var i=0,l=eleAry.length ; i<l ; i++)(function(id,element){
element.addEventListener('click',function(){ change(id); },false);
})(i,eleAry[i]);
>>804-805 おおお、ありがとうございます。
無名関数使うと解決できるんですね……!
何が問題だったのかを理解できていればいいんだが
見りゃ分かる通りボタンを押すとdivタグが非表示になるスクリプトなんだけど、リロするとまた表示されちゃうのはどうにかなりませんか? <div id="area"> <buttononClick="document.getElementById('area').style.display='none'"> </div>
809 :
808 :2010/06/14(月) 18:39:15 ID:???
ソース修正します <div id="area"> <button onClick="document.getElementById('area').style.display='none'">click!</button> </div>
くっきーを使うんだ
循環参照などのメモリーリークはIE6のみで発生するものですか?
そんな簡単に退治できるような代物じゃないぞ、あれ
手元で確認したかぎりIE7でも発生します
単なる循環参照ではリークしない DOMとの循環参照ではリークする ページが閉じられようとリークを開放できない(ブラウザ自体のリークになる)のがIEのバグ だと認識してたけど自信はない
unloadで後処理すればいいってもんでもないの?
816 :
Name_Not_Found :2010/06/14(月) 22:12:11 ID:eAV3KPzU
>>815 安直に「参照が無くなればなんとかなるだろう」と思って、
onunloadで端からnull突っ込んでく作戦は失敗したことがある。
null突っ込むんじゃなくて、きちんとdetachEventしてもダメ? イベントリスナとして使ってるクロージャが原因でリークしがちだから・・・(もちろん他のパターンもある) リーク対策は各種ライブラリのコード読むと、コメントで明示されてたりするから参考になるかも
818 :
Name_Not_Found :2010/06/14(月) 23:11:56 ID:eAV3KPzU
>>817 あー、それはわかんないや。
当時の自分にはそこまで考える力がなかったかも。
819 :
796 :2010/06/15(火) 17:22:10 ID:???
ゲームを作ろうとしているのですが1つ質問があります PCだとそうならないようですが、時間が経つとGIFアニメが止まってしまいます そこで止まる前に読み込んで交換するを繰り返しているのですが、 しばらくすると非常に重たくなります メモりを解放(?)するにはどうしたらよいのでしょうか
821 :
Name_Not_Found :2010/06/15(火) 20:14:05 ID:jMFm/3MC
Javascriptを使って <input type="buttpn" value="チェック" onclick="check(1);"> と言うボタンがあったとして、jQueryではどういう書き方で onclick(1)を実現すればいいのでしょうか? $("button").click(function()) では実行されませんでした。
セレクタの使い方がまず違う とりあえず基本をもうちょっと理解してからの方がいいような気がする
[type="button"] [value="チェック"] input[type="button"] input[value="チェック"] どれでもどうぞ
<script> check(1); </script>
一つの要素に定期的に画像を一つ入れてイベントを負荷することをやっているんだが、 メモリリークとかで気を付けることありますかね?以下二行繰り返し部分 elm.innerHTML = '<img src="hoge.jpg">'; elm.getElementsByTagName('img')[0].(attachEvent おr addEventListener)('onload', function (){ 処理 }) while(elm.childNodes.length) delete elm.childNodes[0]とか使わずにinnerHTMLも使っちゃって楽してるんだけど 大きな問題あります? 対象ブラウザはIE8, Chrome firefoxだけでいいです。
メモリリーク気にするなら、主に{処理}のところが問題になる気がするんだが
827 :
825 :2010/06/15(火) 23:53:20 ID:???
処理は画像のサイズがwindowサイズより大きかったらwidthとheightを窓サイズより小さく指定です。
いやだから、その処理を「どう書くか」が問題なんだが…… まあそれよりも先に気にするべきことがあるレベルだと思う
とりあえずクロージャ使ってないなら大丈夫だろう
830 :
821 :2010/06/16(水) 00:37:39 ID:???
>>823 これは
↓この部分に入れて使用しますよね?
$("").click(function())
で、「ボタンがクリックされたら」という条件を書く事は出来ますが、
>>821 のonclickイベントのように関数を実行するにはどうするのでしょうか?
$("input[type="button"] ").click(function(){
check(1);
});
これだと、1の値を変えたい時は無理だし・・。
1を書き換えたらええやん 何言ってるのかよくわからない
自分が何をしたいか良く分かってないんじゃないか。 <input type="buttpn" value="チェック" onclick="check(1);"> これ↑と同じことはそれでできるよ。
1はどこにあるんだよ
察するに、今までonclick="check(1)" onclick="check(2)" とHTMLに書いてたのをjQueryにしようとして 1、2を書く場所に困ってるんじゃねーの HTMLの構造がわからんが、こんな感じかね $('input[value="チェック"]').each(function(i){ $(this).click(function(){check(i+1);}); });
835 :
821 :2010/06/16(水) 02:23:31 ID:???
例えば単純なんですが、 <input type="buttpn" value="チェック" onclick="check(1);"> function check(val){ alert(val); } みたいにすると、1だろうと2だろうとアラートで表示されますよね? 用はこういう風な書き方をjQueryでどうやってやるのかな?と思いまして。
同じように引数で変数渡せばいいじゃない
837 :
Name_Not_Found :2010/06/16(水) 03:28:14 ID:W3FzSFBQ
for (var i = 0; i < 3; i++) { $("div#" + i).click(function(){ alert(i); }); } divタグが持つid属性に等しい値をアラートにあげたいのですが、 すべての場合で4をアラートにあげてしまいます。 クリックされたdivタグのid属性の値を見る以外に解決する方法はありますか?
838 :
Name_Not_Found :2010/06/16(水) 03:56:12 ID:5syzzluM
>>837 それちょっと前に答えた気がする…
>>805 だ。
スコープについて調べてみるといいと思う。
そのスクリプトをちょっと書き換えると、
var i=0;
for( ; i<3 ; i++){
$("div#" + i).click(function(){ alert(i); });
}
ってなるでしょ。このとき、無名関数の中の i は何を参照するか、
って考えるとわかりやすい(と思う)。
>>835 それなら
>>830 でも1だろうが2だろうがalertで表示されるでしょ
どういうことがやりたいのか伝わってこないな
例えば、
<input type="buttpn" value="チェック" onclick="check(1);">
<input type="buttpn" value="チェック" onclick="check(2);">
…
<input type="buttpn" value="チェック" onclick="check(10);">
みたいにたくさんあるのをjQueryで書きたいっていうのだとして、
じゃあ「1,2,…,10」はどこから出てきたの?って話しになるから答えようがない
「inputが出現する順番に従ってcheckに渡す」とかなら
>>834 みたいに書いたらいい
840 :
821 :2010/06/16(水) 09:42:27 ID:???
>>839 check()内の値は確定していないんです。つまり、1か2かわからないと。
check()内の数値をPHPで出力して
どのIDのデータか判別してJavascriptで処理させたいのです。
ですので、jQueryを使わない場合は
<input type="buttpn" value="チェック" onclick="check(<?php echo $id ?>);">
function check(val){
switch(val){
case "1":
/* 1の場合の処理 */
break;
case
/* 2の場合の処理 */
break;
}
}
と言うように、check()に渡される値に対して処理を分岐させられます。
inputが出現する順番に従って全て渡したり、inputが複数あるのではありません。
つまり、「ボタンを押してそのボタンから渡される数値によって処理を分岐したい」
と言う事をjQueryでどう書けば良いか分からず、質問させていただきました。
それjQueryの構文とか関係ないやん
>>836 で終了
842 :
821 :2010/06/16(水) 12:23:34 ID:???
その「引数を渡す」という書き方がjQueryだと全く分からないのです・・・
だからjQuery関係ないって JavaScriptの基本だろ
>>840 それなら
>>830 の
$("input[type="button"] ").click(function(){
check(<?php echo $id ?>);
});
これで解決なんじゃなくて?
845 :
Name_Not_Found :2010/06/16(水) 13:49:21 ID:Xo5qi2zB
>>842 言いたいことはわかったけど、引数が何によって決まるかを
書いてくれんと答えようがないっす。
846 :
821 :2010/06/16(水) 13:50:08 ID:???
>>844 もちろんそれで解決するんですが、
Javascriptを外部ファイルにしたい時は無理です。
何か引数を渡す方法があると思うんですが、
無い場合はjQueryを使わない方法でやります。
847 :
845 :2010/06/16(水) 13:54:12 ID:Xo5qi2zB
あ、勘違いしたかもごめん。 <input type="button" onclick="check(1);" id="1"> <input type="button" onclick="check(2);" id="2"> : なんだったら、 <input type="button" id="<?php echo $id ?>"> $("input[type=button]").click(function(){ check(this.id); }); なんだけど、どうせPHP使えるならQuerySelector使うより素直に <input type="button" onclick="check(<?php echo $id ?>);"> って書いた方がループがない分だけ速い。
848 :
821 :2010/06/16(水) 14:02:16 ID:???
>>847 ありがとうございます。結局はこうするしかないと言う事ですね。
そしてjQueryを使わない方が速いと。
なんでもjQueryにすればいいわけではないですね、納得しました。
document.writeでスクリプト要素を書き出してjQueryを読み込ませると そのスクリプト内で$(document).ready()などが使えません 全てのHTMLヘッダにjQuery読み込みのタグを追加するしかないのでしょうか?
>>821 $("input[type="button"] ")[0].onclick()ではないのか?
ぱっと読んだ限りだと「jQuery(というかjs)でボタンを押したことにしたい」
ということだと思ったんだけど。
>>843 とかもこう思ったハズ。
が、
>>848 では違うと否定されているという・・・
>>849 jQuery書き出しとreadyでscriptタグ分ければいけるんじゃないのか?
クロージャでメモリリークってIEだけですか
852 :
834 :2010/06/16(水) 16:17:47 ID:???
>>840 <input type="buttpn" value="チェック" id="check_<?php echo $id ?>">
ってしておいて、
jQuery(function($){
$('#check_1').click(function(){/* 1の時の処理 */});
$('#check_2').click(function(){/* 2の時の処理 */});
});
854 :
Name_Not_Found :2010/06/16(水) 17:16:09 ID:Xo5qi2zB
855 :
Name_Not_Found :2010/06/16(水) 20:47:49 ID:DFs81B0t
JSONPで機密情報を扱う際のセキュリティについて質問させてください。 Cookieによるログイン認証済みであれば機密情報をJSONPで返すAPIを作っています。 機密情報は特定のドメインでだけ利用できるようにしたいので以下のように実装してみたのですが、 これで第三者に悪用される危険性はなくなったと言えるでしょうか? JSONPの中身 (function(){ if (location.hostname.match(/\.allow\.example\.com$/)) { callback(JSONデータ); } })(); ダメだとしたら、どういう場合に問題が起きるのか教えてください。 ただし、データ利用側にXSS脆弱性などはないものとします。 よろしくお願い致します。
メモリリークって本来はブラウザ側がうまく扱うものなんですか?うまくやってないブラウザがおかしいんですか? それともうまくやってるブラウザは親切でやってくれてるだけでスクリプト書いてる個々人が気をつけてうまく書かないといけないものなんですか?
リーク箇所による
>>855 オミトロン使えばブラウザ側のlocation.hostname偽装は簡単。
859 :
855 :2010/06/16(水) 21:47:28 ID:DFs81B0t
>>858 情報ありがとうございます。
オミトロン(Proxomitron?)というものを知らなかったので調べてみたのですが、
これはPCにインストールして使用するものですよね?
となると、第三者がどうこうできるものではないような気がするのですが、
もしオミトロンを利用して機密情報を盗むことが可能であれば、
その手法を教えて頂けますか?
もし単に自分のlocation情報が書き換えられるよ、というだけなら、
今回の問題には影響ないと考えています。
よろしくお願い致します。
>>859 仮にHTTPSでログイン認証して、
Cookieでログイン状態をキープするってことなら、
そもそもlocation.hostnameなんていらなくない?
>>859 >特定のドメイン
と書いてあってscriptにも判別コードが書いてあったから一応いっておいた。
(認証を受けた人がやろうと思えば特定のドメイン以外で利用可能ということ。)
>>861 ログイン認証時に特定のドメインかどうかのフラグを立てておいて、
Ajaxで使うサーバサイドスクリプトで
データへのアクセス権限を指定すればいいんじゃないの?
>>858 も言ってるけど、
location.hostnameは偽装可能で意味をなさないから、
JavaScriptでふるいにかける意味がない。
863 :
837 :2010/06/16(水) 23:31:57 ID:PlphhQq3
>>838 スコープチェインによってi=4を参照して4をアラートにあげるということがよくわかりました。
ただ、思った通りの動作をさせるためにどのようなコードを書いたら良いのかわかりません。
また、
>>804-805 であげているコードを見たのですが
for文の後に無名関数と引数?などがあり何をしているのかがいまいち読めません。
何を調べたら良いでしょうか?
求めてるのとは違うかもしれないけど、DOMそのものに値を保持させる方法もあるよ。
DOMにしなければいけない理由はなんでしょうか。 ザクレロじゃだめなんでしょうか?
DOMは廃止か
>>863 function generateCallback(param) { return function() { alert(param); } }
for (var i = 0; i < 3; i++) {
$("div#" + i).click(generateCallback(i));
}
ループ毎にスコープを作ればいい
スコープを作るには関数呼び出しをすればいい
868 :
855 :2010/06/17(木) 00:32:13 ID:ckaLz0IY
>>860 第三者のサイトにこのAPI呼び出しが仕込まれてしまうと、
そのサイトにログイン認証済みのユーザーが訪れた際に
機密情報が渡ってしまうわけです。
それを防ぐ手立てを考えております。
つSame-Originポリシー
870 :
855 :2010/06/17(木) 00:41:04 ID:ckaLz0IY
>>861 >(認証を受けた人がやろうと思えば特定のドメイン以外で利用可能ということ。)
それは確かにそうなのですが、今回の機密情報というのはそのユーザーに関わる情報なので、
当の本人が自分の意思で第三者のサイトにデータを漏洩させたとしても、
何ら問題はないと考えております。
今回問題だと考えておりますのは、機密情報にアクセスする権利のない第三者が、
正規のユーザーを陥れることによって機密情報を盗み出すことができるかどうか
ということです。
もし、それ以外にもセキュリティホールになりうる事象があれば
ぜひお教えいただきたく思います。
872 :
855 :2010/06/17(木) 00:57:21 ID:ckaLz0IY
>>862 ちょっと理解できなかったのですが、ちょっと背景を整理させて頂きますと
・私のサイトでは、ログイン認証機能(セッション管理にはCookieを利用)と、
ログイン認証済みの場合に機密情報を出力するJSONP APIを提供しています。
・このJSONP APIを利用したいのは、サービス提携している別ドメインのサイトです。
※そのためXHRは利用できず、JSONPでデータ提供しようと考えました。
>Ajaxで使うサーバサイドスクリプトで
と仰っているところから、もしかするとXHRによるデータ取得を想定されているのかと
想像したのですが、もし違っていたらすみません。
873 :
855 :2010/06/17(木) 01:23:43 ID:ckaLz0IY
>>871 はい、まさしくその問題についての対応を考えております。
提示して頂いたサイトも読んだのですが、リファラチェックは同サイトにも
ある通り完全性がなく論外です。
また、クエリストリングに推測不可能な文字列を含めることで不正利用を防ぐ、という方法を取った場合、
その文字列を生成するのは提携サイト、評価するのは私のサイトということになります。
すると、その文字列が正しいかどうかを確認するために、別途Web APIなどで通信しなければならなくなりますし、
何よりその文字列にユーザーを紐付けることができないため、確実性が保証できません。
つまり、ユーザーAが正規の方法によって取得した秘密の文字列を、ユーザーAが運営するサイトで使用すれば
ユーザーBの情報を抜くことができてしまうわけです。
これは秘密文字列に有効期限を設けることによってある程度防げますが、100%ではありません。
もし、私が
>>855 に書いた方法によって確実に漏洩を防ぐことができるのならば、
それに越したことはないと考えたわけです。
それで大丈夫! 心配しなくて良いよ! どんどん漏えいさせてくださいね!!
>リファラチェックは同サイトにもある通り完全性がなく論外です。 え、そうなの? XSS対策でここを見て弾くような実装はあるし、 それはリファラが(ユーザが自分で偽装しようと思わなければ) 信頼できる値だからだと思ってたけど。
jsonp発行する前にサーバーサイドでチェックすりゃいいじゃん
877 :
855 :2010/06/17(木) 01:55:59 ID:ckaLz0IY
>>874 もし冷やかしでなく本当に漏洩の危険があるのであれば
どういった場合に漏洩するのか教えてください。
よろしくお願いします。
878 :
855 :2010/06/17(木) 02:02:23 ID:ckaLz0IY
>>875 一部のセキュリティソフトはリファラを出力しないようにしてしまうため、
そういったユーザーはリファラでアクセス元を確認することができないのです。
リファラは第三者が偽装できない情報のため(昔Flashで偽装できる脆弱性があったそうですが)、
取得さえできれば確実な確認手段として利用することができます。
しかしながら、前述のようにリファラを送信しないユーザーもおり、
そういう意味で補助的にしか利用できないわけです。
879 :
855 :2010/06/17(木) 02:06:28 ID:ckaLz0IY
>>876 サーバーサイドでということは私のサイト側でということになるかと思いますが、
何をチェックすればよいかお教え頂けるでしょうか?
>>855 String.prototype.match=function(){return true;};
初歩レベルな
ちなみに、Chrome/Safari/Opera限定で location.__defineGetter__('host',function(){return 'hage'});// location.host -> hage とか、Firefoxならwatchでやりたい放題とか色々あるよ。
882 :
855 :2010/06/17(木) 02:33:04 ID:ckaLz0IY
>>880 ありがとうございます!
プロトタイプの書き換えは完全に頭から抜け落ちていました(汗)
確かJavaScriptでは演算子はオーバーロードできなかったと思うのですが、
であれば
if (location.hostname == 'allow.example.com')
とすれば大丈夫でしょうか?
また、もしこれもダメだとしたら、SCRIPTによるチェックは他に考えられませんでしょうか?
よろしければお知恵を貸してください。
よろしくお願い致します。
883 :
855 :2010/06/17(木) 02:38:21 ID:ckaLz0IY
>>881 >>880 すみません、881さんの書き込みを読む前に882を送信してしまいました。
ブラウザによってはlocation.hostnameなどの値まで書き換えられてしまうのですか!
これは全く思いもよりませんでした。
システム値を変更できるなんて、もはやセキュリティホールではないかとすら
思えてしまいます・・・。
もはや望みはほとんどありませんが、その方法を持ってしても破れないチェックを
SCRIPT側のみで実装することは考え得りませんでしょうか?
どうぞよろしくお願い致します。
884 :
Name_Not_Found :2010/06/17(木) 02:41:39 ID:Ki4ACcUD
(HTML板より誘導されて来ました) 結果(値)の出力フォームで質問です。 OS:WinXP,ブラウザ:Firefox3.6.3,サクラエディタ使用 JavaScriptで例えば、 ver xA = 3; ver xB = 2; として ver xC = xA + xB; としたとき、xCをブラウザのフォーム(テキストフォーム?) [ ] 内に出すには どうすれば良いのでしょうか? 入力はinputタグの例が見つかりましたが出力の方が見つかりません。
>>883 そもそもユーザがそのページを保存して自サーバに置いて
hosts書き換えてアクセスしたらアドレスバーの値なんて何の役にも立たないから
>>876 の言う通りサーバ側で何かしら判断するべきじゃない?
リクエスト毎に動的なハッシュをhtmlに埋め込んでおいてそれが一致した時だけ値を返すとか。
>>884 入力の時に参照したvalueに今度は値をつっこめばいい
886 :
880 :2010/06/17(木) 03:49:12 ID:???
>>885 それはお前がお前のデータにアクセスできるって話でしかなく、お前が俺のデータにアクセスできるって話ではない
一言でいうと、885の書いてることを理解できてないよ
>>883 孫iframeでのクロスドメイン通信とか。IEでクリック音が出るって問題とかあるけど。
887 :
885 :2010/06/17(木) 03:54:14 ID:???
>>886 あれ?どっか読み間違えた?
自分が許す特定のハッシュ持ってるリクエストにだけレスポンス返すのだと何でダメなんだっけ?
888 :
880 :2010/06/17(木) 03:57:19 ID:???
889 :
880 :2010/06/17(木) 04:02:24 ID:???
>>887 ああ、ごめん。ハッシュについては間違ってないよ。
ただ、それについては
>>873 で言及されてるでしょ。
890 :
885 :2010/06/17(木) 04:11:03 ID:???
>>889 あぁ、なるほど。読みのがしてたわ。jsonp使ってるページは自分のサーバではなかったのか。
つか、
>>872 で言ってる通りセッション管理をCookieでやってるならJSONPのリクエストの時もそれ見たらいいって話じゃないのか
認証が自分のドメインならJSONPの時もCookie飛ばしてくるし。
891 :
880 :2010/06/17(木) 04:39:24 ID:???
いや、だからさ… 機密情報を扱うサイトAとBがあって、AからBにJSONPなどで情報を渡したいわけよ。 でも、実際にJSONP使うと全然関係ないサイトXから同じようにJSONPでその機密情報にアクセスできるわけでしょ。 クラッカーは自分のサイトXにトラップを仕掛けておいて、サイトAの利用者が訪れるのを待っていれば、 アクセスがあったときにトラップが発動して何も知らない訪問者の情報を盗めるでしょ。 アクセスしてるのは訪問者自身だからCookieは正規のものだけど、情報を掠め取るのはサイトXになるからCookieは役に立たないよ。
892 :
855 :2010/06/17(木) 05:18:28 ID:ckaLz0IY
880さん、885さん、いろいろとアドバイスありがとうございます。
JavaScriptのみでの実現は、やはり無理があったのかもしれません。
# ここまで自由奔放な言語だとは思いませんでした・・・。
>>886 の「孫iframeでのクロスドメイン通信」については全く存じなかったのですが、
これはどのような理屈で様々な第三者の仕掛けを突破することができるのでしょうか?
なぜ孫なのか、iframeを生成するのは誰なのか、などもよく分かっておりません。
不勉強で申し訳ありません。
>>888 のlocationオブジェクトとフルのURLを比較する方法を試したところ、
少なくともFirefox3.6とChrome5.0では問題ありませんでした。
他のブラウザについても会社で確認してみたいと思いますが、
やっぱり880さんも仰るように穴がありそうで怖いですね。
※ちなみに、 window.__defineGetter__('location', 〜) としても、
locationにゲッターを与えることはできませんでした。
# ちょっと頭が働かなくなってきたのでそろそろ休みます。
893 :
884 :2010/06/17(木) 12:34:10 ID:???
>>885 下記で試しましたが、「xC」とフォームに表示されます。
<form>
<input type="text" value=xC>
</form>
あと、「入力の時に参照したvalue」の意味が分かりません。
(数値はJavaScriptで定義しています)
<input type="text" value="def" id="t"> <script> document.getElementById("t").value="change" </script>
おまえがアホって事はよくわかったよ
>>893-894 レベル低すぎ。ここは手取り足取り教えるとこじゃないから。
参考サイトで駄目なら入門書籍を読むべきだと思うね。がんばって。
898 :
Name_Not_Found :2010/06/17(木) 16:04:49 ID:q3/3MC/1
>>863 亀レスですが。こういう事です。
for(var i=0 ; i<3 ; i++){
var fn = function(n){
$("div#" + n).click(function(){ alert(n); });
};
fn(i);
}
これを省略して、こうなる。
for(var i=0 ; i<3 ; i++){
(function(n){
$("div#" + n).click(function(){ alert(n); });
})(i);
}
forループのなかみが一つの文なので、ブロックを省略して、こう。
for(var i=0 ; i<3 ; i++)(function(n){
$("div#" + n).click(function(){ alert(n); });
})(i);
ブラウザによっては駄目だよね。ブラウザ書いてないけどさ。
901 :
899 :2010/06/18(金) 13:51:07 ID:???
>>899 そうなんですか!
できるだけ多くのブラウザに対応させたいのですが、どう書くべきですか
902 :
Name_Not_Found :2010/06/18(金) 19:33:51 ID:o4o7Wkf5
その認識で正しいと思う
ただのハンガリアンだろ
905 :
Name_Not_Found :2010/06/18(金) 20:50:06 ID:rZVWCYiH
ぶっちゃけ使いにくいよね、レスポンス悪いし
ないです
これはすごいな。 移動時のアニメーションの方法だけわからん。
起点と終点の座標求めてその間を動かすだけじゃん
こういう感じのページ作ってると段々ただ自己満足なんじゃないかって思ってしまう
>>910 あー確かにw
複数個同時に動かれると直線に動いてないのではないかと思ってしまう。
自己満だろ 他のサイトと著しく違う挙動はユーザーからすればわかりにくくて不便
よくあるリキッドレイアウトじゃん 動きがちょっと目新しいだけで
>>911 ま、試行錯誤でいろんな技を覚えて、
後で実際に使うかどうかを取捨選択すればいいんじゃない
できてやらないのと、できずにやらないのとでは、意味合いが全然違う
>>907 onmousedownとonclick/onmouseupの違いは大きいよな
何の意味があるのかさっぱりわからんところが凄い
prototype.js の Event.findElement についてですが フィルタを a[title=hoge] のようにセレクタ指定できますよね? これがclass属性だと引っかからないんですよ(試したのはIE8) セレクタは a[class=hoge] と a[className=hoge] でテストしてます 仕様なんでしょうかねぇ ご存知の方いますか?
計算できないと辛い 無い頭捻らないとならん
a.hoegじゃだめなの?
classとidは.と#しか対応させてないんじゃねw
922 :
918 :2010/06/19(土) 13:30:23 ID:???
>921 さ〜〜んくす! そうなるとIDとクラス名に半角スペースはNGってわけか…… まあ使ってないから良いか いや、とにかくありがとう。スッキリしたよ。
923 :
918 :2010/06/19(土) 13:36:13 ID:???
>920 礼をいいわすれた さんくす!
いやIDに半角スペースはどう頑張っても無理なんじゃ
あっという間に925。次スレでのテンプレ改訂提案ある?
クラス名に半角スペースって? a.hage.hoge じゃだめなの?
お前は何を言ってるんだ
クラスはスペース類区切りで複数指定 IDにスペースは含められない
> クラスはスペース類区切りで複数指定 って、どこを見れば仕様が書いてありますか? Netscape4.7だと出来なかった記憶があるんですよね
>>930 ありがとうございます。HTML 4.01以降では全て対応しているんですね
ひどすぎる
>>925 質問する前にブレークポイントおいてステップ実行してみろみたいなのを追加するのはどうかな
ひどすぐる
test
break;
keydownイベントが発生したときに、keyupとkeypressがそのキーでは発生しないようにする方法ってありますでしょうか? e.returnValue = false はkeydownのみに有効で、 e.stopPropagation()とe.cancelBubble = true;では聞きませんでした。
keydownもkeyupもkeypressも全部独立した別々のイベントだからな。 それぞれでキーの判定をするか、どこかにイベント無効フラグを 持たせておくぐらいしか思い付かなかった。
939 :
937 :2010/06/19(土) 20:48:39 ID:???
ですよね。 認識が間違ってたので修正。 htmlに書いてあるonpresskeyはreturnValue = falseで問題なかった。 window.addEventListener("keyup")で設定してあるkeyupはどうやっても無理だった。
940 :
Name_Not_Found :2010/06/20(日) 15:09:46 ID:47BHbN/6
ランダムに発生した任意の数をカラーコード(#xxxyyyy)に変換したいのですが、 スマートな(簡潔な)書き方が見つかりません。 今考えているのが、var iro0 = Math.floor(Math.random()*Math.pow(255,3)); として、 16進数変換 var iro1 = iro0.toString(16); により例えば 123f4 だったとしたら 文字列長より桁数は5桁なので、xxxyyyyの6桁表示との差分1桁用のゼロを前に1個 付けて 0123f4 → #0123f4 を考えています。 もっと簡潔な書き方を探しています(ググりましたが分かりません)。 宜しくお願い致します。
1行にはなった。 ('00000'+Math.floor(Math.random()*Math.pow(255,3)).toString(16)).slice(-6) ('00000'+(Math.random()*Math.pow(255,3)|0).toString(16)).slice(-6) ('00000'+(Math.random()*255*255*255|0).toString(16)).slice(-6) 俺にはこれが限界だ。
Math.floor(0x1000000*(1+Math.random())).toString(16).replace('1','#')
pow(255,3)っておかしいね。 256だな。
946 :
940 :2010/06/20(日) 20:23:47 ID:???
>>942 ありがとうございます。
ところで 1+Math.random() で1を足す意味は何でしょうか?
(Math.random()が0.5678とかだったら、1.5678になります)
1を足さないと値の範囲は0x0〜0xffffffffになる。 1を足すと値の範囲は0x1000000〜0x1ffffffになる。 これを16進表現に変換した後で先頭の「1」を「#」に 置き換えればできあがり。
あれ、fの数が間違っている。失礼。
0x1000000* この部分が自分だと絶対に思いつかないなぁ
(0x1000000 + [0x000000〜0xFFFFFFの乱数]) を作って 先頭の余計な1を#に置換してる 理解できなきゃ最後のreplaceを削除して 数値の桁数を注意深くカウントすれば分かる
普通にメモった
最近JavaScriptに興味を持った者ですが
今までWebアプリ等に携わったことがなく
WebAPIの取り扱い方についていまいちピンとこない状態でして
値付のURLを作成してたとえば
http://xxx.文字列 というようなAPI用のURLを作成した後どういった命令で送信して
どのようにしてXMLのデータを受け取るのかというところで詰まっているのですが
どなたか教えていただけないでしょうか
あまちゃんかなんかが大昔にやってたな
その命令というか機能はXMLHttpRequestだけど、ここでは 手取り足取り解説はしないので、自分で解説サイトや書籍を 探して勉強してね。
次スレは975超えたら。今回テンプレの変更はなしで。
了解
958 :
Name_Not_Found :2010/06/21(月) 15:44:52 ID:jfywUKL6
var obj = { a:"aaa", b:"bbb"}; var key = "c"; obj.key = "ccc"; // ←これを obj.c = "ccc" という意味にしたい どうすればいいでしょうか、教えてください。
obj[key]
960 :
Name_Not_Found :2010/06/21(月) 15:54:25 ID:jfywUKL6
即レスありがとうございました!
すみません。拡張子がつかないURLから画像をダウンロードさせるにはどうしたらいいでしょうか?
それってブラウザ側の設定じゃなかったっけ? セキュリティ→「拡張子でなく内容によってファイルを開く」有効にしてれば普通に見れるよ。 ダウンロードさせるってのの意味がちょっとわからないけど。 今まで無効にしてたのにyahooBlogの所為(全部拡張子なし画像使用)で有効にせざるを得なくなった。 デフォルトは有効だから気にしなくていいんじゃね。
963 :
961 :2010/06/22(火) 12:00:31 ID:???
あーすみません。説明が半端でした。おっしゃるとおり、拡張子なくてもブラウザが開いてしまうので、ダウンロードを強制したい場合です。 だから拡張子関係ないっすね。
>>963 基本的にURL(拡張子)とサーバ側から出力されるレスポンスヘッダーっていうのでブラウザが
勝手に動作を判断するから、この場合はサーバ側での変更が必要と思われる
965 :
961 :2010/06/22(火) 12:58:08 ID:???
>>964 なるほど!サーバ側でなんとかしてみます
数値だけの文字列を"文字列"として判別したく isNaNを使うも、どちらも数値と同じになりました。 isNaN(123) // false isNaN("123") // false この"123"を"文字列"か"数値ではない"と判別するには?
typeof "123 typeof 123"
>>969 numberとstringで取得できました。
ありがとう!
ヒントやキーワードでもよいので教えてください。 ホームページを開いた際に、フローティングウィンドウを表示させて、 トピックスな項目を表示させたいのですが、 フローティングウィンドウでググっても画像を表示させるものや ボタンクリックで表示させるものしか見つけられません。 希望としては、リンクなどからトップページに来た際に フローティングウィンドウを最初から表示させておきたいのです。 よろしくお願いします。
つかHTMLに最初から書いときゃいいじゃん
inputタグのtextフォームでテキスト入力後の送信処理をデフォルトのsubmitからjavascriptのfunctionに変えたいのですが ググって見たけどsubmitの無効化することしか書いてなくて どうしたら無効化じゃなく動作変更にできるのかわからないのですが どなたか教えていただけないでしょうか
onkeypressとかonkeydownでkeycode or which == 13エンターの時に実行 てことでおk?
>>974 送信ボタンを押した時に送信するかわりに関数を実行するということ?
それならonclickに動作を記述し最後にfalseを返させるとかだと思うが。
<button type="submit" onclick="関数(); return false;">...</button>
そこはonsubmitでしょ
だからテンプレ論議は新スレが立つ「前に」お願いしたいと… 次回忘れずに直しましょう(忘れないといいなあ…)
html5は未対応ブラウザもあるし特にこの記述で誰かが被害を受けるっていうことはないんじゃね。 非標準でも実装されてるし。
別にスレ立て直前でなくても 気づいたことがあればいつ指摘しても構わんだろ 次から修正すればおk
983 :
Name_Not_Found :2010/06/24(木) 14:49:46 ID:nQCfGkjf
>>974 サブミットボタンをdisplay:noneにしとく
送信ボタンと言うValueのボタンを用意しとく
送信ボタンが押されたらfunctionを呼び出し、そのfunctionの中でサブミットボタンをonclickすればよし
要件がよくわからんが、エスパーするとこんなところ
>>983 ちょっとちょっと。サブミットボタンなんて置く必要はないぞ。
フォームのsubmit()を呼べば送信されるんだから。
次おつ vol.77のログあげておきました
987 :
Name_Not_Found :2010/06/24(木) 16:32:16 ID:r7q5lvcM
ログうp乙 テンプレ議論を邪魔にならないようにしたいなあ
988 :
Name_Not_Found :2010/06/24(木) 21:17:39 ID:eq4P1cU5
乙 パールb
次おつ うめついで偏見を記しておく >ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! 今だったらChromeでCtrl+Shift+I押せが一番簡単じゃない? >A4. > innerHTMLは非標準ですがIE、Opera、Safari、Gecko(N6/N7/Firefox等)で対応済。 非標準→未標準? あと、N6/N7はもういらないでしょ。 >A12. 古いブラウザだと隠しフレームに読むなどのワザが必要。 この古いブラウザってのもいらないよね IE7以降はXMLHttpRequestサポートしてるし、なんか全体的に古臭いのなんとかしたいね
innerHTMLの件は非標準でいいよ
991 :
Name_Not_Found :2010/06/25(金) 06:37:23 ID:1LAdTfal
ちょっと前にHTML5にあるって書いてあった気が
なぜ真っ赤なnon-normativeを見ぬふりするの
994 :
Name_Not_Found :2010/06/25(金) 18:43:00 ID:1LAdTfal
>>992 リンク先まで見てなかったわ。
ごめんなさい。
ume
996 :
Name_Not_Found :2010/06/25(金) 21:26:19 ID:TyjggGrh
saku
>>161 CSSでやるとは盲点だったw
が、css3はIEで非対応なので
first-of-typeの代わりにfirst-childを使うと全ブラウザ対応になるかも。
デフォのアイコン付加使ってないので、もし、デフォのでfirst-childが無理ならごめんなさい。
>>164 もし
>>164 が実装されるなら多分$LISTとかだろうから、
$のあとがNEST等の定義済みのと数字で無かったらエスケープなしで出来ると楽だったりします。
全フィルターを繋げる前にreplace(/(?<!\\)$(?!LIST|URL|NEST|SET|GET|\d)/g, '\\\$')みたいな感じでどうでしょう?
$の前に\がいくつもある場合にどこまでエスケープなのかの判別が不安ですが。。。
おっと誤爆。 だけど梅途中でよかった。
このスレは1000の風になりました
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。