+ JavaScript の質問用スレッド vol.82 +
1 :
Name_Not_Found :
2010/12/10(金) 15:45:17 ID:8tOixelJ
2 :
Name_Not_Found :2010/12/10(金) 15:45:38 ID:8tOixelJ
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
3 :
Name_Not_Found :2010/12/10(金) 15:45:52 ID:8tOixelJ
【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"」としないとページ移動しちゃうから。
4 :
Name_Not_Found :2010/12/10(金) 15:46:03 ID:8tOixelJ
【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が置き換え前の文字列全体になります。
5 :
Name_Not_Found :2010/12/10(金) 15:46:14 ID:8tOixelJ
【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()。
6 :
Name_Not_Found :2010/12/10(金) 15:46:24 ID:8tOixelJ
7 :
Name_Not_Found :2010/12/10(金) 15:46:36 ID:8tOixelJ
8 :
Name_Not_Found :2010/12/10(金) 15:51:19 ID:8tOixelJ
テンプレ議論はメ欄にテンプレ議論と書いて進めますかね では質問ドゾー
9 :
Name_Not_Found :2010/12/11(土) 13:45:35 ID:2b6nLnHO
<table border="1"> <tr><td rowspan="2" bgcolor="red">1</td><td>2</td><td rowspan="3" bgcolor="red">3</td></tr> <tr><td>5</td></tr> <tr><td bgcolor="red">7</td><td>8</td></tr> </table> <script language="javascript"> var table = document.getElementsByTagName('table')[0]; var td = document.getElementsByTagName('td'); for (i=0; i<td.length; i++) { td[i].onclick = function() { for (j=0; j<table.rows.length; j++) { //alert(table.rows[this.cellIndex].cells.length); } } } </script> こんな感じで赤い部分の数を縦に数えたいのですがうまくできません。 1と7をクリックすると2、 3をクリックすると1がかえってくるようにしたいです よろしくおねがいします
11 :
Name_Not_Found :2010/12/11(土) 15:12:01 ID:71WdmdZe
ブラウザのサイズを document.documentElement.clientWidth; document.documentElement.clientHeight; で取得して、その値の0.8倍の大きさのテキストフィールドを作ったのですが 今のところブラウザのサイズを変更してテキストフィールドをonclickやonFocusで選択した時変更されるという方法しかわからないのですが サイズを変更してる時、一々クリックしなくてもブラウザを引き伸ばししたりしてる時リアルタイムで変更される方法は無いでしょうか?
onresize
>>9 var column = 3;
var table = document.getElementsByTagName('table')[0];
var tr = table.getElementsByTagName('tr');
var counter = [];
var idx = 0;
for (var i = 0; i < tr.length; i++) {
var td = tr[i].childNodes;
for (var j = 0; j < td.length; j++) {
while (true) {
if (counter[idx] == null) {
break;
}
idx++;
}
counter[idx] = 1;
var rowspan = td[j].getAttribute('rowspan');
if (rowspan) {
for (var k = 1; k < rowspan; k++) {
counter[idx + column * k] = 0;
}
}
}
}
alert(counter);
後はわかるな?
わっかりましぇーん
1 2 3 1 1 1 5 → 0 1 0 7 8 1 1 0 ------- 2 3 1
16 :
9 :2010/12/11(土) 17:48:57 ID:???
17 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/12(日) 00:19:33 ID:gJmT6h52
ここがうわさのWEB土方の巣窟ですかっ!
このスレはWebProg板とどこがちがうんですか?
板のローカルルールを読みましょう
>>19 WebProg板は何で過疎ってるんですか?
このスレ -> 初心者歓迎大繁盛 WebProg板 -> 住人不在
>>12 すみません、寝てました
ありがとうございます!
function henkou() { yoko = document.fo,text1.value; tate = document.fo.text2.value } <form name="fo"> <input type="text" name="text1"> <input type="text" name="text2"> <textarea cols="80" rows="10" name="hoge"></textarea> <input type="submit" onclick="henkou()"> </form> というのを作ったのですが、このyokoとtateをどーにかしてテキストエリアのcolsとrowsに入れたいのですが どうしたらいいのでしょうか? とりあえずtextareaオブジェクトのプロパティやメソッドは調べたのですが
.cols .rows
そんなのがあったんですか、ありがとうございます 自分の使ってる本とかサイトだと、フォームオブジェクトのテキストオブジェクトだと defaultValue name value type しか書いてなかったり、イベントハンドラも書いてないのがあったりするんですが そういう一覧でオススメな所ってあったりします? それともこういうのってもし <textarea tyome="" name="hoge"></textarea> ってのがあったら.tyomeとかでできちゃうものなんでしょうか?
var a=[],d=document;for(var i in d.createElement('textarea'))a.push(i);d.write(a.join('<br>'));
なんでやねん
このスレは専門板での成功例。 専門板が一見さまや初心者お断りしたら衰退するだけだ 逝ってよし見たの何年ぶりだろうか
>今時の高校教科書には「鯖にうp汁」「教えて厨は逝ってよし」等のネットスラングが解説されているらしい。 だそうですよ
それって結局捏造だったやつじゃなかったっけ スパロボ偽情報みたいな
古いんだよ!ちっとは黙っとけオッサンども(藁)
まぁオッサンだよな逝ってよしなんて未だに使ってる奴は
>>27 そりゃHTMLのサイトみろ
どのタグがどんな属性を持っているか
>>27 そういう仕様じゃない
DOM1とかで規定されてるから読んでみるといい
42 :
Name_Not_Found :2010/12/13(月) 00:23:22 ID:nPZ3XYrs
学校の課題でこんな問題が出ました。(javascript) 「3つの引数(二つの数値と四則演算記号)を受け取り、 計算結果を出力する機能を関数で実現する。ただし入力はテキストボックスとし、 0で割る場合はエラーメッセージが出力できる。」 htmlで作成して提出なのですが、 さっぱりわからなくて困ってます。 解る人タグを教えてください・・・。
タグとか言ってる時点で望みがなさすぎるので 諦めて真面目にテキスト読み直してこい。 いやマジで。
四則演算記号も受け取るって事はevalが楽そうだな
45 :
Name_Not_Found :2010/12/13(月) 01:23:04 ID:LMOelhkO
foo.xml | jsengine > bar.txt みたいな感じで、完全にローカルな環境でxmlのフィルターを書きたいと思ったのですが、 ファイルの読み込みはAjaxで何とかなるとはいえ、書き出しのほうはJSではどうしようもありません。 ・ブラウザから強制ダウンロード とか ・JSのエンジンを他の言語に組み込む 以外で、出力されるhtmlテキストをお手軽に保存する方法はありませんか?
書いてもいいけどそれだと学校も課題を出した意味が無いし機会を奪うだけだな あと、eval is evil
>>45 var data = encodeURI("<strong>データ、なんでもいい</strong>");
window.open("data:application/octet-stream; charset=UTF-8," + data);
表示だけなら
window.open("data:text/html; charset=UTF-8," + data);
ただし、IEは8以降のみ。Firefoxとかは大丈夫
>application/octet-stream それ >・ブラウザから強制ダウンロード じゃないの
ajaxで読み込むならajaxで保存すりゃいいだけじゃないのか
50 :
45 :2010/12/13(月) 01:50:01 ID:LMOelhkO
>>48 それですね。保存するファイル名とか指定できなかった気がします。
>>49 それローカルに保存できますか?
できればそれが一番いいんだけど・・・。
>>45 ローカルでやるのにどうしてブラウザを通したいのか…。
Windows なら JScript が楽だと思うが。
>>49 も結局レスポンスヘッダにapplication/octet-streamをセットする方法になるのでは?
53 :
45 :2010/12/13(月) 01:59:58 ID:LMOelhkO
>>51 Unix系(手元はMac)ならどうですか?
ブラウザは通さなくてもいいんですが、新しめのJSエンジンは通したいかなぁ。
54 :
47 :2010/12/13(月) 02:06:08 ID:???
55 :
45 :2010/12/13(月) 02:18:08 ID:LMOelhkO
>>54 方向性は同じで、Webkitだと
/System/Library/Frameworks/JavaScriptCore.framework/Versions/Current/Resources/jsc -i
がそれみたいです。
ただ、結局ネックになるのはFile I/Oですね。
標準出力はprintでやるとして、入力はどうするんだろう?
xmlをパースして情報をまとめるというのを言語ネイティブにやろうとすると
JSが一番ラクだから、というのが元々のモチベーションだったのですが、
やっぱ使い方まちがってますかね・・・。
57 :
45 :2010/12/13(月) 02:30:45 ID:LMOelhkO
ほぅ、そんなのもあるのか。 このサーバサイドJSとかいうのの動作原理を理解すればよろし、ってことだろうけど、結局 > JSのエンジンを他の言語に組み込む とかになりそう・・・。 ところで、さっきのjscかjsかでechoコマンドを作れたら、 cat foo.xml | ./jsc -e '...' > bar.txt で完成する感じですが、何とかなりませんかねぇ。
58 :
45 :2010/12/13(月) 02:39:35 ID:LMOelhkO
>>57 ECMAScript + DOM に File I/O がないのだから、如何様にしても JavaScript だけでは解決できない。
>>55 使ったことないが、node.js かねぇ…。
61 :
45 :2010/12/13(月) 03:04:36 ID:LMOelhkO
とりあえず
echo '<foo><bar>Hello World!</bar></foo>' | ./jsc -e 'var ln; while(ln=readline()){print(ln)}'
な感じですが、readline()がECMA準拠してないってことですね。
>>60 そのへんで手を打ってみます。
いろいろありがとうございました。
IEかどうかを判断するときnavigator.userAgent.matchで判断してたのですが 他の人のソースを見るとdocument.attachEventがあるかないかで判断してる記述がありました 他にも例えばIEだけで使えるもの typeof ActiveXObject == "function"でもいけるのを確認してナルホドなーと思ったのですが なんか判別する場合のスタンダードな書き方が存在するのでしょうか?
63 :
62 :2010/12/13(月) 07:23:06 ID:???
記憶が曖昧だったのでもう1度見たところ document.attachEventではなく window.attachEvent && !window.opera のように書いてました この表記を見ると好きにしろって感じなんですかね・・・
>>62-63 洩れは「ある機能を使うとき」「その機能のオブジェクトがあるか
どうかをチェックする」ようにしている。つまりIEかどうかを判別
するというより、attachEventを使うブラウザかどうかを判別する
という意識かな。
65 :
62 :2010/12/13(月) 08:57:41 ID:???
テキストエリアをブラウザのフチギリッギリまで表示する方法ありませんか? 最大化しようが縮小しようがギリッギリになるっていう感じのです
まずJavascriptだとブラウザのサイズ取得して0.8とかかけてやるやり方かなぁ? だけどテキストエリアはブラウザによってサイズが違うからCSSの方が良い だけどCSSとかにブラウザのサイズに合わせて変更するのがあるかは知らん じゃあJavascriptでCSSの変更をと言われても俺CSS全然ダメだから他を当たってくれ CSSだけはダメだ、俺はフレームのデザインとか本当にダメ
>>66 <!DOCTYPE html>
<html>
<head>
<style>
html,body,form,div { margin: 0; padding: 0; height: 100%; }
textarea { display: block; height: 100%; }
</style>
</head>
<body>
<form><div><textarea></textarea></div></form>
</body>
</html>
70 :
Name_Not_Found :2010/12/13(月) 18:32:51 ID:Viou2WGZ
IE6とFirefoxで試してみたけど、width:100%でいけた
親要素がbodyじゃないと%の計算が面倒なんでJS使ってやりたくなった
テキストエリアのデフォルトスタイルが厄介で、
borderStyleをsolidにして、左右borderとpaddingは0にしないと
IEで横スクロール出る
スレ違いすまんこ
>>66 は責任とって、テキストエリアにリサイズトグル付けて
自由にリサイズできるようにしんしゃい!
皆さんありがとうございます! CSSもやってみようと思います
72 :
69 :2010/12/13(月) 18:45:11 ID:???
>>70 display: block; で width は不要となる。height は calc() で演算。
calc未対応ブラウザは JavaScript で演算。
ここまで拘ると JavaScript が必要になる。
73 :
Name_Not_Found :2010/12/13(月) 19:13:44 ID:OMicxQ5I
74 :
Name_Not_Found :2010/12/13(月) 20:13:55 ID:Viou2WGZ
o.aがリードオンリー的な何かじゃないとまずかろう、ってこと?
75 :
73 :2010/12/13(月) 20:49:57 ID:???
あまりよく理解できていませんがゲッターセッターで検索すると
値(
>>73 の場合o.a)に対して外部から直接操作できないようにしておいて
ゲッターやセッターを通してのみ値にアクセスできるようにすることによって
それ以外の方法で値が変更されていないことを保障するとか何とか説明されていたりするので
そういう用途で使うものだと思っていたのですが
>>73 はそうなっていないみたいなので
ゲッター・セッターというものがまたよくわからなくなって
たとえば四角形を表すオブジェクトが x, y, width, height の4つのプロパティを持っていたとします 後で気が変わって、データの持ち方を left, right, top, bottom のように変更したくなりました getterとsetterを使っていれば、たとえばwidthのgetterでright - leftを返すようにすることによって widthプロパティを使った既存のスクリプトに影響が出ないようにすることができます
77 :
Name_Not_Found :2010/12/13(月) 22:41:05 ID:/1bZvcig
>>75 固定観念にとらわれる必要はないかと。
var quadrilatera = {x:5, y:7, get area () { return this.x*this.y; }, get allSide () { return this.x*2+this.y*2; }}; // 四角形
console.log(quadrilatera.area); // 面積
console.log(quadrilatera.allSide); // 4辺の総和
ゲッタせった初めて知ったけど、これすごいな。便利そうだ。ぱっとは使い道が思い浮かばんけど。
>>76-77 なんとなくわかったような気がします
o = { x, y, width, height } を o = { left, right, top, bottom } に変更しても
o = { left, right, top, bottom, get width() { return right - left; } } のように
width: function() {} ではなく get width() {} を追加することで
o.width()ではなく変更前と同じo.widthで値が得られるってことでしょうか
特徴はメソッドをプロパティのように表記できること・・・?
ステップアップしたくて新しく覚えたものを取り入れてみようとするのですが、
このgetやsetももし使う機会があれば使ってみたいと思います
今回はちょっと思っていたのと違ったみたいです
80 :
79 :2010/12/13(月) 23:29:23 ID:???
return right - left は return this.right - this.left ですねすみません
81 :
77 :2010/12/13(月) 23:41:30 ID:???
>>79 一応、プライベートに定義することも出来る。get だからプライベートというわけじゃないが。
function Quadrilatera (x, y) {
Object.defineProperty(this, 'area', {get: function () { return x*y; }});
Object.defineProperty(this, 'allSides', {get: function () { return x*2+y*2; }});
return this;
}
var q = new Quadrilatera(5, 7);
console.log(q.area);
console.log(q.allSides);
getter,setterをちゃんと知りたいならjavaをやるのが近道。
そもそもアクセス修飾子がないJavaScriptでカプセル化しようっていうのはなぁ・・・
getter,setterだけなら個人的にはjavaよりC#のが好み
好みの問題じゃないしデザパタの問題ですし
すいませんHttpRequestのonreadystatechangeのイベントでつかう関数の指定の仕方について教えてください function a(){ ResponseCheck = aCheck; c(ResponseCheck); } function b(){ ResponseCheck = bCheck; c(ResponseCheck) } function c(ResponseCheck){ httpRequest.abort(); httpRequest.onreadystatechange = ResponseCheck; httpRequest.open('GET', Url, true); httpRequest.send(null); } function aCheck(){ 〜 } function bCheck(){ 〜 } という感じで aから来た場合レスポンスが有ればaCheckに bから来た場合レスポンスが有ればbCheckにonreadystatechangeを指定したいのですが この方法だとうまくいかず困っています。 適切な方法を教えていただけないでしょうか
その aCheck、bCheck は send() 後に呼び出されているか確認! 「〜」内で readyState と status の値をチェックしてるか確認!! 他の伏せてるコードに間違いがないか確認!!!
>>87 ありがとうございます。
ResponseCheck内に入れてあるaCheckやbCheckなどを見に行かずに
httpRequest.onreadystatechange = ResponseCheck;
のところでResponseCheck()という関数を指定しようとしちゃってるみたいなんですよ
で、aCheckとbCheckに行かずにResponseCheck()は無いのでエラーが発生してしまってます。
aCheckやbCheck内のコードはこの分岐使わずに単体で動かした場合はちゃんと動作しているので大丈夫だと思います。
ResponseCheck が呼び出されているとしたら abort() しているところでじゃないかな(2回目以降の呼び出しの場合)。 それでもちゃんと readyState を確認していれば問題ないはずだけど。 見た限りのコードからは、エラーの原因は分っかりっましぇ〜ん!
んー 自分はhttpRequest.onreadystatechangeにResponseCheck内にあるaCheck()かbCheck()を指定しようとしてるんですが この書き方だと ResponseCheck自体が指定されてResponseCheck()という関数を指定しようとしてると思うんですよ でレスポンスが来てhttpRequest.onreadystatechangeのイベントが発生しようとして ResponseCheck
すいません途中で送ってしまいました。 んー 自分はhttpRequest.onreadystatechangeにResponseCheck内にあるaCheck()かbCheck()を指定しようとしてるんですが この書き方だと ResponseCheck自体が指定されてResponseCheck()という関数を指定しようとしてると思うんですよ でレスポンスが来てhttpRequest.onreadystatechangeのイベントが発生しようとして ResponseCheck()が無いからaCheck等に記述してあるreadyStateなどのチェック等関係無しにエラーが出ちゃってると思うんですよ だから ResponseCheck = bCheck; か httpRequest.onreadystatechange = ResponseCheck; のところの記述の仕方が正しくないんだと思うんですけど 探してもいまいちわからなくて・・・
デバグに先入観は禁物! 別のとこに原因はあんだよ、少なくとも上記のレスに書いたコードとは別の。 アハ体験がアンタを待ってるぜ!
93 :
Name_Not_Found :2010/12/14(火) 09:18:15 ID:1pt1ZD9M
94 :
Name_Not_Found :2010/12/14(火) 09:41:49 ID:2UYeEgU2
jQueryで<div>の中で2つの処理を続けてしたいと思います。 1)画像がフェードインで出現 <div id="actArea"><img src="fade.jpg" id="test" style="display:none;" /></div> 2)出現し終わったら5秒間を置いたあと、別の要素<div>に書きかわる <div id="actArea"><div><img src="finish" /></div></div> と言った感じです。 最初の画像のフェードインはできたのですが、 フェードイン完了後の処理(5秒待って書き換え)ができません。 <script type="text/javascript"> $(function() { $('img#test').fadeIn(3000, function() { // 処理終了後にダイアログ表示 /*window.alert('フェードイン完了');*/ //$('div#actArea').html('あいうえお');//テスト、書き換えはこれかな ct = new Date(); st = ct.setSeconds(10); //ここからわからない }); }); </script> countdownプラグインを使って処理するのかと思いましたが 目当ての時間まで〜するものらしく、使えないというかどうしたらいいのかわかりませんでした どなたか回答お願いします
textボックスに入力された文字列の容量を何バイトか表示する関数や方法ってあります?
>>95 同じ文字列でも文字コードによってバイト数が変わると思うが。
setTimeoutを知らないに1票。
wait sleep 実装まだぁ
100 :
Name_Not_Found :2010/12/14(火) 12:10:04 ID:0b6yTFwV
>>97 ,98
おお、これでどうにかなりそうです! ありがとうございました
>>100 1. c.charCodeAt(c) の引数の c が数値型に変換される。
2. 今、c として 0-9 のケースは除外されているので、これは NaN が返る。
3. 結果的に c.charCodeAt(0) と同じ値が返る。
というテクニック。
>>93 $(function(){
var obj = $('#exp1').pager('div',
{
height:"200px",
prevText: "« 前へ",
nextText:"次へ »"
}
);
// nav要素 - clone - id変更 - 挿入
obj.before(obj.find('#nav').clone(true).attr('id', 'nav1'));
});
104 :
Name_Not_Found :2010/12/14(火) 14:33:16 ID:1pt1ZD9M
>>103 ありがとうございます!
おかげで上下に配置できました。
ただもうひとつ、表示中のページがわかるように、ページナンバーのaタグに
class="highlight"が振られるようになってるみたいなんですが、
これがnavのほうでは上手く機能してますが、nav1のほうだと1ページ目のナンバーに
振られたまま動きません。
navのほうは、たとえばページナンバー「3」をクリックしたら、class="highlight"が振られ、
アクティブなページがわかるようになってます。
しかし、nav1のほうはclass="highlight"がページナンバー「1」から動きません。
これはどうすればよろしいでしょうか?
やっつけ仕事 //jquery.pager.js function highlight () { $(me).find(navid).find('a').removeClass(settings.highlightClass); $('#nav1').find('a').removeClass(settings.highlightClass); var show = $(me).find(navid).find('a').get(i+1); var show1 = $('#nav1').find('a').get(i+1); $(show).addClass(settings.highlightClass); $(show1).addClass(settings.highlightClass); } あとは上手くやりなされ
106 :
Name_Not_Found :2010/12/14(火) 15:12:04 ID:1pt1ZD9M
>>105 神よ・・・
完全解決しました!最高です!ありがとうございます!
勉強になりましたm(_ _)m
礼はいらねえ 成長して このスレに来る迷える子羊たちを導いてくれ
屁こいちゃったw
ここまで自演 次の方どうぞ
111 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/14(火) 17:37:22 ID:rQueV4DL
javascriptをやってるやつは低能なんだろ ゴミ頭がごみめら マジ可哀想なんていうかかすそのもの javascriptwwwwwwwwwwwwwww ウェブサイト?wwwwwwwwwwwwww わらわせんじゃねえよごみめら
Perl忍者氏に JavaScript でどんな嫌なことがあったんだろうかと想像すると、じわじわ込み上げてくるものがあるな。
感謝されたことないんだろうな 胸熱
典型的なステレオタイプ
質問なんですが、 var array = [{'a':10,'b':20},{'a':40,'b':10},…続く]; こういうスクリプトを簡潔に書く方法はありますでしょうか?
十分簡潔だと思うが・・・ 何をどうしたいのかがよくわからんからなんとも
今日から調べながら作り始めたので変なところがあったら申し訳ない exelでは30分程度で作れたが ゲームの数値計算をjavascript作ろうと考えて色々試している 基本ステータスを入力して成長後の基準値を出すところまではできたが その成長後の基準値に倍率を掛ける方法がわからない A,B、C、D、Eを入力 ↓ F,G,H,I,J・・・10種類程度の基準値表示 ↓ パターン選択ボタンまでは完成 ↓ パターンα選択時 倍率F*105%、J*104% β選択時 倍率F*110% G*105% ・ ・ ・ ↓ 最終的には基準値を出さずに 選択したパターンに応じて修正値だけを表示したい
>>116 var x = [10, 20, 40, 10, …];
var array = [];
for (var i = 0; i < x.length; i += 2) { array.push({'a': x[i], 'b': x[i + 1] }; }
こういうこと?
function bp() { frm1.hp.value = (frm1.tai.value * 5 + frm1.atk.value * 4 + frm1.w2k.value * 2.5 + frm1.agl.value * 5.1 + frm1.min.value * 6.5); frm1.mp.value = (frm1.tai.value * 4.9 + frm1.atk.value * 6.5 + frm1.w2k.value * 7 + frm1.agl.value * 5.6 + frm1.min.value * 6); こんな感じで出した数値にAパターンを選んだらHP*105%だけ BパターンでHP*110% 攻撃力*120%のような修正を加えたい function pa() { frm2.hp.value = (frm1.hp.value * 1.05) ; とかやってるんだけど反応しないので詰まった
121 :
116 :2010/12/14(火) 20:18:02 ID:???
>>119 なるほど、そういう書き方もできるんですね。ありがとうございました。
複数のフォームをJqueryで 追加、 削除したいです。
http://jquery-howto.blogspot.com/2009/05/remove-table-row-on-user-click.html このサイトを参考にremoveを作成しました。
$('img.removeButton').click(function(){
$(this).parent().parent().remove();
});
最初のフォームだけは削除できるのですが、同じくJqueryで新しく追加したフォームが削除できません。
どうすれば解決できるか教えてもらえないでしょうか?
下記のようにaddで 新しいnewFormが生成される。
<tr class="newForm">
<td>
<input type="text" name="data[Alert][1][keywords]" value="" id="Alert1Keywords">
</td>
<td><img src="/select/img/cross.png" alt="remove" class="removeButton"></td>
</tr>
<tr class="newForm">
<td>
<input type="text" name="data[Alert][2][keywords]" value="" id="Alert2Keywords">
</td>
<td><img src="/select/img/cross.png" alt="remove" class="removeButton"></td>
</tr>
124 :
Name_Not_Found :2010/12/14(火) 21:02:53 ID:+UPQxh6r
>>118 わかりづらいからドラゴンボールで例えて
125 :
Name_Not_Found :2010/12/14(火) 21:05:09 ID:+UPQxh6r
>>123 addがどこにあるのか知らんが、
var newNode = あたらしく追加するnewForm;
add(); // newNodeを追加
remove(); // newNodeを削除
ってやる
>>125 レスありがとうございます。
addはこんな形です。 しかし、addで追加したフォームだけremoveが効かず、
最初に生成されるフォームだけremoveできるのです。
指摘されたnewNodeといった形でやってるのではないかと思うのですが、
これではだめなのでしょうか?
$("#addMore").click(function() {
var newForm = $(".newForm").last();
newForm.after(<tr class="newForm">
<td>
<input type="text" name="data[Alert][1][keywords]" value="" id="Alert2Keywords">
</td>
<td><img src="/select/img/cross.png" alt="remove" class="removeButton"></td>
</tr> );
});
>>123 未検証だが、こんな感じ。
$('table').click(function (event) {
var target = $(event.target);
if (target.is('img.removeButton')) {
target.parent().parent().remove();
}
});
118ですが自己解決しました exelで30分も掛からない作業に5時間掛けた・・・
129 :
Name_Not_Found :2010/12/14(火) 22:57:57 ID:0b6yTFwV
>>102 ありがとうございます。
なら、c.charCodeAt(0) でいいじゃんってどうしても思ってしまうんですが
なにか意味があるのか・・
exelじゃなくExcelね。
131 :
126 :2010/12/15(水) 04:11:43 ID:???
>>127 さん
上手く動きました!! 感動!!
どうやってるのかは理解できてないので、今からなんでこうやると
上手くいくのが勉強します!
本当にありがとうございます。
かーめーはーめーはーーーー
Javascriptでツイッターへの投稿用のものを作ろうとしているのですが
現在OAuth認証でアクセストークンを取得するところまでできています。
次に
var params = "oauth_consumer_key=コンシューマキー&oauth_nonce=ランダム文字列&oauth_signature_method=HMAC-SHA1&oauth_timestamp=タイムスタンプ&oauth_token=アクセストークン&oauth_version=1.0&status=test&oauth_signature=シグネチャ"
というデータを作って
function StatusUpdate(){
var Url = "
http://api.twitter.com/1/statuses/update.xml ";
var Data = params
SendXmlHttpRequest(Url, Data);
}
function SendXmlHttpRequest(Url,Data) {
XmlHttpRequest.abort();
XmlHttpRequest.onreadystatechange = ResponseCheck;
XmlHttpRequest.open('POST', Url, true);
XmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
XmlHttpRequest.send(Data);
function ResponseCheck(){
if (XmlHttpRequest.readyState == 4 && XmlHttpRequest.status == 200) {
document.getElementById("txtresult").value = XmlHttpRequest.responseText;
}
という感じで「test」とツイッターにつぶやきたいのですがうまく投稿できません
初心者なりに調べてみたのですがいまいちわからなくて悩んでいます。
POSTでのXmlHttpRequest送信で間違っているところなどありましたら教えていただけないでしょうか?
>>129 テクニック = たまたま上手く動くミス
135 :
Name_Not_Found :2010/12/15(水) 11:07:16 ID:yrRyBbJa
こんにちは。
またお世話になります。
昨日、こちらのサイトの、
http://f32.aaa.livedoor.jp/~azusa/?t=ajax&p=jquery_plugin_pagenation 一番目にあるjQuery pager plug-inについて質問させていただいた者です。
昨日の段階で6ページ作り、問題なく動いていたのですが、
ページ数を20に増やしたところ、ページ送り部分が1〜20まですべて表示され、
レイアウトが崩れてしまいます・・・
これを10くらいまでの表示に留めておき、残りは「…」とかにする方法ないでしょうか?
おそらく、
for(var i = 0; i < size; i++) {
var j = i+1;
str += '<a href="#" rel="'+j+'">';
str += (settings.linkText == null) ? j : settings.linkText[j-1];
str += '</a>';
}
このあたりに条件式を入れてやればできそうなのですが、
わかりませんでした・・
よろしくおねがいします。
136 :
Name_Not_Found :2010/12/15(水) 11:27:11 ID:Q34Xx5d3
>>135 for(var i = 0; i < size; i++) {
var j = i+1;
if (j < 11) {
str += '<a href="#" rel="'+j+'">';
str += (settings.linkText == null) ? j : settings.linkText[j-1];
} else if (j === 11) {
str += '<a href="#" rel="'+j+'" style="text-decoration: none; color: #000; font-weight: bold;">';
str += (settings.linkText == null) ? '...' : settings.linkText[j-1];
} else {
str += '<a href="#" rel="'+j+'" style="display: none;">';
}
str += '</a>';
}
-------------------------------------------------
// 改行挿入
for(var i = 0; i < size; i++) {
var j = i+1;
str += '<a href="#" rel="'+j+'">';
str += (settings.linkText == null) ? j : settings.linkText[j-1];
str += '</a>';
if (j > 10 && j % 10 === 1) str += '<br>';
}
138 :
Name_Not_Found :2010/12/15(水) 15:41:26 ID:yrRyBbJa
>>137 ありがとうございます。
上のほうの式でできそうです。
しかし、[前へ] 1 2 3 … [次へ]
という表示なのですが、(3まで表示とした場合)、
これを … のあとに、最終ページを表示することはできますでしょうか?
記述いただいた式のあとに、
str += '… <a href="#" rel="'+j+'">';
str += (settings.linkText == null) ? j : settings.linkText[j-1];
str += '</a>';
を、書けばできますが、これだと、その最終ページをアクティブにしても、
class"=highlight"が付きません。なので、回答者さんの記述された式の中に組み込んで、
うまくやる方法はないでしょうか?
139 :
Name_Not_Found :2010/12/15(水) 15:51:29 ID:yrRyBbJa
>>137 何度もすいません・・・
ちょっと説明の仕方間違えました。。
全部で20ページあったとして、
[前へ] 1 2 3 … 20 [次へ]
という感じにする方法が知りたいです・・・
それで、3をクリックしたときは、
[前へ] 1 2 3 4 … 20 [次へ]
で、20をクリックすると、
[前へ] 1 … 18 19 20 [次へ]
みたいな感じで常に前後のページは表示されるような仕組みにするには、
ちょっと大がかりな書き換えが必要なんですかね?
もし無理であれば諦めますが、可能なのであればご教示願います。
イメージとしてはこういった感じです↓
http://kyoto-design.jp/photo
いまいちよく分かんないんだけど、こんな感じか? for(var i = 0; i < size; i++) { var j = i+1; if (j < 11) { str += '<a href="#" rel="'+j+'">'; str += (settings.linkText == null) ? j : settings.linkText[j-1]; } else if (j === 11) { str += '<a href="#" rel="'+j+'" style="text-decoration: none; color: #000; font-weight: bold;">'; str += (settings.linkText == null) ? '...' : settings.linkText[j-1]; } else if (i === size - 1) { str += '<a href="#" rel="'+j+'">'; str += (settings.linkText == null) ? j : settings.linkText[j-1]; } else { str += '<a href="#" rel="'+j+'" style="display: none;">'; } str += '</a>'; } 暇だからいいけど、少しは自分でがんばってみれ
>>139 ずっこけたwずいぶん面倒そうな注文だねw
期待しないほうがいい
142 :
Name_Not_Found :2010/12/15(水) 16:11:54 ID:G0mhSjVW
>>134 分りました。あえてそうしてるのか、間違ってそうしてるのか判断ができなくて。
>>139 とりあえずこれまでのは忘れる
function hoge(n, f) {
var a1 = $(me).find(navid).find('a');
var a2 = $('#nav1').find('a');
var len = a1.length - 1;
var c = 3; // 表示件数
var num = len - n;
for (var i = 1; i < len; i++) {
if ((i >= n + 1 && i <= n + c) || (c >= num && i >= len - c)) {
$(a1[i]).css('display', 'inline');
$(a2[i]).css('display', 'inline');
} else {
$(a1[i]).css('display', 'none');
$(a2[i]).css('display', 'none');
}
}
}
function highlight () {
$(me).find(navid).find('a').removeClass(settings.highlightClass);
$('#nav1').find('a').removeClass(settings.highlightClass);
var show = $(me).find(navid).find('a').get(i+1);
var show1 = $('#nav1').find('a').get(i+1);
$(show).addClass(settings.highlightClass);
$(show1).addClass(settings.highlightClass);
hoge(i); // ここで呼出し
イメージとは少し違うけどね
もう今日はしんどいけど、バグがあったら一応報告は頼むね
function hoge(n, f) fは消し忘れ。いらん
function hoge(n) { var a1 = $(me).find(navid).find('a'); var a2 = $('#nav1').find('a'); var len = a1.length - 1; var c = 3; // 表示件数 var num = Math.floor(n / c); var s = num < 1 ? 1 : num * c + 1; var m = s + c - 1; for (var i = 1; i < len; i++) { if (i >= s && i <= m) { $(a1[i]).css('display', 'inline'); $(a2[i]).css('display', 'inline'); } else { $(a1[i]).css('display', 'none'); $(a2[i]).css('display', 'none'); } } } こっちの方がユーザに優しいかもしんない シンプルな動きだし
146 :
Name_Not_Found :2010/12/15(水) 20:33:34 ID:f7VdyVgb
postメソッドにかんする質問です。 フォームにXを入力してsubmitボタンを押すとF(X)が表示されるページがあったとします。 使われているのがPOSTなので、jQueryのajaxを使ってquery Qを送りつけ、結果を解析してF(Q) を得るところまでは自力でいきました。 さて、問題はqueryのリスト[Q1,Q2,...]があったとき、各queryについてajaxを起動するのは コストがかかりそうな気がします。(実装によるのかな?) ので、一気にリストを送りつけて、非同期で結果を表示していく感じにしたいのですが、 参考になりそうなページとか、概念とか教えてください。 サーバー側のF()はいじれないものとします。
147 :
Name_Not_Found :2010/12/15(水) 22:06:05 ID:D8ahOVyt
F()は変えられない=一度に引き受けられる引数は一つ なんだから、何度もクエリを送りつける以外ないんじゃなかろか?
148 :
Name_Not_Found :2010/12/15(水) 22:40:06 ID:/MljnSa6
画像のプリローダーってありますよね? が、ありすぎてどれが良いのかわかりません。皆さんどれを使ってますか? jqueryを使うものを教えてくれると嬉しいです。よろしくお願いします。
>>146 >各queryについてajaxを起動するのは
>コストがかかりそうな気がします。(実装によるのかな?)
なんでそう思うの?
あと同時にXHR投げるとき気にする必要があるのは
ブラウザが張れる同時接続数の方な。
>>147 やっぱそうですか・・・。
$.ajaxのdataフィールドにオブジェクト置けるんだから、
POSTの接続を開きっぱなしにして一気に送りつけるとか、できるのかなぁと思ってたのですが。
>>149 接続の確立って時間かかりそう、と思ったけど仕方なさそうですね。
同時接続数とか考えてませんでした。たしかに面倒くさそう・・・。
ありがとうございます。
はじめたばかりで非同期のパラダイムについていけてません。
経験積むしかないですね。
151 :
Name_Not_Found :2010/12/16(木) 08:59:48 ID:hHEpXsI6
>>140 >>143 >>145 返事おそくなりましてすいません。
これ(
>>145 )は、今までと同じ位置に挿入でよかったでしょうか?
やってみたのですが、前へと次へしか表示されませんでしたorz
やはりちょっとややこしいみたいですね・・・
あとは教えていただいたものを自分でいじってみます。
色々とお答え頂きありがとうございましたm(_ _)m
var i; for(i = 0;i < 1000;i++) document.write(i + "<br>"); 上記で1000まで文字を表示させたいのですが、 1の場合、0001と言う風に数字の前に0をつけたいんですが、どういう関数を使えばできるでしょうか?
(i + 10000 + "").slice(1)
('000'+i).slice(-4)
156 :
Name_Not_Found :2010/12/16(木) 15:22:02 ID:hHEpXsI6
>>155 おお!ありがとうございます!!!
助かります!
ダウンロードさせていただきました。
一つずつ試してみます。たぶんこれでいけそうです!
ありがとうございましたm(_ _)m
157 :
Name_Not_Found :2010/12/16(木) 18:19:10 ID:5TeJVssl
値の種類を判断するにはまずtypeofで判断して objectだった場合はさらにinstanceofで判断するものなんですか? 普通はどうするものなんですか? 「new String("〜")」も「"〜"」も同じ種類として扱いたい場合は if ( typeof hoge == "string" || ( typeof hoge == "object" && hoge instanceof String ) ) みたいにするものなんですか?
new String("a") == "a" // true new String("a") === "a" // false
>>158 は「同じ種類として扱いたい」場合についてのレスですか?
>>158 は何を示唆しているのですか?
言葉も添えていただけるとありがたいです
Stringオブジェクトの値とプリミティブの文字列の値を比較したいわけではありません
Object.prototype.toString.call(hoge) == "[object String]"
>>160 そうするのが普通のやりかたなんですね
どうもありがとうございます
162 :
Name_Not_Found :2010/12/16(木) 20:15:05 ID:QA4Lgp7F
<div id="line-1"></div> <div id="line-9"></div> こんな感じで左に行数を表示させるまではできたのですが、 今度はテキストボックス + ボタンで指定された行数にジャンプさせたいのですが 試しに <div id="line-500" name="500"></div>として<a href="#500">500</a>でジャンプさせようとしましたが ジャンプさせることができませんでした。(divにname属性は無いみたいです・・・) どのようなものを使えばidまたはnameを参照して指定行ジャンプさせることができますか?
<div><a></a></div>
href="#line-500"でいけるんじゃない? jsでやるなら、IDで要素特定→ページの左上からの位置を計算→スクロールさせる。 prototype.jsならその機能がデフォであるよ。
165 :
Name_Not_Found :2010/12/16(木) 20:46:05 ID:BkiAvchp
JSの話じゃないけど、 ロケーションハッシュ使うときのname属性のことはもう忘れてやれ
<input name="email" type="text" value="メールアドレス入力欄"> で、テキストフィールドをクリックすると、初期状態の「メールアドレス入力欄」という文字が消える方法が知りたいのです。 また、メールアドレス入力欄という文字の色を薄くするにはどうしたらよいでしょうか? 宜しくお願い致します。
check = function(){ if (this.defaultValue == this.value) { this.style.color = "gray"; }else { this.style.color = "black"; } }; defaultValueとvalueを比べてstyleをいじる
真面目にやろうとすると地味に面倒くさい。 サーバ側に「メールアドレス入力欄」みたいな文字列が 送信されてしまうことがあったりとか。 素直に既製品使うか、ヒントを描いた背景画像を貼り付ける方が楽かもしれん。
<input name="email" type="text" value="メールアドレス入力欄" onclick="if(this.value=='メールアドレス入力欄')this.value=''">
170 :
Name_Not_Found :2010/12/17(金) 03:02:17 ID:oSfL2Ota
ページ全体では無く、一つのidを振ったdiv枠だけをクリックでリドローしたいのですが IFRAMEはこれから駄目になるらしいしjavascriptでやる方法は無いですか?
非同期で通信してinnerHTMLを書き換えればいいじゃん
>>166 <input name="email" type="text" placeholder="メールアドレス入力欄" value="">
173 :
Name_Not_Found :2010/12/17(金) 06:37:31 ID:Knq57y4o
>>172 すれ違いだからずっと書くの我慢してたのに…
はやく気兼ねなく使えるようになるといいな、と
function kakunin(document.form.mail.value == Null) {alert(メール蘭が空です!)} <form name="form"> メール:<input type="text" name="mail" /> <input type="submit" name="sousin" value="送る" onmousedown="kakunin"> </form> とメール蘭が空だった場合アラートが表示されて送信できないという風にしたいのですがどうすればいいのでしょう?
メール欄のvalueを見て 空ならアラートを表示 空じゃなければ送信 という風に分岐させればいい
176 :
Name_Not_Found :2010/12/17(金) 08:09:45 ID:Knq57y4o
var f = フォーム要素; var t = メール欄のinput要素; f.addEventListener("submit",function(evt){ if(t.value == ""){ alert("boo"); evt.preventDefault(); } },false);
177 :
Name_Not_Found :2010/12/17(金) 09:24:22 ID:+4z7HO8r
>>168 Submit前にローカルで入力チェックくらいするだろ
サーバに何でもかんでも送って画面遷移増やすより良くね?
178 :
Name_Not_Found :2010/12/17(金) 10:01:18 ID:MlDgw+Cb
この方がいいのか?な? var f = フォーム要素; f.addEventListener("submit",function(evt){ var t = evt.target.qurySelector("input[name=mail]"); if(!t || t.value == ""){ alert("boo"); evt.preventDefault(); } },false);
>>178 それIE非対応ですね
<script type="text/javascript">
function kakunin(){
if(!document.form.mail.value){
alert("メール蘭が空です!");
return false;
}
}
</script>
<form name="form" id="form" action="
http://www.google.co.jp/ " onsubmit="return kakunin();">
メール:<input type="text" name="mail" />
<input type="submit" name="sousin" value="送る">
</form>
placeholderだのIEで動作しないのだの普段からそんな俺俺コード書いてるの? せめてただし書きのひとつでも添えればいいのに
はぁ
ゆとり乙
ゆとり(・ω・`)乙 これは乙じゃなくてポニーテールなんだからね!
184 :
Name_Not_Found :2010/12/17(金) 13:57:33 ID:mkxOMW2F
>>180 ほら、各種ブラウザ対応とか書きだすと長くなるじゃん
でも、フレームワーク使う前提とかで書くと根本的に理解出来ないじゃん
かと言って、レガシーな書き方を今更教わっても嬉しくないじゃん
そんな感じで
まあ趣味なら別にいいだろ
ゆとり乙
蘭ねぇちゃ〜ん!
189 :
Name_Not_Found :2010/12/17(金) 19:30:34 ID:LLU+8/OE
>>188 その2行ずつのtrをtbodyでくくって、tbodyごとソート処理したらいい
>>166 >168 も指摘しているが、JS無効も考慮すると結構面倒。
・window.onload 時に input.value = 'メールアドレス入力欄'; を実行
・初期値判定は input.value === 'メールアドレス入力欄'
・form.onsubmit 時に input.value === 'メールアドレス入力欄' なら input.value = ''; にする
・input.onchange 時に input.style.color = input.value === 'メールアドレス入力欄' ? 'glay' : 'black';
対応数が多いなら、初期値を格納したオブジェクトor配列を別途用意した方が良い。
191 :
190 :2010/12/18(土) 00:12:31 ID:???
input.onchange は input.onfocus の間違いだった。 placeholder は getAttribute を使えば未対応ブラウザにも対応できないわけじゃない。 >166 が HTML5 で書かれたものかどうかはわからないが。
>>189 あれ?tbodyって、幾つあってもいいんだっけ?
194 :
190 :2010/12/18(土) 00:41:08 ID:???
<div id="foo">........</div> こんな感じになっているときに、jQueryで新しいdiv要素<div id="bar">*****</div>をfooのあとに付けて <div id="foo">........</div> <div id="bar">*****</div> のようにしたいです。 どんな感じで出来るのでしょうか?
jQuery限定の質問はjQueryのスレで
同じ JavaScript なんだからここでいいんじゃないか jQuery質問スレはないし
分けなきゃならんほど人もおらんしな
200 :
Name_Not_Found :2010/12/18(土) 02:42:56 ID:1Ia/M7D5
div id=abc で <img src="img/botann.png" onclick="var e = document.getElementById('abc');e.innerHTML = e.innerHTML;"/> なボタンでabc内を更新をしてもIE6,7,8では更新できるのですがffやsafari、オペラで更新できません どうしたらIE以外のブラウザでも正常に動きますか?
そういや、もう冬休みの季節なんだな。
そうだな。未来ある若者には、この休みを使って存分にレベルアップしてほしい
また丸投げしてさんざんスレでいじめられるやつが出てきそうだな
スレあるなら次スレからテンプレに入れたら
>>205 そこはjQueryの総合質問スレッドじゃない
たまに俺も回答するが、ほとんど人がいないし
変数に入っている数値の後ろから2文字だけ抜き出して他の変数に代入したいのですが どの関数を使えばできるでしょうか? var a,b a = 1945; b = 45
>>209 .toString() .slice()
x % 100
ひと桁の時にゼロを補うのかどうか。
"0" を補うとデータ型が変わってしまうけどね…。 function foo (a) { a = Math.abs(a) % 100;; return a < 10 ? '0' + a : a; } foo(1945); foo(9); foo(-109);
文字列になってしまうことよりも8進数になる可能性があることのほうが問題だろ javascript最大の糞仕様
>>214 ES5 の strict mode では、その動作は解消されてるよ。
8進数の心配はいらないでしょ。 「2文字だけ抜き出して」であって 「2桁だけ抜き出して」ではないんだから。
String型に変換するのだから8進数の問題はないだろう。
そもそも何も考えないでも、106 % 100 === 6
8進数として扱われる処理を書く方が難しいと思う。eval() を使うぐらい?
>>211 は負の数を考慮していないのがやや気になる。
parseInt
parseInt(n,10) なら8進数の問題はないと言いたいのかな。
>>221 それはわかるんだけど、parseInt を使って >209 を実装する形が見えない。
実はゼロが必要なくて数値型が欲しくて文字列処理した後に parseInt という落ち?
OpenSocial扱いたいのですが Javascriptってどれくらいのレベルが必要ですか?
達人級
最後の中ボスを倒せるくらいのレベル
あきらめました
227 :
188 :2010/12/19(日) 04:17:16 ID:???
228 :
Name_Not_Found :2010/12/19(日) 05:19:25 ID:8JM4lqU/
>>227 元々あるやつでどうにかしようとしたら結構修正必要だと思うよ。べた書きだろうし。
全部。
最後の本ボスを倒せるレベルだとhtml5も余裕ですか?
巡航ミサイルの誘導プログラムが書けます。
それの難しいところはプログラミングの知識ではありません
>>232 プログラミングとコーディングの区別が付いてない様です
tab.setup = { tabs: document.getElementById('tab').getElementsByTagName('li'), pages: [ document.getElementById('page1'), document.getElementById('page2'), document.getElementById('page3'), document.getElementById('page4'), document.getElementById('page5') ] } //オブジェクトをセット tab.init(); //起動! 上記は公開してあったのを持ってきたのですが 一番上のtab.setup〜からtab.initまでがわかりません 一瞬関数かなと思ったんですけど、よくわかりません 名前もわからないので調べようがありません 上記のような物をなんていうのでしょうか?
オブジェクト
>>234 オブジェクトリテラルまたはオブジェクト初期化子
initって関数よく見るけどなんでinitなんだろう
initializeの略だってことは百も承知だろ馬鹿w
初めに行う処理をまとめているから、initialize
はじめに行う処理をまとめているってconstructerなんじゃ
コンストラクタと関数実行は別だろ コンストラクタに小文字で始まる名前なんか付けないし、"init" なんて命名しないぞ あと、constructer じゃなくて constructor じゃないのか?
「馬鹿」という言葉は自分より馬鹿な相手に使うべきだ
>コンストラクタと関数実行は別だろ >コンストラクタに小文字で始まる名前なんか付けない ごめんさっぱりわからない
最初に実行する関数ならstartでもbeginでもよさそうだけどね 呼ばれるたびに初期化させる目的の関数に限ってinitって名前を付けてるわけでもなさそうだし
今んとこ歌はミズノ>サカナ>>>>>>>ワコだな
僕は それを 左へ受け流スぅうゥうウー
初期化が必要な場合は「最初に呼ばれる関数」でやるのが当たり前で、 それにinitって付けるのはだいぶ昔からの慣習だからなあ 少なくとも90年代初頭に「構造化プログラミング」って言葉が流行りだした頃には init()って関数名をあちこちで見てたような記憶がある
Windowsプログラミングでも、たとえばダイアログを生成するときには
WM_INITDIALOGってメッセージを使うことになっていたりする
こういうのに触れているうち「初期化=init」ってのが頭に刷り込まれてきて
もはや疑問を覚えることすらなくなってくるし(だから
>>245 の疑問は結構新鮮だった)
自分が何か書くときもそういうコードを書く
それを見た他の人も自然とinit()を使うようになる、といったところが事実だろう
つまり「単なる慣習」以外の意味は特にない
初期化目的じゃなくてもよくわからずorとりあえずinitって名前付けてる場合が見受けられるようになって 元の意味があいまいになってるってことすねなるほど 生き物である言葉ではよくあることすね
>>245 のレスでようやく理解した
自分がいつもresetって書いてる関数のことか
(・・;)エ?
別に何かを初期化するわけでもなくドミノ倒しの最初のドミノ的な関数にinitって付けてたよ・・・恥ずかしい・・・
元々の意味は初期化処理をまとめている関数だから init なのか
そらそーだろ・・・
初期化処理は始めに行うのが当然と思っていたから勉強になった
初期化って何度も行うわけじゃないでしょ 普通は最初に1回=コンストラクタ プロパティとか何かを任意のタイミングでデフォルト値に戻したりとかならそれこそリセットだ
「コンストラクタ = 初期化」と理解している人がいるけどどういう意味で使ってる? var Initialize = function () { ; } var hoge = new Initialize(); コンストラクタというからにはこんな使い方でないとしっくり来ない。 "Initialize" という名前のコンストラクタ関数を作る状況が思いつかない。
「設定を初期化してください」みたいな日本語は原文がinitializeの場合やresetの場合があったりするんですね 「initialize=初期化」って頭にあってその「初期化」って日本語が上記のような使われ方されているので「初期化」のイメージがおかしくなっていました initializeやinitializationが予約語になっていて役割が決まっている言語もあるみたいですね rubyはnewで生成してinitializeで初期化みたい
オブジェクトの初期化とオブジェクトデータの初期化の違いでしょ オブジェクトデータの初期化を行うなら コンストラクタから初期化関数を呼ぶほうが良い
Javascriptで記述されたソースをjavaに変換できるツールを探してるんだが 誰かしらない?
>>262 こういうこと?
function Hoge () { ; }
Hoge.prototype.init = function () { ; }
オブジェクトデータという用語は始めて見るが、どういう意味だろ
ES で初期化といえば「変数の初期化」を指す だから、変数の初期化をまとめるから init という方がしっくり来るな
>コンストラクタから初期化関数を呼ぶほうが良い コンストラクタ自体が初期化を行うロジックなわけで 別に初期化関数を定義するっていう考え方がどうも理解できない
>>262 の「オブジェクトデータ」はプロパティとかメソッドを指してる?
>>267 コンストラクタが長くなってきたら別関数にしたりしない?
JSでコンストラクタを書くときだって、prototypeに関数を追加するのと
hiddenフィールドから値を拾ってきてプロパティにセットしたりするのとは
別々になってた方が見やすい(デバッグする上でも)
>>269 コンストラクタに書くコードをインスタンスメソッドに移すだけで何も変わらないような気がする
>>270 そりゃ処理的には同じことをやるんだから変わらないさ。
オブジェクトの初期化:関連するオブジェクトの生成とか
オブジェクトデータの初期化:自オブジェクト内の変数とかの初期値セットとか
と思ってるが
自分はこれで
>>262 は違和感ない。
コンストラクタで行う以外にも使う処理なら分けるかもしれないけど それは初期化じゃなくて単なるリセットなんじゃないの
>>271 すまないが、あなたの使う用語は怪しいのでコードで説明してくれると助かる。
var Hoge = function () {
// オブジェクトの初期化 (何をする?)
this.init.apply(this, arguments);
}
Hoge.prototype.square = function () { return this.x * this.y; };
Hoge.prototype.init = function (x, y) {
// オブジェクトデータ(?)の初期化
this.x = x;
this.y = y;
}
var foo = new Hoge(10, 20);
オブジェクトの初期化が何を指しているのかがわからない。
関数、配列、要素ノード...とあらゆるものがオブジェクトなわけで。
hiddenフィールドから拾う処理も初期化処理には見えないし。
274 :
262 :2010/12/19(日) 21:55:39 ID:???
275 :
271 :2010/12/19(日) 22:02:30 ID:???
>>273 (1) prototypeに関数追加
(2) hiddenフィールドから値を取得、インスタンスにセット
で別関数に分けることを想定してる
(1)はコードをちゃんと書いていれば確実に実行される一方、
(2)はサーバサイドで何か間違いやらしていればvalueが空になっていたりする
その場合は(2)の中から例外投げてコストラクタ内でcatchして
ダイアログなりconsole.logなりでエラー出すようにすればデバッグもやりやすいし
コードも読みやすくなるでしょ、という話
処理の内容自体はだらだら全部同じところに書くのと勿論変わらない
276 :
269 :2010/12/19(日) 22:03:19 ID:???
var Storage = function (name) { this.name = name; this.init(); }; Storage.prototype.init = function() { this.datas = {}; }; Storage.prototype.clear = function() { this.init(); } こんな感じ?
278 :
273 :2010/12/19(日) 22:20:35 ID:???
>>275 あー、何だろう。俺の読解力が足りないのかまだ理解できてない。
特に「prototypeに関数追加」は勘違いがある気がするんだが…。
まず、(1), (2) の対応関係は以下でOK?
(1) prototypeに関数追加 -> コンストラクタ Hoge
(2) hiddenフィールドから値を取得、インスタンスにセット -> Hoge.prototype.init
>>277 最初は俺もそんなイメージでいたが、それだと「prototypeに関数追加」じゃないんだよね。
class Hoge { private int x; private int y; Hoge(_x, _y) { this.setX(_x); this.y = _y; } void setX(_x) { this.x = _x; } int sum() { return this.x + this.y; } public static void main(String[] args) { Hoge hoge = new Hoge(3, 5); System.out.println(hoge.sum()); //8 hoge.setX(5); System.out.println(hoge.sum()); //10 } }
280 :
273 :2010/12/19(日) 22:36:29 ID:???
function Hoge () { // オブジェクトの初期化 Hoge.prototype.piyo = function () { ; }; this.init.apply(this, arguments); } Hoge.prototype.square = function () { return this.x * this.y; }; Hoge.prototype.init = function (x, y) { // オブジェクトデータ(?)の初期化 this.x = x; this.y = y; } var foo = new Hoge(10, 20); console.log(foo.hasOwnProperty('piyo')); // false 「オブジェクト -> インスタンスメソッド」「オブジェクトデータ -> インスタンスプロパティ」として「prototypeに関数追加」から Object#hasOwnProperty の返り値は false である必要がある。 __proto__ や constructor を使ってもいいが、コンストラクタで prototype を初期化するメリットが感じられない。
piyoに関しては間違った認識だと思う
282 :
273 :2010/12/19(日) 22:57:07 ID:???
283 :
273 :2010/12/20(月) 00:23:16 ID:???
var Hoge = function () { this.piyo1 = 'piyo1', this.constructor.prototype.piyo2 = 'piyo2'; }; var foo = new Hoge(); console.log([foo.piyo1, foo.hasOwnProperty('piyo1'), Hoge.prototype.piyo1]); // ["piyo1", true, undefined] console.log([foo.piyo2, foo.hasOwnProperty('piyo2'), Hoge.prototype.piyo2]); // ["piyo2", false, "piyo2"] 全て想定内の挙動だった。
サイ本読んでないことは分かった。
煽るだけで何もしないことはわかった
サイ本読んでなくてどこがおかしいか分からないから教えてくれ
287 :
Name_Not_Found :2010/12/20(月) 01:04:20 ID:wUUEZoQR
画面を切り替えないで、POST送信する方法ってありますか?
XHR
289 :
273 :2010/12/20(月) 01:09:35 ID:???
サイ本が何を指しているのか知らないが、JavaScript第5版は読んだ。 良書なことは認めるけど、ES3, ES5 の方が信用できるとも思う。 真面目に答えてくれそうにないことはわかったのでもういいよ。
290 :
Name_Not_Found :2010/12/20(月) 01:19:00 ID:wUUEZoQR
>>288 おぉ、こんな便利関数があったとは〜
少し調べて、いろいろ試してみます。
ありがとうございました。
291 :
Name_Not_Found :2010/12/20(月) 01:28:53 ID:/KjWSHgF
>>280 これって、なんでpiyoだけ中に書いてるの?
squareとinitと同じように外に出したら問題がある?
自分の場合、最近newを使ってオブジェクト作らずHoge.init()みたいにしてオブジェクト作成するようにしてるから
そういうためにinitを用意してたりする。
292 :
273 :2010/12/20(月) 01:52:04 ID:w2g6av1v
>>291 全くその通りだと思う。俺なら piyo は外に書くよ。
コンストラクタ内で piyo を定義しているのは >275 の「(1) prototypeに関数追加 」をそのまま実装するとそうなるから。
個人的にはコンストラクタ内で prototype を経由しなければならない状況はそうそうないと思ってる。
コンストラクタの中でインスタンスメソッドを定義するのは this.x, this.y を公開したくない場合に限られるんじゃないかな。
var Hoge = function (x, y) {
this.piyo = function () { return x*y; };
};
これならわかる。
ここでコンストラクタの中で prototype を経由することも勿論可能だけど、そうするとnew演算子でオブジェクトを生成するときの多様性が失われてしまう。
だから、>280 で「prototype を初期化するメリットが感じられない」と書いたわけ。
> Hoge.init()みたいにしてオブジェクト作成するようにしてる
なるほど、クラスメソッドとして定義するのね。
293 :
273 :2010/12/20(月) 02:12:41 ID:w2g6av1v
>>291 Hoge.init() はこういう書き方と思ってOK?
var Hoge = function () { ; };
Hoge.init = function (x, y) { var that = new Hoge(); that.x = x, that.y = y; return that; };
console.log(new Hoge.init(10, 20));
コンストラクタに処理を書く方法も思いついたけど、どうもスマートじゃない。(new Hoge.apply(this, arguments); が出来れば良かったんだけど…。)
var Hoge = function (x, y) { this.x = x, this.y = y; };
Hoge.init = function (x, y) { return new Hoge(x, y); };
console.log(new Hoge.init(10, 20));
あと、よかったら Hoge.init() にする理由を教えて欲しい。
Hoge() による意図しない動作を防ぐ狙いがあると推測。だとしたら、後者のコードは意味ないねw
Hoge.init()だと静的メソッドになるのでは? JavaScriptの場合なんでもありだけど インスタンス化してない以上オブジェクト生成とは言えないかと思うけど
>>273 >>269 の「prototypeに関数追加」の真意が知りたいのか
コンストラクタとinit関数を別ける意味が知りたいのか
どっち?
296 :
273 :2010/12/20(月) 02:45:23 ID:w2g6av1v
>>294 普通はそうだけど、明示的に new Hoge を戻り値にしてやれば静的メソッドでもインスタンスを返せるはず。
今、モバイルから書き込んでいるから実証コードは書けないけど instance 演算子を使えば確認できると思う。
297 :
273 :2010/12/20(月) 03:01:15 ID:w2g6av1v
>>295 初めは init を分ける理由が知りたかった。prototype は派生的に出て来た疑問でこちらも出来れば知りたい。というか気になる。
でも、彼の真意がわかれば細かいことはいいと思ってる。
コードを一つ書いて「なぜそう書くのか」を説明してくれれば十分というのが正直な気持ち。
悪いけどもう寝るので、続きは明日。
話の続きを聞かせて
そこへ、リュックを背負った一頭のダルメシアンがやって来ました。 「ベン!待って!」
おもしろがって質問をしている人がいるな
もう終わりならまとめに入ってください できれば初学者にもわかるように噛み砕いて
話の続きを聞かせて
inputフォームに文字を入力して、エンターが押されると呼び出したい関数があります。 jQuery で書きたいと思い、keypressというAPIがあるところまではわかったのですが、 $("#hoge").keypress(function (e){ if((e.which && e.which == 13) || (e,keyCode && e.keyCode == 13)){ //処理 } }); <input type="text" id="hoge" /> それぞれ、script,bodyに書いて、文字を入力してからエンターを押しても呼ばれません。 この書き方が間違っていると思うのですが、どこでしょうか?
e,keyCode
>>305 すいません。
それは此処に書いたときの打ち間違いです。
>>307 ググって参考になりそうなコードを真似たのですが、e.keyCodeだけで大丈夫そうです。
ありがとうございます。
意味の分かってないものは調べろ
「意味が分からないけど人のコードを真似て書きました。でも動きません」って 自分の頭は弱いですと告白してるようなもんだよな
そう書くくらいなら「ここの意味が分からない」と質問すれば普通なのにね。
自分で考えない人は、どこが分からないのか分からないのです。
313 :
Name_Not_Found :2010/12/22(水) 14:10:15 ID:KbKQFO3b
質問です var img = document.createElement("img"); img.src = "hoge.gif"; img.style.webkitTransition = "opacity 500ms ease"; img.style.opacity = 0; img.addEventListener("webkitTransitionEnd",function(){ console.log("transition end"); }); document.body.appendChild(img); img.style.opacity = 1; // ←ここ このように書いて、最後の行で opacity = 1 にして、ジワジワっと 表示されて欲しいんですが、transition-duration の 500ms を無視して opacity = 1 になります。webkitTransitionEndイベントも発火しません これって何故なんでしょうか transition が動いているか確認用に、下記のように書き足してみると ちゃんと機能しているように見えました var n = 1; img.addEventListener("click",function(evt){ n = Math.abs(n - 1); evt.target.style.opacity = n; },false); ブラウザはSafariとChrome(PCとスマホ)です よろしくお願いします
315 :
Name_Not_Found :2010/12/22(水) 15:19:16 ID:cGsG+jPo
javascriptで作ったページで、 writeとかした結果の、プレーンなhtmlを取得するにはどうすればいいでしょうか?
316 :
273 :2010/12/22(水) 15:31:28 ID:???
名前消すのを忘れてた
318 :
Name_Not_Found :2010/12/22(水) 15:34:22 ID:KbKQFO3b
>>314 > 書いてある通りに
つーことは、やっぱ自分の解釈が間違ってんですね
スタイルにtransition = "opacity 500ms ease"と書くと
その要素のopacityに変化があった場合、500msのアニメーションになる
って理解してて、
img.style.webkitTransition = "opacity 500ms ease";
img.style.opacity = 0;
なimgをbodyにappendChild → opacity=0だから見えない
img.style.opacity = 1; → opacityがアニメーションになる
って動作を期待しているんですが…
img.style.opacity = 1; の部分をsetTimeoutか、イベントハンドラでやればいいんじゃないの?
>>315 「プレーンなhtml」の定義は?
>316 のようにDOMでアクセスすれば大体取得できると思うが…。
321 :
313 :2010/12/22(水) 18:23:26 ID:KbKQFO3b
>>319 DOMツリーにぶら下げた直後はTransitionが無効、みたいなイメージですかね
DOCTYPEの内容を取得するにはどうしたらよいでしょうか? 調べてもなかなかヒットしません
324 :
323 :2010/12/22(水) 20:56:39 ID:???
自分自身の関数名を取得する方法はありますか?
>>325 非IE で strict mode ではないなら、
function hoge () { alert(arguments.callee.name); }
hoge();
doctypeについて質問したものです 資料を見ていろいろやって見ましたがどうもdoctypeだけ上手くいかず、他にも挙動がおかしい関数がたくさんあったので実装の問題かもしれません 簡潔にページ全体のソースを取得する方法はありますでしょうか? できるだけ多くのブラウザで動くやり方でお願いします ちなみに環境はDoCoMoBrowserです
>>328 最終的にどんな動作をしたいのか、も書いた方が良い。
XHR でソースは取得できるけど、何となくソースを取得してもダメでした的な結果になりそうな予感がする。
implodeをかっこうよく書きたいんだけどどうしたらいいかな
>>331 implode?
そんな関数あったかな。PHP にはあるが。
function impload(glue,array) { return array.join(glue); } これ以上どうしろと・・・
あー最悪だ・・ 綴り間違ってる上に既に同様のレスがorz
JavaScriptで、現在のDPIの値を知るにはどうしたらいいですか? (96DPIの場合が多いみたいですが、そうじゃない場合もある?) currentStyleでサイズを取得するとptで返す場合があるのでpx値に換算したいのですが
>>338 ありがとうございます。IE以外ではpx値を取得できるみたいなのでIE 限定で問題ありません。
340 :
337 :2010/12/24(金) 01:10:12 ID:???
deviceXDPI はブラウザの設定で変化するので使うなら logicalXDPI ですよね
>329,330 具体的には、自分自身、または自身の子タブと全く同じソースのページを別タブに新たに開きたい、つまりコピーしたいと思っています できればオフラインでも動くようなソースの方がありがたいです
>>342 > つまりコピーしたい
ただのページの複製?ソースを表示したいわけじゃないの?
> できればオフラインでも動くようなソースの方がありがたいです
元のページはオンラインで取得するけど
その後にオフラインにしたときでも、その元のページを複製したいという意味?
それともオフラインのケースは元のページを取得するときからオフライン?(ローカルファイル?)
> 子タブ
これは何を指してるの?iframe?
タブブラウザか何かの用語で、開いた側を親タブ、開かれた側を子タブ、と呼んでいるの?
> 別タブに新たに開きたい
javascriptにはウィンドウとタブを区別する概念はなくてブラウザ側の仕様・設定次第だと思うよ
で、ただ同じページを表示するだけでその後その新しいウィンドウに対して何かしたいわけでもないの?
取得時はオンラインだけどその後オフラインにしても動作させたいわけでもなく
ソースを表示させたいわけでもなく、ただのページの複製ならopen(location)でいいんじゃない
a.onerror=( a.onload=( a.onabort=function(){ delete g[f] } ) ); こんな記述を見かけたのですが a.onerror=(function(){ a.onload=(function(){ a.onabort=function(){ delete g[f] } })(); })(); こんな感じのを省略した形なのでしょうか? 自分的に見慣れない記述なので
345 :
Name_Not_Found :2010/12/24(金) 15:26:59 ID:95ByqtJ2
347 :
344 :2010/12/24(金) 16:36:04 ID:???
>>345 そうみたいですね
ためしに
var i = (1);
var s = ("hoge");
alert(i);
alert(s);
とやったら期待通りのものが出ました
見やすくするために囲ったんですかね
どうもありがとうございました
>>347 >>344 は見やすくするためではない気がする。
こうすると複数のイベントで同じ関数を呼べるってことじゃないかな。
>>344 function の評価値を連鎖的に返している気がする。(未検証)
a.onerror = a.onload = a.onabort = function () { delete g[f] };
代入も式だから、その式の結果を次の代入に使ってるだけ。 初期化なんかで a = b = c= 0; みたいにするのと同じ。
351 :
349 :2010/12/24(金) 18:39:56 ID:???
明らかに下のが分かり易い…
それたぶんGoogleのコードだね インデントして読み進めてみようと思ったけど あそこのソースは異次元すぎてちょっと理解できない
354 :
Name_Not_Found :2010/12/25(土) 06:40:26 ID:2zGOJNK3
あー、Closure Compilerに畳まれたやつか!
>343 説明不足でいろいろと混乱させてしまってすみません… はっきり具体的に言うと ページ内のフォームに打ち込まれたHTMLソースをボタンを押すことで別タブ(ウィンドウ)に開く(blankで空ページを開く→writeでソースを書き込み)機能をもったページAに 自身(ページA)と全く同じページを作り出したり、作り出した後の子タブ(ウィンドウ)の最新のソースを取得してページAのフォームに表示したりいろいろしたいのです ただし、ページAは携帯の画面メモのように保存され、携帯等で簡単にスクリプトやHTMLを書いてテストできるツールアプリのような形にしようと思っており、通信ができない状態でも機能してほしいと思っています (アクセス制限(時間)等への配慮) そしてこれらは結局、自身と子タブ(ウィンドウ)のHTMLソースをまるごと取得できれば解決できると考えています 確か、HTMLタグ内は以前成功したのですが柔軟性を最大限に高めるため、その外側も含めてソース全部、つまり通常ではdoctypeも含めたソースを取得したいです どうかよろしくお願いします
自前のページなら、フレームで開いて もう片方からDOMを読み取ってテキストボックスにでも流しこめば?
>>355 機能が2つあるように見えるんだけど、どちら?
1. A.html のtextarea要素に書かれたHTMLタグを別のウインドウに出力したい
2. A.html の window を別のウインドウに複製したい
1. は DOMParser でも使う。
2. は createHTMLDocument, importNode とか。
>358 やりたいことを絞ると、 1.で別ウィンドウに開いた後、そのページのDOMがscriptによって変化するとして、その変化後のDOMを取得したいのです それで何が聞きたいかといいますと、 <body>内のDOMを取得する方法等はもちろんわかるのですが、 <!doctype>から</html>までのDOM、もっと言えばソース丸ごとを取得できる簡潔な方法がどうにもわからないので教えてほしいということです ただし、携帯で動かしたいので、JavaScript1.2程度で、DOMも(上の資料で)オプション的な操作を使わずにいきたいと思っています ちなみにdoctypeの直接参照は何故かできませんでした とりあえず、<html>の外側を取得する方法はありますでしょうか?もちろんXHRは使えません
ありません
教えてくれたらマ○コうpします。。
362 :
Name_Not_Found :2010/12/26(日) 13:38:45 ID:YhwVhB8V
気持ち悪い
書き出す関数でも作ればええよ
>>359 DOM を使わずにノードにアクセスできるわけないだろ。
JavaScript 以外の言語を使え。
>>361 変態は去ね。
真面目に答えて損した
つか、自分が作ったページを参照するんだったら、doctypeなんて何通りも無いんじゃないの。 ファイルかフォルダ名に識別できるような名前を付けておいたら
自分が作ったページならhtml要素外に何を書いてあるのかもわかってるんだから 取得したhtml要素内の文字列に、html外に書いてあるものと同じ文字列をただ付け加えればいいじゃない DOMで書き換えられないってことは自分が書いたままで改変されていないことが保障されているんだし サーバサイドでhtml要素の外側に何か挿入されるようなレンタルサーバとかなら知らないけど
つか普通に割れ鳥だろ
トリップが公開されている時点でネタと思われても仕方ない
環境は携帯電話ですって人がときどき質問に来るけどいつもコミュニケーションがうまく取れない
docomoブラウザは死ねばいいのに
ケータイweb屋にまともな奴がいるとでも思ってたのかw
あるJavaScriptのライブラリを見ていたところ、 if (typeof something_var == 'undefined') something_var = 1; みたいなのを羅列していたのですが、 これはライブラリ全体を、 (function(){ })(); で囲ってしまえば不必要な処理ですよね?
>>374 グローバル変数なんだから、どちらにしても必要。
>>375 なるほど
グローバルにしたいからなんですね
もし定義されていたらどうするつもりなんでしょうね・・・
else処理がないので全く関係ないsomething_varをそのまま使うことになりそうですが
>>376 そのまんまだろう。
出来るだけネイティブオブジェクトを利用したいから、独自定義しない。
あるいは、二重に同じオブジェクトを定義することを避けるため。
など想像できるが、これ以上はコードを読まないとわからない。
>>376 グローバル変数、もといグローバルオブジェクトのプロパティを判定するなら
if ('something_var' in window) { /* いろいろ */ } みたいにするだろ、たぶん
typeof演算子 は ReferenceError にならないので、グローバル変数の存在チェックに使われることがある。 window を使えない環境でも有効なのが特徴。
Stringオブジェクトを拡張したexStringオブジェクトを作りたいのですが、 継承はどのようにすればよいでしょうか。
>365 DOMは使ってもよいのですが携帯用なので初歩的なDOM操作しか使えないということです >367,368 ユーザーがどんな形で入力してくるかわからないですし、これからの拡張性を考えて とにかく最強に柔軟にしたかったのですが、ある程度割り切るしかないですかね >370 すみません…自分の名前のhikaruを使ったのですが公開されているとは夢にも思いませんでした >371,372,373 日本語が下手ですみません 携帯やdocomobrowserが悪いんじゃなくて僕が悪いのはわかっています そういえば前相談にのってもらったcanvasを使わず円等の図形を表示する方法は 縦幅1pxの背景付きdivブロックを、長さをそれぞれ調整して上から順に重ねるのが一番軽いとわかりました 今回も皆さんからもらったヒントをもとにまた試行錯誤してみます そのうちまた質問する機会があると思いますが その時までには日本語力と思考整理力を向上させておきますので、どうかまたよろしくお願いします 今回はいろいろ煩わせてすみませんでした そしてありがとうございました
>>380 function exString() { /* コンストラクタ */ };
exString.prototype = new String('');
383 :
Perl忍者 ◆M5ZWRnXOj6 :2010/12/27(月) 12:28:35 ID:cigs+Z6i
PerlもPHPもCも使わざるおえない・・・言語を選んでる暇がないとか多忙ぶってるゴミクズは死んで お願いだから死ね かっこつけてんじゃねえよ
使わざるを得ない、な
まずは日本語からきちんと身につけましょう、というお話。
<script type="text/javascript"> <!-- function keybind() { var e = window.event; if(e.KeyCode == 13) { } } // --> </script> 〜〜〜〜〜 <form action="" name="f1"> <input type="text" name="t1" value="" onKeyPress="keybind()"> <input type="text" name="t2" value="" onKeyPress="keybind()"> <input type="button" value="Submit!!"> </form> テキストボックスにフォーカスがある状態ででEnterキーやCtrlキーが押された時 そのフォーカスがあった、テキストボックスにEnterやCtrlという文字列を挿入したい場合 何を使えばできるでしょうか? 前も質問したのですが、よくわからなかったのでもう一度質問させてもらいました
まず前に質問した時の答えはどういう内容だったんだよw 同じ答え出てきても仕方ないだろ
390 :
386 :2010/12/27(月) 17:25:21 ID:+nYPbk3I
575 Name_Not_Found[sage]投稿日:2010/11/24 19:49:14 ID:???
テキストボックスにカーソルがある状態でTabキーを押したら、
Tabという文字列をテキストボックスに挿入し、aキーを押したらaという文字列をテキストボックスに挿入したい場合
onKeyPressイベント、onKeyDownイベントを使うのはわかりますが
それだったらどのキーを押しても反応してしまうので困ってます
誰か教えてください
576 Name_Not_Found[]投稿日:2010/11/24 19:57:59 ID:qm0HIwho
>575
イベントがキーコードを持ってるからそれで判別すれ
577 Name_Not_Found[sage]投稿日:2010/11/24 20:05:44 ID:???
>575
event.keyCode - MDC Doc Center
https://developer.mozilla.org/en/dom/event.keycode 582 Name_Not_Found[sage]投稿日:2010/11/24 23:59:40 ID:???
>576
>577
ありがとうございます
助かりました
>386 <script type="text/javascript"> <!-- function keybind(el,evt) { switch(evt.keyCode){ case 13: stopDefault(evt); el.value+="Enter"; break; case 17: stopDefault(evt); el.value+="Ctrl"; break; } } function stopDefault(e){ try{ e.preventDefault(); }catch(e){ window.event.returnValue==false; } } // --> </script> <form action="http;//www.google.co.jp" name="f1"> <input type="text" name="t1" value="" onkeyup="keybind(this,event)"> <input type="text" name="t2" value="" onkeyup="keybind(this,event)"> <input type="button" value="Submit!!"> </form> こんな感じでしょうか?
>>390 alert(event.keyCode) でキーコードを確認するべし。
>>392 window.event.returnValue にする理由を教えて。
e.returnValue ではいけない?
395 :
Name_Not_Found :2010/12/27(月) 19:01:08 ID:whY1tpCn
コメントフォームを付けたくて既存の物を探してたらJavaScriptを使った良いもの↓が
あったんだけど動作しませんでした。
http://www.inetagency.net/doc/comment/3/ CSSも効いてなかったからHTMLのソースを見てたらパスの最初の"/"が不要だったので
取ったらCSSは効きました。下の方のJavaScriptファイルへのパスの"/"も取ったんだけど
こっちは動作しないです。色々試したけど分かりません。
398 :
Name_Not_Found :2010/12/27(月) 19:12:14 ID:whY1tpCn
>>396 下のコメントフォームに質問していいみたいだから似たようなこと前に書いたんだけど
バグってて出来ませんでした。メールも出来るみたいなので出来なかったら直接聞くのも
考えておきます。
>>397 取らないでファイルをC:直下に置かないとダメすか?やってみます。
多分ファイルは正しくて問題は自分のミスです。
>>394 catch(e)ってしてるからじゃない?なんで同じeにしたのかはわからないけど
>>399 そうかもしれないけど、window.event に依存する理由がない気がする。
window.event は IE と Firefox (Opera だったかも) だけで動作する独自拡張じゃなかった?
event.returnValue は先行実装とはいえ、モダンブラウザでも動作する。
わざわざ window.event を経由する理由は思い当たらない。
401 :
400 :2010/12/27(月) 19:32:17 ID:???
ごめん。window.event は Opera だった。 Firefox は「window.event is undefined」
そもそも==
>>400 とくに理由なんてありません なんとなくそう書いただけです
function stopDefault(e){
try{
e.preventDefault();//IE以外
}catch(err){
e.returnValue==false;//IE
}
}
>>402 あ そうですね =が一つで結構です
function stopDefault(e){
try{
e.preventDefault();//IE以外
}catch(err){
e.returnValue=false;//IE
}
}
「画像aを800msec毎にn回読み込んだあと、画像bを表示する」というのをやりたくて settimeoutを使えばいいということはわかったのですが、検索してもコードの書き方が 理解できません。javaScript難しいッス。 申し訳ない話ですが、コードの書き方をご教示頂けないでしょうか。
407 :
Name_Not_Found :2010/12/28(火) 13:48:22 ID:0nwI31hT
すべての要素の一番上にある要素を挿入したいんですが、方法がわかりません。 InsertBeforeを使えばいけるかなとは思ったんですが、 Node was not found" code: "8 ってエラーがでてうまくいきません。 どうすればいいんでしょうか?
>>407 そのエラーの通りノードがないんでしょ
どういうコードか晒してみて
配列の複製に繰り返し処理がいるとか、変数のオブジェクト型は参照だってのが混乱する あと、var obj = socument.createElement('div')とかしたあとにappendChild(obj)で実装してから obj = document.createElement('span')とかやっても問題ないのかとか、頭がパンクしそうだぜ・・・
410 :
Name_Not_Found :2010/12/28(火) 16:11:09 ID:DfkofjaA
javascriptを始めたばかりで、その前にactionscriptもやっているのですが HTMLCollectionの全ての要素に対してfor文で処理をする際、サンプル等ではよく var p = document.getElementsByTagName("p"); for(var i=0; i<p.length; i++) のような書き方をしていますが、この参照数を取得する部分"p.length"の書き方は普通なのでしょうか? actionscriptの時に配列arrayをforで処理する場合 for(var i=0; i<array.length; i++) とすると、処理負荷が大きいという事で var al = array.length; for(var i=0; i<al; i++) のように書いた方がいいと、参考にした文章には載っていたのですが javascriptでは"p.length"のように直接lengthから参照しても問題は無いのでしょうか?
>>409 問題ないが何を意味してるかわからないけど、そういう操作してもおかしくはない
>>410 パフォーマンスに気を遣ってるサンプルの場合は後者のやり方やってるよ
var p = document.getElementsByTagName("p");
for(var i=0, l=p.length; i<l; ++i)
こんな感じ
>>411-412 javascriptでもlengthを一度変数に入れて、というのはパフォーマンス面で有効なんですね
一行で書くやり方は初見でした
参考にさせて頂きました、素早い返答ありがとうございます。
new Image()とdocument.createElement("img")って使い分けていますか? canvasに画像を貼り付けたい場合、 drawImageメソッドの第一引数はurlじゃなくてImageオブジェクトなので Imageオブジェクトを作ってからそのsrcプロパティにurlを指定して Imageオブジェクトを渡さないといけないみたいですが 解説サイトの例を見ているとどれもnew Image()でImageオブジェクトを作っているので new Image()に何か意味があるのかな、new Image()じゃないと駄目な場合とかあるのかな・・・と
document.createElement("img")はnew Image()の上位互換みたいなもの または実装によっては同じものってことですか あえてnew Image()を使う意味はないってことですか どうもありがとうございますm(_ _)m
new Image() の方がタイピングが簡単じゃない(#`з´#)
そーいやImageオブジェクトってどこかで定義されてたっけ? DOM 2 HTMLにはないんだよな・・・ HTML5にもインターフェイスの定義はないみたい
Imageコンストラクタの中身ってどうなってるの?真似してnew Div()とかやってみたい
built-in objectって必ずしもJSのコードで書けるとは限らないんじゃないかな
422 :
418 :2010/12/29(水) 01:05:41 ID:???
>>419 ありがと、普通に見落としてた
やっぱHTML5ではじめて明文化されたタイプの代物か・・・
>>417 素直にcreateElement使っとけ
>>411-413 for (var i = p.length - 1; i <= 0; i--) でいいじゃん
争点がどこかわかってないかんじ
オブジェクトのプロパティを何度も参照するとパフォーマンスに 悪影響が出るという点だと理解してたんだが、間違ってるなら指摘して欲しい
Image先行実装やったんか
というより既成事実
onmouseoutの挙動が厄介なんだ。 elm.onmouseout = function(e){ if (!e) e = window.event; if (e.target == elm) { alert("out"); } }; elmの中が入れ子<div(elm)><div>a</div></div> になっていると、elmの中のdivに入ったときにもout判定されるみたいで。 elmの中のdivに対して関数は同じでonmouseoutやってみたら、今度はalert無しになった。 ↑elm = elm.getElementsByTagName("div")[0]; 何かいい案あったら教えてください。
HTML5は 昔の力の強い者が決めた俺俺ルールの 集まり
>>429 > elmの中のdivに入ったときにもout判定されるみたいで
子要素に mouseover が起きた時点で、親要素に mouseout が起きる。
そしてその直後に、子要素の mouseover が、改めて親要素に伝播する。
マウス位置調べる
>>429 event.target と event.relatedTarget の2つをチェックする。
間違ってないと思うならそれでいいんじゃない?
「カンマ演算子なんてトリッキーな知識持ってる俺素敵!」ってせっかく思ってたのに 足元すくわれてムキーってなってるだけ
423=425=435=437か 哀れ
>>437 カンマ演算子なんて、この一連の文脈でどこに出てきてんのw
440 :
439 :2010/12/29(水) 23:28:43 ID:???
まさか、var 文で複数の変数をカンマ区切りで書き連ねるのを カンマ演算子とか思っちゃってんのかな。
442 :
439 :2010/12/29(水) 23:31:24 ID:???
>>430 よしわかった、お前MLに突貫してこい
無視されるだけだと思うがw
俺俺ルール採用でもいいからさ ブラウザ間の仕様だけは統一してくれよマジで
>>441 カンマ演算子って初めて知ったからどれだろうとレス見直してみたら自分のだった
var a=1, b=2, C=3;
みたいなのをカンマ演算子って言うのか。勉強になった。
>>423 のは単純に
>>410 の質問の答えになってないから変な流れになってるんでしょ?
>>410 は「p.lengthを始めに保持して0から最後までループ」って意図だと思ったから
なるべくその意図を汲んで答えたわけで、逆順なら
>>423 でもいんじゃない?
それでいいならいいんじゃない?
>>445 > var a=1, b=2, C=3;
> みたいなのをカンマ演算子って言うのか。
それ違うから。
>>447 違うの?!一応ググったら「for文の初期化のカンマで式を繋いだもの」みたいなのが書いてあって信じたんだけど。
449 :
437 :2010/12/29(水) 23:48:38 ID:???
>>445 いや
>>440 が正しい。ただvarで2つ変数を宣言してるだけ。
for文でカンマ演算子を使うのであれば、
for (var i = 0, j = 0; i < 10; i++, j++)
みたいな感じ。最後の「i++, j++」のカンマはカンマ演算子。
>>449 なるほど。
でも変数宣言て式じゃないんだっけ?
var a = 1;
var b = 2;
i++;
j++;
の全部が式だと思ってたからvar a=1, b=2もカンマ演算子なのかなと思った
451 :
437 :2010/12/29(水) 23:56:00 ID:???
MDCには >単一の式でなければならない位置で複数の式を記述したいときに、コンマ演算子を使うことができます。この演算子が最も良く使われるのは、for ループで複数のパラメータを与えたいときです。 とあるのだがa=1,b=2これらも式だから間違ってはないんじゃないの? j++,i++だけが式ってわけでも無いよね?
454 :
437 :2010/12/29(水) 23:57:41 ID:???
× iはローカル変数ではなくグローバル変数になるはずだし、 ○ jはローカル変数ではなくグローバル変数になるはずだし、
久しぶりに式と文を勉強し直す時がきたわw
457 :
437 :2010/12/30(木) 00:00:43 ID:???
>>457 for文の説明にはこうある
for ([initial-expression]; [condition]; [final-expression])
(代入式を含む) 式または変数宣言。
これはどうなるの?
var a = 1, b = 2; で一つの式ってこと?
461 :
437 :2010/12/30(木) 00:09:43 ID:???
>>460 そういうこと。
var a = 0; // 1個の文 (statement)
var a = 0, b = 0; // 1個の文
a = 0; // 式 (expression)
b = 0; // 式
a = 0, b = 0; // 2つの式をカンマ演算子でつないだもの(全体で1個の式)
あー、なるほど。勉強になった。 こんな時間にリアルタイムに回答が返ってくるとは思わなかったわ。
463 :
Name_Not_Found :2010/12/30(木) 00:17:52 ID:HpzG6czP
<script language="JavaScript"> <!--//ランダムで画像を表示する var img=new Array(80); で、複数種類の画像をランダムに表示させるようにしたいんですが、 写真の枚数が20枚くらいだとできるんですが、 上記のように81枚にしてしまうと表示されません。 枚数には上限があるのですか?
そうです、自分で指定している通り、80 という上限があります。
for (i=0, j=1, k=0, fib=0; i<50; i++, fib=j+k, j=k, k=fib){ }
信頼性つーか、仕様書だしなw
IEのオレオレ仕様には泣けてくる >>document.body.appendChild(document.createElement("p")); IE9 "Invalid this pointer used as target for method call" … NG Fx <p> … OK Chrome <p></p> … OK >>document.body.lastChild.appendChild(document.createElement("p")); IE9 "DOM Exception: HIERARCHY_REQUEST_ERR (3)" … NG Fx <p> … OK Chrome <p></p> … OK >>document.lastChild.appendChild(document.createElement("p")); IE9 [object HTMLParagraphElement] … OK Fx <p> … OK Chrome <p></p> … OK こんなので2時間も無駄にしてしまったよ全く,と愚痴ってみる
document.lastChildだと<html>じゃんなんだよもう
>>468 タイミングの問題ではない?
document.body のDOM構築が済む前に appendChild しようとしているとか。
せめて、どこでエラーを出しているのか原因をはっきりさせた方が良い。
document.body === null だからエラーが出ているとか。
>>470 タイミングは問題ないはずなんだよね、イベントとコンソール双方で試してるし…
IE9だからなのかな、
>>document.body
[object HTMLBodyElement] {
appendChild : function(element) {},
replaceChild : function(element, reference) {},
insertBefore : function(element, reference) {},
bgColor : "",
background : "",
noWrap : false,
onafterprint : null,
onbeforeprint : null,
onbeforeunload : null,
onblur : null
...
}
>>document.body.appendChild(document.createElement("p"));
"Invalid this pointer used as target for method call"
ドキュメントモードをIE7かIE8に変えるとうまく動作するのでIE9で仕様が変わった…のかな
>>471 関係ありそうなところを書くと、こんな感じか。
throw new TypeError が通らなかったら、return body; など好きにして構わない。
コンソールで試すとエラーが発生する行数がわからないから、(X)HTML に埋め込んで試して。
function hoge () {
var body = document.body;
var p = document.createElement("p");
if (!body) { throw new TypeError(body); }
if (!p) { throw new TypeError(p); }
if (!body.appendChild) { throw new TypeError(body.appendChild); }
body.appendChild(p);
}
文書型は何だろう?XHTML1 とか…?
XHTML なら、
var namespaceURI = '
http://www.w3.org/1999/xhtml ';
document.getElementsByTagNameNS(namespaceURI, 'body').appendChild(document.createElementNS(namespaceURI, 'p'));
としたほうがいいかもしれない。
あるいは、内容のないp要素ノードを appendChild できない変則仕様か…。
>>475 XHTML1.1 なら、
・<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> を宣言してはいけない。
・サーバの設定で「Content-Type: application xhtml+xml;charset=UTF-8」を出力するようにしなければならない。
・text/html は宣言できない。当然、IE8- は対応ブラウザから外れる。
・ローカルテストするなら、file:/// はダメ。
http://127.0.0.1/ ・script要素は CDATAセクションで括るべき。
>>476 DOCYTPEをHTML 4.01にして適当な鯖に上げてみたけど
ドキュメントモードを(Quirks後方互換)からIE9標準にするとやっぱり駄目だわ
var namespaceURI = '
http://www.w3.org/1999/xhtml ';
document.getElementsByTagNameNS(namespaceURI, 'body').appendChild(document.createElementNS(namespaceURI, 'p'));
も試してみたけど
document.getElementsByTagNameNSで取ってきた物にappendChildが無くて
"オブジェクトでサポートされていないプロパティまたはメソッドです。"と出てきた
>>478 JavaScript Test.しか表示されてません・・
デバッグしてるとどうもネイティブではないコードが混入して動作してるようです
if (isInternetExplorer)
{
var appendChildOriginal = doc.body.appendChild;
doc.body.appendChild = function(element)
{
appendChildOriginal(element);←ここでブレーク
コピペ
http://ideone.com/zOHaf
原因がわかりました DivX Plus Web Player HTML5 <video>というアドオンが原因だったようです… 無効にしたら正しく動作しました まさかアドオンが原因でおかしくなっていたとは…お騒がせして申し訳ない
>>480 アドオンが原因だったのか。
何にしても原因がわかって良かった。
JavaScriptのみでサーバー側にあるcsvファイルやtxtファイルを読み書きすることって可能なのでしょうか? PHPかCGI使わないとできないですよね?
CGI(笑)
CGIは別に間違いじゃないだろ 何を勘違いしたんだい?
「PHPか」を書かなければ問題なかった
読みはxhr使うとして書きは何かしらサーバの処理が必要だよね
PUTメソッドが使えるなら書き込みもできるんでない?
一応、サーバサイドjavascriptってのはあるよ 使ったことはないけど、確かSQLにアクセスできるのがあったはず
現状でどの程度それが利用できる環境があるの?
CSVファイルを細切れに分けて、 未処理のcsvをjavascriptで選択&処理後、適当にPUTすれば 分散コンピューティングかw
>>491 何を根拠に75なんて数字が出てきたんだ
だとしたら、質問する立場の人間の態度じゃないな。もうレスは受け付けないでおこう。
497 :
496 :2010/12/30(木) 16:09:05 ID:???
node.js使えばできるけど文脈からしてそういう意味で質問してないだろう…
499 :
496 :2010/12/30(木) 16:16:02 ID:???
>>487 ,490
PUT を受け付ける側は JavaScript で出来てないのでは?
500 :
496 :2010/12/30(木) 16:18:38 ID:???
サーバサイドで動かさないと解決しないことが伝わればいい、と思う。
それなら最初からそう書けばいいのに
ちょっと質問 var x = false, y = ""; if(x) { y = "A"; } else { y = "B";} x ? (y = "A") : (y = "B"); (x && (y = "A")) || (y = "B"); この場合どれが一番高速に動作しますか、3つとも意味はどれも同じです
IE限定でならデータバインドを使えばできたと思う。
>>502 3番目が一番遅い。1番目が一番速い。
2番目は値を返す処理の負荷が1番目と差が無ければ1番目と同じ。有れば少し遅い。
いずれにせよ行儀の悪い書き方なので1番目以外の記述はお勧めしない。
y = (x) ? "A" : "B"; ならまだ許せる
y = ["B","A"][x-0]; y = "BA".charAt(x-0);
>>504 なるほどありがとうございました、知りたかっただけなので実際書くつもりはないです
>>506 アホなコードを書くなよ。x=trueとかx=-1とかが来たらまともに動かないだろ。
>>506 じゃないけど、JavaScript では true は、数値の場合 1 に変換されるんだよ。
違和感あるけど。
Cだとif文より三項演算子の方が速いとか記事みたことあるな
適材適所だと思うからわざわざ
>>502 を計ろうとは思わないけど
C言語だと-1に変換されるよね。どこかで規定されているの?それとも実装依存?
>>512 true はすべてのビットに 1 が並んだ状態。
これは符号付き 2進数で -1 の扱い。
>>514 すみません。JavaScriptの1に変換されるっていう場合はどうなっているのですか?
自然な解釈を超えて、ECMAScript でその様に規定されているだけでは?
>>499 確かにそうだな。
俺ならサーバー側にPHPを使う。
サーバーサイドJava≠JavaScriptだしな。
あれは英語とドイツ語くらい違うぞ。
>>516 ECMAScript で規定されていて、ブラウザがそのマネをしているという訳ですか?
ttp://www.studyinghttp.net/method#PUT これを読む限りではPUTメソッドはサーバ側が許可していればサーバサイドでの処理は不要
ただレンタルサーバでPUTメソッドを許可しているところは知らないし自前のサーバでもセキュリティ的に難しいっぽい
あとxhrでPUTに対応しているブラウザも限られるみたい
ちなみに
誰もJAVAの話はしていないと思うよ
サーバサイドJavaScript
520 :
Name_Not_Found :2010/12/30(木) 21:39:54 ID:CO9dG8sm
>>520 window.onloadがバッティングしているのでは?
522 :
520 :2010/12/30(木) 21:48:32 ID:CO9dG8sm
どうすれば良いですか? こちらは全くの素人なので具体例を挙げてもらえば嬉しいです。
>>502 は
var x = false, y = "B";
if (x) { y = "A"; }
でもいいか…。
>>524 その方向に持っていくと最終的に
var x = "A";
でいいや、て結論になってしまう気がする。
>>506 y = "BA"[x-0];
でいいじゃん!
>>524 それはtrueの場合yに2回代入するから遅い。
529 :
524 :2010/12/30(木) 22:31:44 ID:???
>>525 多分、x, y ともに可変値という前提があると思う。
>>527 それは気が付かなかった…。
531 :
520 :2010/12/30(木) 22:34:59 ID:xlPaQvtn
>>528 正確には ES5 なら正しい。ES3 では違反。
x の値がBoolean型であることは保証されている(初期化時に型変換するなど)として、 // case(1) if (x) { alert('ok'); } // case(2) if (x === true) { alert('ok'); } どちらの方が速いのだろう? (前者は ToBoolean を通すが、Boolean型なら負荷が低そう)
>>536 そんなものを条件分岐の代わりに使う処理として推奨すべきではないわな
へー、Cっぽく書ける様になるのか。
539 :
502 :2010/12/30(木) 23:07:22 ID:???
>>529 x,y,"A","B"は分かりやすくするための”例え”であって何が入ってるか分からない
(x,y,"A","B"に何を入れても同じように動くようにしたい、bool、number、string、object、functionなど色々)
が前提でした
>>537 今のところはね。
実装が追いつけばその方がわかりやすい、という人も出てくるだろう。C言語似の記法なことだし。
>>526 より
>>506 の方がより多くのブラウザで動作することは確か。
>>539 その前提なら
>>506 の前者は条件を満たしてると思う。
読みやすく書いて あとはコード最適化ツールへお任せ
>>540 (function(){}) - 0は NaN 、 {} - 0は 0 なので!!をつけてやる必要がありますね、
それ以外は等価ですが
あとnumberだと1,0以外の数値を入れれない
ToNumber() がNaNを返せばいいんだから "A" - 0 とかもNaNだよ
>>540 すみません。
>>518 にはレスが付いてなくて、どこに書いてあるか分からないですが、
ECMAScriptには true は 1に変換される って定義されているのですか?
9 Type Conversion 9.3 ToNumber The operator ToNumber converts its argument to a value of type Number according to the following table: Input Type Result Boolean The result is 1 if the argument is true. The result is +0 if the argument is false.
550 :
540 :2010/12/30(木) 23:54:53 ID:???
>>542 確かに…。
var x = new Function;
var y = ["B","A"][!!x-0];
Boolean() でもいいけど、好みの問題だね。
+!!x で良くね? キモいけど。
こういうのってショートコーディングな分、速くなるのかな?
そういうのは最適化ツールにまかせてパフォーマンスを考えつつ保守しやすいコード書くのが一番だと思う
555 :
Name_Not_Found :2010/12/31(金) 02:48:24 ID:DeWcC36b
質問させてください。 var latlng = this.geocoder.geocode({"address":"渋谷"}, function(results, status){ if (status == google.maps.GeocoderStatus.OK) { latlng = results[0].geometry.location; return latlng; } else { alert(address+"は見つかりません"); return false; } }); のような感じで return latlng でlatlngをgeocode関数の返り値にできると思ったのですが、コールバック関数内であるためか chrome, firefoxでは外の latlngがundefined になってしまいました。(IE7だと意図したとおりに動きました。) コールバック関数内で this.latlngに保存するなどの方法も考えたのですが、できればgeocode関数の返り値にできないかと考えているのですが どうすればよいでしょうか?
>>552 ダウンロード時間は短縮されるだろうね。スクリプトの実行速度は別だけど。
>>555 そもそも、その geocode() メソッドは、コールバックの戻り値をそのまま返す仕様なの?
詳しく知らんからパッと見の感想を言うと、変数 latlng はコールバック関数内で宣言されていないから、
外のスコープの latlng を参照している訳で、return で返すまでもなく、if 節で latlng に代入されてる。
別に、IE で意図した通りに値が返されてる訳ではなく、他のブラウザは else に分岐してるのでは?
558 :
556 :2010/12/31(金) 03:38:06 ID:???
違った。 その geocode() メソッドが undefined を返すなら、IE 以外のブラウザの挙動が正しい。 IE で何故 undefined にならないかの方が謎。
559 :
557 :2010/12/31(金) 03:40:29 ID:???
違った。 自分のレス番は 557 が正しい。 何で 556 にミスったかは謎。
IE7のエンジンが遅くて、コールバックが先に呼ばれたのでは
IE6以下とその他のブラウザの判定(24bitPNG対応ブラウザの振り分け)ってどうしてますか?
IEだけ特別扱いなら条件付きコメント
>>563 条件付コメントは2種類のjsファイルを用意しなければならなかったり、ページにコードを書く必要がありますよね
UAによる判定は偽装可能だし、if(window.XMLHttpRequest)などの実装で判別する方法はテストができません
出来れば最後に書いたようなスクリプト内で判別する方法でセオリーがあれば教えていただけないでしょうか
<iflame>と同じことを<iflame>なしでjsだけでできますかね?
iframeに表示させたい情報が同じhostに有るなら問題なし。
なるほど他ホストだと<iflame>必要なんですね ありがとうこざいました
>>565 /*@cc_on 〜 @*/でかこむとIEだけで動作するスクリプトが書けるんですね
ありがとうございました
>>567 横からだけど、同じhostならiframeなしでいける方法があるの?
>>571 どこを見ればいいかよく分からないですが、JavaScriptだけで実現出来ますか?
(ウチが契約しているサーバはCGIなどは使用禁止になってます)
ajaxってことだろ! cgi 使えば外部ホストも取り込めそうだが
なんだよw 何の質問がしたいのかわからんw またnode.jsの話題ループになりそうだから詳しく質問してくれ
>>576 どゆこと?
>>571 だけでわからないだろうから
>>573 が「ajaxでできるよ」って言ってるみたいだけど。
ajaxはJavaScriptだけで実現できる技術ね
>>577 サーバーサイドにCGIは必要ないの?
ajaxは昔ちょこっとプログラム作ったことあるけどCGIは必須だと思ったけど勘違い?
そもそも何がしたいのか分からないから答えようがない
>>579 CGIが使えない環境下にある
>>572 の >実現出来ますか?
って質問にストレートに答えてあげればいいと思うよ。
<iframe src="test.html"></iframe>と全く同じことしたいって? それなら <object type="text/html" data="test.html"></obect>でいいじゃない。 XMLHTTPRequest使っても全く同じにはならないからな
そもそもiframeとCGIが関係してないから
>>571 で完結してると思うんだけどな
>>572 の質問が曖昧過ぎて答えも曖昧になってるだけで、
「同じhostならiframeでHTMLを取得するようにJavaScriptだけでもHTMLを取得できるか」
って意図の質問なら「ajaxでできるよ」で終わってる
何にこだわってるのかわからないけど、こだわってるならもっと具体例出さないと何とも言えないだろう
>>582 ajaxでCGIを使っていたら、JavaScriptだけでできることにはならないんじゃない?
>>583 そもそも「iframeでできること」が前提の話だから
「iframeでCGIが使える」ならajaxでもそうすればいいし、
「iframeでCGIが使えない」ならajaxでも使わない
ってことで直接質問とは関係ない
>>572 「JavaScriptだけで実現できる」が回答になるけど、それでいいのかしら…。
>>583 元々xの部分はXMLだからXMLとかHTMLを直接指定してもいいから
CGIは必須ではないよ?
単純に読み込んでdivで囲んで表示ってことだろうけど、CSSがすげーやっかいそう
>>566 の「<iflame>と同じこと」が何を意味しているのか
<Input type="checkbox" id="hoge" checked> このチェックボックスがチェックされているかどうか、値を取得したいのですがどんな感じで出来ますか? $('#hoge').attr('checked') これかなと思ったのですが、undentifiedになってしまいます。
jQueryの話ならそれでできる >undentifiedになってしまいます とか書いてるあたりからしてあんまり見直しをしない人みたいだから スペルやHTMLのタグ構造が正しいかもう一度確認してみろ
それで取れるはずだけど jQuery(function() { alert($('#hoge').attr('checked')); }); jQuery関数使ってみ
592 :
Name_Not_Found :2011/01/01(土) 14:29:05 ID:1Uwe9A/P
スクリプト記述領域間で変数を共有することはできますか? 具体的には <script type="text/javascript"> <!-- var = test; // --> </script> <script type="text/javascript"> <!-- function add(){ test=test+1; } // --> </script> のような感じで、上の領域と下の領域で同じ変数testを使いたいのですが、 実現する方法がわかりません。 わかるかたいらっしゃったら、教えてクンニ
>>592 var = test;
↓
var test = 0;
>>589 俺なら $('#hoge').get(0).checked にする。
attr() だと属性値を見ているのか、プロパティを見ているのかわかりづらい…。
595 :
429 :2011/01/01(土) 14:45:53 ID:???
mouseoutの判定の成功報告。こんな感じになりました。ありがと〜 element.onmouseout = function (e) { if (!e) e = window.event; var to = e.toElement || e.relatedTarget; if ((e.target || e.srcElement) == element) { while(to){ // 内側へ移動(mouseout)時 return if (to == element) return; to = to.parentNode; } alert("out"); } };
mouseout だけでやろうとするから、複雑で無駄ができる。 mouseover と setTimeout も使えばもっとシンプルになる。
>>595 俺はこれでいいと思う。setTimeout と組み合わせる方が効率が悪い(と思う)。
あえて指摘するなら、window.event は使わない方がいいな。
attachEvent を利用すれば、IE でも第一引数で event を得られる。
>>594 その両者を区別する意味ってあるの?
せっかく jQuery.attr() がDOMの属性をラップするように書いてあるんだから
素直に従っておけばいいと思うんだけど。たとえば
var flag = $('#option1').attr('selected');
の代わりに
var flag = $('#option1').get(0).selected;
と書くとブラウザによっては不具合の元になるらしいけど、
少なくとも俺はそこまでいちいち覚えてらんない。
一律 attr() 使った方がはるかに楽だし見やすいし、
第一そうじゃなきゃ jQuery 使う意味がない。
#
http://code.jquery.com/jquery-1.4.4.js のL1720〜あたり参照
# Safariには先に親のselect要素のselectedIndexにアクセスしてからじゃないと
option要素のselected属性が初期化されない、というバグがあるらしい
>>597 595 のコードではバグが起こり得るのに気付きますか?
すでにあるコードのバグは有る無しであって、起こりえる、じゃないんじゃないの?
>>600 条件(今の場合、HTML や CSS)次第で特定のコードが問題になり得るという意味だが、通じないか?
それにバグ(現象)の原因が特定のコードにあるものであって、「すでにあるコードのバグ」こそ意味不明だが。
>>601 わざわざ「既にある」って書いたのは、未来の話でこれからコードを組もうとしてるときに
「そのやり方ではバグが起こりうる」というなら分かるんだけどなと思って。
この話では既に組まれてる595のコードがあるわけだから「エラーが起こりうるバグが有る」とかじゃないのかなと。
まあ、細かい話なんですが。
603 :
595 :2011/01/01(土) 16:47:18 ID:???
>>599 どういう状況だとバグが起こるのか、出来れば教えてもらいたい。
>>602 JavaScript をブラウザで動かす場合は、必ず DOM も絡んでくる訳で。
今回のケースでも当然、それ次第で、動作に問題が起こったり、起こらなかったり、という話。
595 のコード単体では完結しないかと。
>>603 子要素が親要素からはみ出していた場合。
>>605 そういう要素は作る予定はないので、問題ないはずです。
子要素が親要素からはみ出ている場合、どういう状況だとダメなのか良く解らん。
はみ出ている部分からでた時?
if ((e.target || e.srcElement) == element) があるから大丈夫だと思うんだけどな。
608 :
594 :2011/01/01(土) 17:08:07 ID:???
>>598 jquery-1.4.4.js のコードを解読できるぐらいのスキルがあるなら、それでもいいと思うよ。
だが、俺は attr() に属性値 (getAttributeのエイリアス) を期待するし、そうあるべきだと思う。
"jquery-1.4.4.min.js" をHTML文書で検証するとこうなる。
<form><p><input type="checkbox" id="hoge" checked></p></form>
<script>
console.log(document.getElementById('hoge').getAttribute('checked')); // ""
console.log(document.getElementById('hoge').checked); // true
console.log($('#hoge').attr('checked')); // true
console.log($('#hoge').get(0).checked); // true
</script>
XHTML文書ではこうなる。
<form><p><input type="checkbox" id="hoge" checked="checked" /></p></form>
<script>
console.log(document.getElementById('hoge').getAttribute('checked')); // checked
console.log(document.getElementById('hoge').checked); // true
console.log($('#hoge').attr('checked')); // checked
console.log($('#hoge').get(0).checked); // true
</script>
見てわかるように、HTML文書とXHTML文書では attr() の出力結果が異なる。
俺としては「jQuery 余計なことすんな」って感じなんだが、感性の違いなんだろうな。
別の考えがあることを否定するわけではないが、俺は attr() を使わない方法をお勧めする
>>605 本当に?
DOMノードはObject型だから要素のレイアウトは関係ないと思うんだけどな。
>>607 var to = e.toElement || e.relatedTarget;
これが問題。
子要素がはみ出ていた場合(または一部の端が重なっていた場合)、
そこをマウスが通ると、変数 to が while ループ内で親要素を経由しない。
(e.target || e.srcElement) == element この条件式だろうと思ってたが。。。ま、いいか
入門書によれば、 var a = [10]; // 要素数1、数値が10 とした時に var a = new Array(10); // 要素数10 と誤って解釈する処理系があると書いてありました。 こうなっちゃう処理系のリストはどこかにありますか? また、恐らく古いブラウザなんでしょうけど、 これを回避する事は、もう意識しなくても大丈夫でしょうか?
614 :
598 :2011/01/01(土) 18:13:37 ID:???
>>608 その差異が「ライブラリの便利機能」になるか「余計なお世話」になるかは
シチュエーションによって異なるはず。んで、
・話の発端である
>>589 の「チェックボックスがチェックされているか」、
・「セレクトボックスでこの項目が選択されているか」
みたいな判別をしようという場面で、
>>594 みたいに
あえてDOMのプロパティを直接参照する意味ってどこにあるのか、という話。
ましてや、ブラウザ間の互換性を保つために余計なコードを
自前で用意する羽目に陥るなんて
(『自分で組み込もうと決めた』jQueryの中に同じ処理が用意されているのに!)
ナンセンス極まりないと思う。
そりゃまあ、
・できる限りDOMを見るが(checked属性とかid属性とか)、
・問題が生ずる場合は仕方なしにattr()を使う(selected属性とかtabIndex属性とか)
という立場がないわけでもないけど、それこそjQueryのソースと
各ブラウザの挙動をしっかり把握した人でないとできないことだし、
そしてそれは間違いなくライブラリ側で意図した書き方には沿っていない。
後になってそのコードを読む人が混乱するだけじゃないかなあ。
古代の化石だなw
>>612 やっと理解できた。
親にしかイベント登録してないのに、子でも検知・しかも親には伝播しないのか。
たしかにはみ出している場合におかしいですね。
ありがとう。
いや、伝播してるから登録した関数が呼ばれてるんだ。 イベント発生源(target要素)になれるとは限らない、ってことね。
あぁそうそう、それが言いたかった。ありがとう。
任意のIDの中の、特定のタグ或いはクラス名の要素に対して操作を行いたいと思っています。 具体的には下記のような記述を行ってみたのですが、どうも反映されません。 <style type="text/css"> .gray{ background-color:#999999; } .red{ background-color:#FF0000; } </style> </head> <body> <div id="hoge"> <a class="gray" onclick="test()" href="#">test</a> </div> <script type="text/javascript"> function test(){ document.getElementById("hoge").getElementsByTagName("a").setAttribute('class','red'); } </script> </body> alertでaタグのvalueを表示する事はできたのですが、 setAttributeでのclass変更ができません。 ※確認ブラウザはFirefoxです。 どうぞよろしくお願いいたします。
ヒント:getElement"s"
623 :
Name_Not_Found :2011/01/02(日) 00:40:38 ID:I8gCiekw
以下のようなスクリプトで、セッションクッキーを設定しています ブラウザを終了するとセッションクッキーは削除されると思うのですが、Firefox3.6では次回起動時も残ったままです IE8、Opera11、Chrome8では、ブラウザを終了すると正常に削除されました Firefoxでセッションクッキーを正常に設定するにはどうすれば良いのでしょうか Firecookieで確認すると、有効期限は確かに「セッション」となっています alert(document.cookie); document.cookie = 'cookie = session';
セーフモードではどうだろうか
625 :
555 :2011/01/02(日) 03:43:42 ID:???
556-561 結局コールバック関数内でself.の変数に入れるのが正しい気がしまして そうしました。 レスありがとうございましたm(_ _)m
jQueryの1.4から、getJSONの扱いが厳密になったんだけど、javascriptで不正なJSONを正常なJSONに変換する方法って無いかな?
textで受け取ってevalかなぁ
628 :
623 :2011/01/02(日) 13:09:10 ID:I8gCiekw
629 :
Name_Not_Found :2011/01/02(日) 20:37:27 ID:bTCRVtPI
faceboxに似たダイアログのpluginって他にないでしょうか?(できればjqueryで・・) 公式ページ見ると、jqueryの1.4系には対応して用な感じに見えます。 <a href = "/comments/new" rel="facebox"> みたいに書くと、自動でfaceboxのダイアログをポップアップしてくれて便利だったので これと同じようにrelを使って書けるものがないかと探しております。 jquery ui dialogも触ってみたのですが、たぶんこれはrel形式での指定に 対応してないような感じがします。
ある本で、何度もRegexpと書かれていましたが、 実際はRegExpでした(Expの頭も大文字)。 これ、実際にRegexpだった時代や処理系があったんでしょうか? それとも、そういう歴史的経緯はなく、ただ単に本のミス?
>>630 監修で有名な人がついてるならともかくそのへんの普通の本は鵜呑みにしないこと
俺やあなたのような人が適当にBlogで書いてるのだって目につけば出版されうる業界
検索した感じだと、Ruby がそういう表記をするのかな。 Ruby の知識はないから知らないけど。 できれば、その本のタイトル(と著者)を教えて欲しい。
634 :
629 :2011/01/03(月) 20:11:17 ID:m5z8QgrE
636 :
Name_Not_Found :2011/01/04(火) 16:57:41 ID:SHlZLGkU
久々にJS触ったんだけど、今はprototype.jsなんか使わずに、jQueryを皆使ってるんですか? Ajax用に使うならばやっぱPrototypeよりjQueryの方がいいのでしょうか? ソースコードをざっと見てみましたが、jQueryの方が小さくて、コレで本当に色んな事が出来るんだろうかと思ってしまいましたが、やっぱjQueryの方が何らかの利点が大きいからメインになっているのでしょうね?
自分で使ってみるのが一番手っ取り早いと思うけど。 ・DOMを汚さない、軽い ・アニメーション機能 ・CSS風セレクタ(これはjQueryじゃなくてSizzleだけど) ・拡張性が高く、またプラグインの作り方についてのガイドラインが形成されている (誰が作ったものであってもあまり違和感なく利用できる) あたりじゃないかな。 とにかく比較するとやっぱ使いやすい。
638 :
636 :2011/01/04(火) 17:27:07 ID:SHlZLGkU
確かに使ってみる事は重要ですが、一応人の感想も参考にしたいと思いまして
自分では気がつかない点もあるかもしれませんので
自分もざっと書店でのjQueryを見ましたが、基本的に
>>637 で指摘されているような点を感じました
特にアニメーション、デザイン系が(目立つから?)多く載っていたように思いました
ちなみにAjax利用の観点からだといかがですか?
後は、(まぁ大丈夫だと思いますが)ブラウザ間の差異とか
ちょっと失礼します。 OperaのエクステンションやFirefoxのアドオンの有無を調べることとかできますでしょうか。可能ならば方法も提示頂きたいです。 テキストボックスにフォーカスしたときに回りにSafariやChromeのような枠を表示させたいのですが、重複は邪魔でしょうから分岐したいのです。 よろしくお願いします。
権限の都合でたぶんムリ
>>641 640です。もう少し詳しくお聞きしたいのですが、フォーム部品に枠を表示させることに権利がいるということでしょうか。
>>642 やだなあアドオンのことに決まってるじゃないですか
この様なときのための王道があるじゃないか。 基本を忘れてはいけない。 つ prompt()
とりあえずFirefoxの話をすると、アドオンをJavaScriptで書くことはできるが、 (ローカルのファイルにアクセスできたりすることからも分かるように) そのスクリプトはwebページのスクリプトとは別の特権モードで動くことになる。 で、セキュリティの都合上、後者は前者に干渉することはできないはず。 アドオンが明示的にdocumentに対して何かプロパティを注入するようなことをしていれば 話はまた別だけど、それはアドオンがそう作ってあるからであって、一般論としては無理。
forを使ったりstyleタグをhtmlに挿入したりせずに.style=みたいな雰囲気で、 styleタグの*や+や>のような指定をすることはできますでしょうか? できたらやり方を教えていただけるとありがたいです お願いします
できません
DHTMLのお勧め本ありませんか? 難しくなく、サンプルがたくさん載っているのがいいです
いや、適当な選択でいいので日本語でお願いします
あと、初心者向けで選んでください
「おすすめ」を「適当」って矛盾してないか
じゃあ、気楽に選んでくださいに変更します
654 :
Perlマスター ◆M5ZWRnXOj6 :2011/01/05(水) 21:40:31 ID:zkb8Cye7
まだこんな ク ソ ス レ あったのですね(笑) とてつもじゃないですが ク ソ ですよ あの本気で書き込みしているのですか? 本気になるのはかっこいいです、ひとつのことに熱中している感じで それとですね 649みたいな グ ズ やろうは早く死んでください とりあえず市ねってことだこら
「ダイナミックHTMLでつくるホームページ」 「DynamicHTMLがやってきた!」 「インサイド Dynamic HTML」 この三つのどれにしようかと考えているのですが、どれがいいでしょうか?
656 :
Perlマスター ◆M5ZWRnXOj6 :2011/01/05(水) 21:45:00 ID:zkb8Cye7
>>655 うるせーばーか 死ね
死ねよ早く?死ね
あとはサイ本ぐらいじゃね、まともな本は JavaScriptに関する本は選ぶのが難しい
Perlマスターさんはどこ見て喋ってるんですか? 頭悪いのか?
659 :
Perlマスター ◆M5ZWRnXOj6 :2011/01/05(水) 21:46:02 ID:zkb8Cye7
サイ本なんてまともじゃねえよぐず 本の書き方がへたすぎ 消えろぐずども
660 :
Perlマスター ◆M5ZWRnXOj6 :2011/01/05(水) 21:47:31 ID:zkb8Cye7
ウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwwwウヒイイイイイイイイイイイイイイイイイイイイイイイイブヒヒヒヒ!!!!!!!!!!!!!!!! なんでこんなスレあるのかなあ?wwwwwwwwwwwwwwwwwwww (笑)wwwwww(笑)wwwwwwwwwwww
どこまで知識を得たいのか ちょっと触るだけぐらいなら評価が高いの選べばいいと思うけど
662 :
Perlマスター ◆M5ZWRnXOj6 :2011/01/05(水) 21:48:59 ID:zkb8Cye7
暇なやつ教えてやれよ?wwwwwwwwwwww な?wwwwwwwwwwwそんな掲示板でいちいちやるより チャットとかで教えたほうが効率いいだろぐずが
>>662 よかったら教えてください
まだ初心者なので、よくわからないです
書いてない書いてない
javascriptができる人より、Perlができる人のほうが凄いですね
両方できるけど、どれだけ役立てられるかが問題であって、どっちが凄いとかは無いから。
Perlとかjavascriptとか関係なくキチガイが一匹いるなってだけ
Perlの印象を悪くするための工作じゃないの
もう、いいです 「DynamicHTMLがやってきた!」を買うことにします
いまどき「Dynamic HTML」という言葉が使われているという こと自体、その本が大丈夫なのかという不安をかきたてる材料 でしか無いような気がする。10年前のコトバだよねえ。
しかも「やってきた!」だからなw ものすごい時代を感じるぜ・・・ 最近の本なら怪しさ全開
発行年月 :1998年4月 ∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
Perlの印象を悪くしてどうするんだよ^^;
言われても気づけないなら病院行った方がいい、真剣に
677 :
Name_Not_Found :2011/01/06(木) 11:49:03 ID:oRVBY5di
>>672 まあそうなんだけど表示をJSでヌルヌル動かすアレ、
の総称がDHTML以外なくね?
WEBに疎い広告代理店の人とか、打ち合わせで平気でAjaxって言ったり
下手すると見積とか請求とかの項目にもAjaxって書いてることもある
お客さんに詳しい人がいたら絶対問題になって
結果として下請けの自分が怒られたりするんだろうな…
>>673 「ヤア!ヤア!ヤア!」がついてたら買ったかも
>>677 今は「JavaScriptでアニメーション」とかそういう風に言うなぁ
DHTMLは逆に疎い人に通じないから使う機会がない
DHTMLって言葉知ってる人は逆にDHTMLなんてわざわざ使わないし。
あとはデータのやり取りすればAjaxって言うな
DHTMLはCHTMLの次の規格だよ!
681 :
Name_Not_Found :2011/01/06(木) 15:04:46 ID:oRVBY5di
参考書選びのキーワードでいえば、今は "DOM" になるんじゃないかな。 "ECMAScript" の参考書(和書)は見たことがないが、DOM ならいくつか知ってる。
僕もJavaScriptやっていいですか?
僕もJavaScriptやっていいですか?
686 :
Name_Not_Found :2011/01/06(木) 20:44:38 ID:oRVBY5di
なんでニュー速+のHTMLに書かれたJSが発火しちゃうのはどうしてなんだぜ?
なんでなんでなんで
IEコンポーネント使ってりゃなあ
Ajaxについて質問させてください 例えばボタンをクリックすることにより非同期で数ページを切り替えるようなものは多いですが、その場合ページ全体のロード時間は 一般的な<a>リンクによりページ全体が移動する場合と比べてやはり長くなるのでしょうか? もし非同期による各表示ページが大きなコンテンツを含む場合、その1ページは非常に遅くなりそうな気がするのですが また、prototypeとjQueryでは同じようなイベントを実行させた場合、処理速度はどちらが早いのでしょうか?
>>689 Ajaxの利点はページ全体をロードせず必要な部分だけ取得することで待ち時間を減らすことだから
ページ全体取得するんだったらページ遷移した方がいい場合もあるよ
データを取得するための通信時間は変わらないんだし。
> また、prototypeとjQueryでは同じようなイベントを実行させた場合、処理速度はどちらが早いのでしょうか?
これは色々言われてるしバージョンによっても違うだろうからベンチマークやってるサンプルとかで自分で試した方が確実
あとAjaxでページ書き換えるとブラウザの戻るボタンで戻れないからな これコンテンツによってはユーザーがかなり不便に感じるから注意
>>691 jquery の場合 jquery.history.js とか使えばいいのでは?対応ブラウザ限定だったりするのかな
>>692 >>691 は「技術的にある程度解決できるけど特徴としてそういうことがあるよね」ってことがいいたいんだと思うよ
ちょっとページ書き換えるくらいの処理でわざわざパーマリンクつくらないでしょう
>>686 は?って思ったけど、運用情報久しぶりに行ったらおかしなことになってるんだな
質問です、2点ほど。 a.htmlの中にiframeを設置してb.htmlを読み込んでいるとします。 この場合、a.htmlのonloadは、 1) iframeの中のb.htmlも含めて読み込みが完了した時点ということになる 2) b.htmlは関係なく、a.htmlのみが末尾まで読み込まれた時点ということになる どちらになるのでしょうか? 自分で適当なサンプルを作って試そうとも思ったのですが、 iframeの中の、b.htmlの読み込み完了をa.htmlから取得する方法でつまづきました。 親であるa.htmlから、b.htmlのonloadを取得することは可能でしょうか? どなたかアドバイスいただけると嬉しいです。
>前者 両方のonloadにalert入れればいいんじゃね? iframe.contentWindow.document.readyStateとか。
>>696 難しく考えすぎてました、onloadのalertで実際に試して確認してみます。
contentWindowとかreadyStateとかは知らなかったので助かりました。
検索して調べてみようと思います。
レスありがとうございました。
ここでときどき名前が挙がるnode.jsというものは apacheのモジュールとして組み込むようなものなんですか?これ自体がhttpサーバなんですか? レンタルサーバで利用するにはルート権限が与えられていないと駄目なものですか? とまったく知識もないので今すぐ使いたいわけではないのですが これに未来はありますか? 個人向けレンタルサーバで最初から利用できるようになるのはずっと先のことですか? 先どころか個人向けだと使えるようになることはなさそうな感じですか?
699 :
Name_Not_Found :2011/01/08(土) 00:33:10 ID:I6NGdY4g
>>698 んなこたないよ
安く上げたいんだったらVPSとかつかえば
webサーバも自分でいじれるじゃん
スレ違いだから詳しくはレン鯖の板なりスレなりで
WebProg初心者板に書き込んでましたが、こちらを勧められて再度書き込みます。
javascript でjplayerを使ってmp3再生を試みていますが、再生されません。
下記のプログラムでどこに問題がありますでしょうか。
下記プログラムと同じ階層にjsフォルダを作り、その中にjquery.jplayer.min.jsとJplayer.swfを入れています。
firebugで確認したところ、上記2ファイルはちゃんと読み込まれているようですが、Flashが読み込まれていないようです。
swfPathでjsフォルダを指定しているのに、なぜflashが読み込まれていないのか、よくわかりず行き詰っています。
アドバイスいただければと思います。
環境は次のとおりです。
windows xp version 2002 sp3、Eclipse IDE for JavaScript Web Developers.
Core 2 U7500 1.06GHz、1.49GB RAM
<html xmlns="
http://www.w3.org/1999/xhtml "><head><title>test</title>
<link href="js/jplayer.blue.monday.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="
http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js "></script>
<script src="js/jquery.jplayer.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$('#jquery_jplayer').jPlayer({
ready:function(){
this.jPlayer("setMedia","music.mp3").jPlayer("play");
},
swfPath: 'js'
});
});
</script></head><body><div id="jquery_jplayer">test</div></body></html>
thisが$(this)な気がする
jqueryで$(".name").html(item.name); するとchoromeだけレイアウトが崩れます 解決方法ありませんか?
あ、jqueryのバージョンは1.3.2です
最新のjQueryでも同じでした
もう少し具体的に書くと横幅固定のテーブルの中で左寄せした<span>の中に 文字列を流し込むと領域が1文字分に固定され縦長のレイアウトになってしまいます。 ちゃんと一度に書くべきでした。申し訳ありませんでした。
706 :
Name_Not_Found :2011/01/08(土) 11:58:39 ID:M1d21onB
質問です。
ブログの新着情報をRSSで表示したいと考えておりますが、時間の表記の方法がわかりません。
Fri, 07 Jan 2011 11:44:38 -0800
となってしまいます。
2011年1月7日(金)11:44
としたいです。
初心者です。よろしくおねがいします。
<script type="text/javascript">
function loadFeed() {
var feed = new google.feeds.Feed("
http:/ ○○");
feed.setNumEntries(5);
feed.load(function(result) {
var html;
if (!result.error) {
html = '<h1><a href="' + result.feed.link + '"></a></h1>';
if (result.feed.entries.length) {
html += '<ul>';
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
html += '<li><a href="' + entry.link + '">' + entry.title + '</a><br />';
html += entry.publishedDate + '</a><br />';
>>707 >あと個人的には<script>タグなんかやめてほしい。
えっ、どうやってスクリプトをページに読み込むの?
分離しましょう
分離した場合<script>以外で読み込める?
ベダ書きやめろって事だろ言わせんな恥ずかしい
もしかして: ベタ書き ・・・いやすまん。HTML内直書きやめろってことな。 「<script>タグつかうな」じゃ初心者はふつうに混乱しそう。 でもHTML内記述でいいケースはあると思うが。
質問者もテスト用のコードでそんなところを突っ込まれるとは予想も付かなかっただろう
scriptタグのベタ書きは必要になるケースもあるんだなこれが
古いブラウザがまだ多いからなぁ
自分用の小物を作るときは、一つのファイルの中で PHPとJSとCSSとHTMLを完結させた方が管理しやすくていいだろ
例示用ならむしろそうするべきだな
719 :
741 :2011/01/08(土) 21:32:55 ID:???
720 :
719 :2011/01/08(土) 21:34:25 ID:???
すいません、名前間違えました…
15パズル・・・・。好きなパズルだわ。 手動でサクサク解くのが楽しいんじゃないか。 無粋なことはやめれ。
getIntervalで同じオブジェクト内の 関数を呼び出すのって無理なの?
setInterval の第一引数に渡す function 内に this を書いていると予想。 それなら Global オブジェクト(window) になる。
724 :
719 :2011/01/08(土) 22:32:35 ID:???
>>721 自分で解いた場合とプログラムに解かせた場合、手数にどれほどの差があるのか気になったので…
4×4だけではなく5×5やそれ以上のときにどうなるか、なんてことも考えてます
その為に縦マス横マスの数を変えられるようにしてあるんですw(
>>719 のは書き加えていないものをUPしてしまいましたが)
うぼおおおおあああああああああああ うごいたようごいたひゅうううううううう ありがとう723感動した
最短の手で解くってことなら、正解の状態を定義してアルゴリズムをJSで描かなきゃだよ 自動で動かすことも出来ないのでは難しいと思う
727 :
707 :2011/01/09(日) 00:14:38 ID:???
なんかごめん。
このスレに教授はいらっしゃいますかー?
大変です!ねぎやんがいません。
メールを送ってもメールが帰って来ます。
変わりにこのスレの人たちで答えてください。
以下、メール本文
−−−−−−−−−−−−−−−−−−−−
こんにちわ!DHTMLのトランジションを検索して辿り着きました。
以下のページについて質問します。
http://www5e.biglobe.ne.jp/~negiyan/shtm/private/scripts_dhtm.html トランジション効果ですが、ploadをonloadに変えて、ページ読み込み時に
効果が現れるようにしました(Scriptの知識はほとんどなく適当)。
それで、上手く行ったので、複数画像にトランジション効果を付けてみることに
しました。すると、画像が表示されないで失敗します。
どうすれば良いでしょうか?
大変、面倒だと思いますが暇な時で結構なのでお教えください。
もう、寝ます。 起きたら答えられているようにしておいてください。
>>719 dispatchEvent で解けないかな?
話に乗り遅れたがscriptを外部ファイルではなくベタ書きにする理由はちゃんとあるぞ 1リクエスト減らせる 転送量の多いサイトでは最適化として適法
734 :
719 :2011/01/09(日) 11:02:35 ID:???
>>726 最短の手で解くことにはこだわってないです
それで出来た方が良いのでしょうが、今は自動で解く動作を実装するのが一番なので…
難しいみたいですが、もう少し頑張ってみます
>>732 dispatchEventがどんなものかを調べてみたのですが、
完成の形をこれで呼び出して解かせる、ということでしょうか?
最短手順に拘らないならパネルを入れ替えた経緯を保持しておくといい。 逆に辿れば解にたどり着く。 ----------------------------------------- while(isFinished()){ /* 1000回シャッフルする */ for(i=0;i<1000;i++){ //略 if((0<=tmpCellX)&&(tmpCellX<cellNumX)&&(0<=tmpCellY)&&(tmpCellY<cellNumY)){ /* 空きマスと隣のマスのパネルを入れ替える */ panelID[emptyCell]=panelID[tmpCellX+tmpCellY*cellNumX]; panelID[tmpCellX+tmpCellY*cellNumX]=emptyPanelID; emptyCell=tmpCellX+tmpCellY*cellNumX; hogeArr.push(emptyCell); // emptyCell保持 } } } ----------------------------------------- var hogeArr = []; function hoge() { var n = hogeArr.length - 1; var id = setInterval(function () { if (n >= 0) { clickPanel(hogeArr[n]); // パネル選択 n -= 1; } else clearInterval(id); }, 100); }
XPathで、式にマッチするノードがひとつしかない場合、 resultTypeはANY_UNORDERED_NODE_TYPEとFIRST_ORDERED_NODE_TYPEのどっちを指定すればいいですか? ひとつしかないなら得られる結果は同じだと思いますが、それでも何か良し悪しとかあるのかなと。 速さとか、もしものときの誤爆を回避しやすいとか。 どっちにしていますか?
738 :
719 :2011/01/09(日) 16:42:49 ID:???
>>735 それですと100回シャッフルしたら100手に、1000回シャッフルしたら1000手になってしまいます
プログラム自体は完成形→シャッフルでバラバラの状態にしていますが、
その状態から解くときは巻き戻しではない方法で解かせたいのです
言葉足らずですいません
ACBをABCに並べ替える方法が定石だ その動かし方のパターンを調べて 最後にブランクが来るマスの対角線から 一つづつ並べていけばいいだけじゃん
>>738 おぃおぃ「
>>735 で解けるなんてハナから分かってる」的なセリフだな。
「言葉足らず」?そうじゃないだろ。書いたこと読み返してみろ。
>>719 >問題を解くどころか自動で動かすにはどうしたらよいのかさえわからない
>>734 >最短の手で解くことにはこだわってない
>自動で解く動作を実装するのが一番
解くときは巻き戻しではない方法で解かせたい?んなことは分かってんだよ。
>>734 がなければ書きはしない。
言っておくけど、最短手に拘らなければプログラム的価値は「巻き戻し」と大した差はねぇよ。
741 :
733 :2011/01/09(日) 17:41:47 ID:???
>>734 そういうこと。流用可能な部分は流用した脳が楽だからね。
毎回ランダムな試行を繰り返しまくって正解を導くってことか。
1億手くらいで奇跡的に正解に辿り着くかな?
それを何回も繰り返し行って、最善の手となる動きをプログラムに記憶させることで、簡単な知能は作れるかも。
どう記憶させるかみたいなアルゴリズムを作るくらいなら、
>>726 でいいと思う
743 :
719 :2011/01/09(日) 19:21:23 ID:???
>>740 そのような意味で書いたのではありません
>>724 の
>自分で解いた場合とプログラムに解かせた場合、手数にどれほどの差があるのか気になった
と書いたとおり、解いたときの手数の差がどの程度か気になったので質問しました
>>734 の書き込みで誤解を招いてしまったようで申し訳ないです
「毎回ランダムな試行を繰り返しまくって正解を導く」って、 まさにボゴソートじゃないか。
>>743 >自分で解いた場合とプログラムに解かせた場合、手数にどれほどの差があるのか
自分で解く場合の解法をプログラミングしてその通りに動かすだけだから、
最適解を求めるのでなければ差は有りません。
>>737 もうちょっと条件を詰めないと何ともいえない。
具体的には XPath式はどうなるのかな?
嫌い
>>743 あのさぁ、もう少し何かないのかなぁ。プログラムに関すること何も書かないよね。
「配列の要素に解までの0〜15の数値を順に入れればいいのは分かった」とかさ。
「最低限パネルが動く0〜15の数値(2〜4個)すべてをはじき出すには?」くらいあれば
読んでる側が何か書きたくなる様な気がするぞ。(まんまのコードを期待してんならそう書きなさい)
とりあえずパネルの状態を示す配列panelID(空パネルは15)を利用して
最低限パネルの動く数値の中から適当に選んで配列にいくつか並べ
それがちゃんと動くかやってみなよ。解法、アルゴリズムうんぬんはそっからの話でしょ。
やる気あんならだけど。
> まんまのコードを期待してんならそう書きなさい
それは、
>>1 に違反してるな。
> 自力で書く気がない人は他のスレへ
「まんまを期待してる」って書いてくれれば相手しなくて済む、って意味ね。
優しいなwツンデレだね 動かす方法も上に書いてあるし、あとはなんとかなるだろう 個人的には最短手プログラム見てみたいが
>>746 には異論があるな。
単純だけれどひどく時間が掛かる(手数の多い)アルゴリズム
を考案したとして、それを手でやることはあり得ないけど
プログラム書いて動かす場合は無問題とかならよくあると思う。
要素のheightを取得したいんだけど 変数名 = document.getElementById('ID').style.heightでおk?
何故やってから言わない?
変数名 = (function(e){ return e.currentStyle || document.defaultView.getComputedStyle(e, '') })(document.getElementById('ID')).height;
画像が読み込めたかどうかはどうやって判断すればいいですか? image.completeはエラーや中断されてもtrueになるらしいし loadイベントはキャッシュがあるときは発生しない場合があるらしいし といってわざわざ image.src += "?" + new Date().getTime() などと新しいurlを設定するのも無駄な通信を発生させるのがよくなさそうだし… 相手によって"?〜"を付けたり付けなかったりしてお茶を濁すんですか?
>>757 いろいろ調べてみたけどIEはキャッシュから取ってきた時にはいかなるイベントも発行しない仕様
そんな時にはreadyStateを見ればいいと思うよ、IE専用だけどね
img // img要素;
img.readyState; // いづれかの値を取る: [ uninitialized | loading | loaded | interactive | complete ]
759 :
Name_Not_Found :2011/01/10(月) 20:57:32 ID:iC0JDzWY
function hoge() { } var hoge = function() { } これを使い分ける意味とかメリットがよくわかりません。 教えてください。解説記事の紹介でもいいです。
一時と常時?
>>759 技術的な差異はないから、気分で分ければいいんじゃないかな。
ただ、同一ソース内で統一されていないと気持ち悪いかも。
一時的(ローカル)と常時(グローバル)?ならほとんど差は無いよね。 function(){}で定義すると、それより前(同じファイルなら)でもその関数を使える。 (firefoxでエラーはかれた覚えもあるけど。) 関数内でなく(=htmlに直書き等) if (flag){ function(){} } って場合分けで定義したい場合、function(){}で定義すると、flagがfalseでもそれが定義されるから、 この場合はvar window.hoge = function(){};ってやる。
無名関数の中で動かすのがほとんどだから変数に入れるな、グローバル汚すと面倒だし。 グローバルに書かないといけないときは window["myproject"] = { "hello": function() { } } のように名前空間のようなことをしてる
764 :
719 :2011/01/10(月) 22:39:26 ID:???
>>746 今考えている解き方はあります
一言で説明すると、パネルを一列ずつ揃えていく感じです
一番上の横一列(1,2,3,4)をそろえたら今度は左端の一列(5,9,13)を揃えて…という処理を繰り返し、完成させます
15パズルの縦横一列ずつを揃えれば残りは実質8パズルとなりますし、シャッフルして混ぜたものなので14-15パズルの形になる心配もありません
その状態でも解けるということはわかるので、無駄なパネル(縦横一列)を動かす必要がなくなるはず…と考えています
私がこれを実践しようとすると、どうしても1,2,4,3と並んでしまうので…
>>749 とりあえず空きマスを動かすことだけを考えて書いてみましたが、動きませんでした
追加した文は下記の通りです
(336行目まで省略)
function ans(){
if(panelID[15]!=15){
for(i=0;i<3;i++){
/*空きマスをひとつ右に移動させる*/
panelID[clickCellY*cellNumX+i]=panelID[clickCellY*cellNumX+(i+1)];
/*空きマスが一番右にあるときに処理を終わらせる*/
if(panelID[15]==panelID[cellNumX+i] || panelID[15]==panelID[cellNumX+i+4] ||panelID[15]==panelID[cellNumX+i+8] ||panelID[15]==panelID[cellNumX+i+12]){
break; } }
for(i=0;i<4;i++){
/*空きマスをひとつ下に移動させる*/
panelID[i*cellNumX+clickCellX]=panelID[(i+1)*cellNumX+clickCellX];
/*空きマスが一番右下にあるときにゴールの処理を行う*/
if(panelID[15]==15){
flag=1; } } }
//-->
</SCRIPT>
<INPUT TYPE=button VALUE="自動で解く" onClick="ans()"><BR>
>>759 関数宣言と関数式の違いが分かれば、使いどころなんかも見えてくるんじゃなかろか。
宣言は文脈を辿る(実行コンテキスト)前にオブジェクトが生成され参照可能になる。
hoge(); // 呼出可
function hoge() {
}
広範囲で使う(呼出、参照代入)関数の場合、記述位置に融通が利くとかがメリットになるか。
グローバルな関数は基本、宣言でいいんじゃないか。
式は評価されるまでオブジェクトが生成されないけど、プロパティ、引数等への単一な参照代入なら
宣言、代入よりも無駄なステップが省けそうだし可読性もよくなるんじゃないのかね。
var hoge = function() {
}
同時に呼出すことはよくあるけど、これだけだと使いどころと言えるような場面はピンと来ない。
単にラムダ関数が用意されてるだけでしょ いろんな書き方が出来ますよ 好きなの使ってねってことだ
>>764 最終的にpanelIDを初期状態に戻さないといけないから、まずはpanelIDをコピーした配列をつくる。
panelIDを利用するのは初期配置を調べる一度だけ。あとはコピーした配列を使った方が良い。
暇な時にでも「最低限パネルが動く0〜15の数値(2〜4個)すべてをはじき出すには?」を考えてみてよ。
ここで言う0〜15の数値は「位置番号」。要素の値じゃなくて配列のインデックス番号ね。
clickPanel(位置)で視覚的なパネルが動くことになるから。
コピーした配列[i]で15(空きマス)を調べて行った場合、iが空きマス位置になる。
このiがあればマスが動く位置番号を求められるからね。これができないと進めないし。
prototypeではfor...inが挙動がおかしくなるとして使用禁止されていましたが、jQueryではそのようなJavaScript関数はありますでしょうか?
jQueryのソース程度も読めないようならfor inは一律使用禁止にしといた方がいいと思う
769のような言い方は良くないと思うな
771 :
Name_Not_Found :2011/01/11(火) 12:02:27 ID:CUmeAqmd
>>768 って、Objectオブジェクトが拡張されてるから使うなってことなのか?
そんな理由で盲目的にfor inループ使わない、って対応するようなら
フレームワークがなかろうと、いずれ問題は起きそうな気がする
772 :
719 :2011/01/11(火) 15:49:38 ID:???
>>767 panelIDをコピーしたpanelIDCopyという配列を作りました
var panelIDCopy;
function ans(){ //「自動で解く」のボタンを押したときにpanelIDの配列をpanelIDCopyに代入する
for(i=0;i<15;i++){
panelIDCopy[i]=panelID[i];}
>最低限パネルが動く0〜15の数値(2〜4個)すべてをはじき出すには?
空白のパネルを中心として、そこから上下左右1マスのパネルのことですよね?(空白のパネルの場所にもよりますが)
それと位置番号と要素ですが、
TUV □57
WXY 681
Z[\ 243
↑で言うとローマ数字が位置番号、数字と空白の□が要素で
「Tが空白でUに5のパネル、Vに7のパネルがある」という解釈で合ってますか?
773 :
Name_Not_Found :2011/01/11(火) 16:29:53 ID:wiVyqCLs
場違いかもしれませんが、質問させてください。 lightboxの派生JavaScriptのcolorbox というやつで 動画を埋め込んだhtmlを表示させたいのですが、再生できません。 試しに、JavaScriptを外して、htmlをそのまま表示させたら 映像は流れました。 動画は「ふらだんす」というプレイヤーを介してmp4を流してます。
774 :
Name_Not_Found :2011/01/11(火) 16:31:19 ID:wiVyqCLs
あ、 画像などは表示されるのでJavaScrit自体は正常に動作してます。
>>768 jQueryがグローバル汚染するのは $ と jQuery だけ。
> prototypeではfor...inが挙動がおかしくなる
それが正しい動作なんだけどね。利用者が for-in の使い方を間違っているだけ。
776 :
Name_Not_Found :2011/01/11(火) 16:54:37 ID:CUmeAqmd
>>773 >動画を埋め込んだhtml
には問題ないのかね
一度DOMツリーから千切れたらダメ、とかとか
>>772 配列のコピーはOKだね。その他もろもろの認識も。
適切かどうかは置いといて、用語統一は必要だから位置と要素でいこか。
無理にコードにする必要はないからね。
「左は1引いて右は1足す」こんな感じで規則性を考えていけばいいんじゃないかと思う。
実際、16マス程度ならデータで用意しとけば済む話しなんだけど、n * nなら使い回せるもの考えよう。
ひとつ確認。
こっちは空マスの隣接マスしか移動できない認識でいたんだけど、どうも違う。
今頃気付いてあれだけど、複数マスをスライドさせる仕様に拘りはあるの?
隣接のみ仕様で納得のものが作れるようになれば、複数スライド仕様への移行も
難しくないように思うのだが。(と無責任に言ってみる)
for..inはすべてのプロパティに対して作用する、 javascriptのメソッドは関数型のプロパティのこと こんな認識
そんな認識でよくやってるな
振る舞いとしてはそれでいいと思うけど? メソッドはプロトタイプチェーンから参照されるとかも説明しないと駄目か
781 :
Perl忍者 ◆M5ZWRnXOj6 :2011/01/11(火) 21:20:20 ID:GYQtu3Sl
なんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw 終わってるw
new演算子を使うと、 例えば、2次元配列を作りたくて var a = new Array(100); のような教科書通りの記述をすると jslintでエラー扱いされるんですが new演算子はjslintの中では悪者扱いなの?
C#でブラウザを作っていて、JavaScriptを実装をしたいのですが、普通の実装用の説明では自分にとって抽象的でわかりにくいので、具体的でわかりやすい(できれば日本語の)参考サイトを探しています
>>782 よく知らんけど、それは本当に警告じゃなくてエラー(処理がそこで止まる)なの?
>>785 処理がそこで止まるかどうかは知りませんが、「Warning」ではなく「Error」が出ます。
Error:
Problem at line 1 character 19: Expected ')' and instead saw '100'.
Problem at line 1 character 22: Expected ';' and instead saw ')'.
Problem at line 1 character 23: Unnecessary semicolon.
var a = new Array(100);
>>786 問題の箇所とは関係ないけど、その後で2次元目のデータを構築するんですよ。
788 :
Name_Not_Found :2011/01/11(火) 22:23:16 ID:CUmeAqmd
>>787 詳しくはわからんがjslintはnewを毛嫌いする気がする。たぶん
var a = [];
a.length = 100;
って書くと何も言わなくならない?
onSoundCompleteとか、onProgressChangeってFlashのaction scriptで使われるものなのでしょうか? サイトからコピペしたmp3を再生するjavascriptのコードを実行したのですが、onsoundcompleteとonprogresschangeのところだけ実行されていないことがわかりました。 (Flashの代わりにHTML5でmp3を再生している模様) 今のところコメントアウトしても動作に問題はないのですが、今回新しく機能を追加しようと思ったときに、 onsoundcompleteとonprogresschangeが使えなくて困っています。 誰か詳しい人アドバイスください。
>>793 音の件すいませんでした。
これを見ると、onProgressChangeはjplayerで定義されているという認識になるのでしょうか。
今最新版の2.0.0でプログラム書いているのですが、onProgressChangeは1.2.0には記載されているものの2.0.0からは消えているようです。
>>794 onProgressChange の認識は合ってる。
サンプルコードには「jPlayer 1.1.1」とあるから、最新の 2.0.0 には対応していないのだろう。
古いバージョンで運用するか、コードを修正する必要があると思う。
>>795 flash読み込みの問題なのか切り分けが出来ず、どうにも行き詰っていたので、ありがとうございました。
修正を試みて、ダメだったら旧バージョンでやり直したいと思います。
798 :
719 :2011/01/12(水) 09:15:33 ID:???
>>777 >「左は1引いて右は1足す」こんな感じで規則性を考えていけばいいんじゃないかと思う。
確かにそう考えた方がわかりやすいですね
上下も考えると上なら4引いて下なら4足す、で出来ますし
>複数マスをスライドさせる仕様
これがどこを指しているのかわからないのですが、ソースのどの辺りのことでしょうか?
>>797 再現しなかったぞ。IEのバージョンは?
HTMLの構造がはちゃめちゃなのがちょい気になる
>>798 >上なら4引いて下なら4足す
だね。当たり前でつまらないかも知れないけど、まぁ付き合ってよ。(ツッコみどころは遠慮なくツッコむ)
ここで4がn * nのn(平方根)であることに注目してみる。左右の1は不変だけど
上下には定数ではなく変数を割り当てておけば使い回せる。あとは取り捨て条件を加え、有効数値をチョイスすればよい。
var n = Math.sqrt(panelIDCopy.length);
//iの隣接位置を配列で返す(不正方向 -1)
function fuga(i, n) {
var arr = [], l = n * n, a;
a = i - 1;
if (i % n !== 0) arr.push(a);
else arr.push(-1);
a = i + 1;
if (i % n !== n - 1) arr.push(a);
else arr.push(-1);
a = i - n;
if (a > -1) arr.push(a);
else arr.push(-1);
a = i + n;
if (a < l) arr.push(a);
else arr.push(-1);
return arr;
}
単調な書き方になってるけど、そこはヌルーの方向で。
返された配列から-1を除く数値を選んで保存。前回空マスだった位置を除外してもいい。
同時にpanelIDCopyの該当要素を入れ替えれば1局面進められる。
指定回数局面を進められるところまでは実装できそうかな?
>>798 >ソースのどの辺りのことでしょうか?
「複数マス」とは画面上にある視覚的なマスのことね。ゲームルールのこと。
空マスの隣接マス以外でもクリックすれば複数マスがスライドするよね。そのことを言ってます。
802 :
Name_Not_Found :2011/01/12(水) 16:14:16 ID:EUvMs/UJ
HTML5でドロップされたファイルのフルパスを得る方法を教えてください。 ローカルからドロップされたファイルをaudio要素で再生したいです。 $('#drop_here').get(0).addEventListener('drop', function(e){ strOpenFile = e.dataTransfer.files[0].fileName; audio.src = strOpenFile; audio.load(); },false); こうやってファイル名を取得しても、フルパスが得られないため、htmlと別のフォルダにある ファイルが再生できません。
803 :
Name_Not_Found :2011/01/12(水) 16:17:29 ID:Qeg0UzsG
コンストラクタとプロトタイプの使いどころって何?
document.compatModeやdocument.documentModeというのはIE用ですか?
6行目にデバッグ用のconsole.log(files);が残ってるから気になるなら消して
808 :
797 :2011/01/13(木) 01:36:52 ID:???
>>797 解決できていませんが、終了します。
再度、質問に来るかもしれません・・・。
その際はもう少し具体的な内容の質問となるように励みます。
>>809 グループ化できないってこと?
gを外せばtwitterって文字列は取れると思うけど
811 :
719 :2011/01/13(木) 18:31:49 ID:???
>>800-801 いえ、むしろ付き合ってもらっているのはこちらの方ですので
まず
>>801 ですが、どこのことを言っているのかわかったので↓のように修正しました
if(clickCellX==emptyCellX){
if(clickCellY==emptyCellY-1){
for(i=emptyCellY;i>clickCellY;i--){
panelID[i*cellNumX+clickCellX]=panelID[(i-1)*cellNumX+clickCellX];}
flag=1;}
else if(clickCellY==emptyCellY+1){
for(i=emptyCellY;i<clickCellY;i++){
panelID[i*cellNumX+clickCellX]=panelID[(i+1)*cellNumX+clickCellX];}
flag=1;}}
else if(clickCellY==emptyCellY){
if(clickCellX==emptyCellX-1){
for(i=emptyCellX;i>clickCellX;i--){
panelID[clickCellY*cellNumX+i]=panelID[clickCellY*cellNumX+(i-1)];}
flag=1;}
if(clickCellX==emptyCellX+1){
for(i=emptyCellX;i<clickCellX;i++){
panelID[clickCellY*cellNumX+i]=panelID[clickCellY*cellNumX+(i+1)];}
flag=1;}}
>>800 の方はaにi±1or4をした値を入れ、その値をpanelIDCopyに入れる
ということでよいのでしょうか?
あー…うん。 いい加減引っ張りすぎだと思うんだ。
gなくしてみ
815 :
Name_Not_Found :2011/01/13(木) 20:42:20 ID:LYP16BXy
ajaxでテキストページを書き出したいんだけど jquery.min.js以外のjsファイルを見せないようにphpをはさんで html--php--js(getData)--dataってかんじでもajaxの通信できますか? ほかにjsファイルを見せない方法があれば知りたい
819 :
Name_Not_Found :2011/01/13(木) 20:56:31 ID:MJw+3vza
>>815 インラインスクリプトにすれば、JavaScriptファイルを見せないことは出来るが。
821 :
809 :2011/01/13(木) 21:07:21 ID:???
>>814 g外しても駄目でした・・
あと後出しですいません、複数urlにも対応させたいんです。
>>817 確かにいろんなツールでもマッチしているんです・・。
ほかの部分に問題があるのかもしれませんね。
ありがとうございます。
823 :
817 :2011/01/13(木) 21:09:03 ID:???
>>821 複数URLに対応しているじゃないか。何が問題なのかわからない。
824 :
817 :2011/01/13(木) 21:10:11 ID:???
入れ違いだったか…。
825 :
Name_Not_Found :2011/01/13(木) 21:38:36 ID:LYP16BXy
>>825 どうやろうともブラウザが実行するためにデータを持って来なくちゃいけないからjsファイルの中身は読まれるよ
難読化とかすれば「jsファイルが読めたとしてもgmailのjsファイルとかわざわざ読まないでしょ」って感じになるけど。
やりたいことが「JavaScriptでどんなコードを書いてるか見せたくない」ならそれは無理と思った方がいい
やっぱ無理かな
ちなみに
>>825 のサイトでテキストデータを引っ張ってきてるリンク先の記述わかる?
var url = "xxx.xml"みたいな記述もないし
それどうやってだしたの?
>>829 だんだんスレ違いになってきた感じがするなw
やり方は人によって違うだろうけど、FirebugとかHTTP見張るようなツールでhttpの通信が見れるから
クリックした時にどこのURLからデータを取得してるかはすぐ確認できる
で、それとは別に「JavaScriptのどのコードみれば良いか」ってのを調べたいなら、
このサンプルの場合jQueryだからclickでイベント登録してるだろうから
「click」でJavaScriptのファイルを検索すればいい
そうすると
ttp://demos.flesler.com/jquery/localScroll/ajax/js/init.js の11行目に
var url = 'html/' + this.hash.slice(1) + '.html';
があるのでさっきのURLと同じのになる
みたいな感じで色々なサイト調べてみたらいい
まだそんな無駄な努力してる子がいたのか。 ブラウザがGET飛ばすのも、その中身をキャプチャされるのも原理的に防ぎようがないというのに。
>>830 ブラウザからさくっと見えなければまぁいいかと思うしかないな
外部ドメインの高さ取得とjsのコード隠匿が永遠の課題だから
右クリック禁止です>< みたいな
>818 実行の早さ以外何が違う?
右クリックやコピー禁止よりも戻るが効かないのが一番ムカソニー
>>834 console.log(/[.]/.test('hoge')); // false
console.log(/./.test('hoge')); // true
>>832 js のコード隠蔽は不可能。開発者ツールを使えば大抵わかる。
隠蔽するならサーバサイドでやるべきだと思うけど…。
それをメンドくさがってphp一枚はさんでやれないかと UserSide--php--js(getData)--dataとか言い出した
>>839 js(getData) に入るのはサーバサイドJavaScriptだと思うよ。
node.js でも使うとか。
841 :
840 :2011/01/13(木) 23:25:23 ID:???
効率は悪いと思うけどね。発想がいろいろおかしい。
>836 勉強になりました m(_ _)m
・JavaScriptでコード書きたい ・でもコードは人に見られたくない ・そうだ! サーバサイドJSだ!! こういう発想の流れなんだろうか だとしたらそのぶっ飛びっぷりは嫌いじゃない
>>839 一応聞くが、「js(getData)」はクライアントサイドなの?
どのようなトポロジを想定してる?(P2Pなのかね…。)
>>811 >>801 はルールに拘りがあるかどうか確認したかっただけ。コードいじる必要はなかったんだけど。
ルールに拘りはないのは確認。
>>800 だけど
r = fuga(i, n);
引数のiは空マスの位置。panelIDをコピーしてる過程で見付かる。nは4でもかまわない。
rは要素数4の配列になる。要素には-1の無効な値か0〜15の位置を示す有効な値が入ってる。
そこから-1を除いた値を1つ選ぶ。前回空マスだった位置は有効だけど無駄な値だから選ばなくてもよい。(今はどうでもいい)
前回空マスだった位置は引数iを保持しとけばよい。
panelIDCopy[i] = panelIDCopy[選んだ値];
panelIDCopy[選んだ値] = n * n - 1;
answer[j] = 選んだ値;
panelIDCopyの要素入れ替えをして、選んだ値を保存。
fuga(選んだ値, 4)を繰り返す実装ができそうかな?と言ってる。
勝手な判断して悪いけど、コード貼るわ。ここまでを踏まえて、頭の中を少し慣らしてよ。
たっぷり時間掛けていいから、コード読んでもらえるとありがたい。
function hoge() { var n = Math.sqrt(panelID.length); var answer = [], panelIDCopy = [], e; for (var i = 0, l = n * n; i < l; i++) { panelIDCopy[i] = panelID[i]; if (panelIDCopy[i] === l - 1) e = i; } for (var j = 0, ll = 10; j < ll; j++) e = answer[j] = hogehoge(panelIDCopy, e, n); var c = 0, m = answer.length; var id = setInterval(function () { if (c < m) { clickPanel(answer[c++]); // パネル選択 } else clearInterval(id); }, 1000); } var s = 0; function hogehoge(arr, i, n) { var r = fuga(i, n); var a , m = 0; do { a = r[m++]; if (a !== -1 && a !== s) { arr[i] = arr[a]; arr[a] = n * n - 1; s = i; break; } } while (m < n); return a; }
>>844 自作プラグインにアクセスするときだけphpが擬似js的な動きをして実態はサーバサイドでjsが処理を返すという
ゲートウェイ的なエイリアス的ななんかそういう
ブラウザ上で文字にフォーカス(テキストボックスの中ではなく)するとI(アルファベットのi)みたいな形になりますが これを阻止するにはどのようにすればいいんですか? onmouseoverでreturn falseしてみたんですけどできないです・・・
JSじゃなくてCSS 「CSS cursor」でぐぐれ
850 :
848 :2011/01/13(木) 23:58:19 ID:zL8Mtv+R
間違えてsageてしまいました 後ブラウザはChrome 7.0.517.41です
852 :
Name_Not_Found :2011/01/14(金) 00:23:03 ID:WJ87H2sH
<script type="text/javascript"><!-- (function() { /* コード */ })(); //--></script> と <script type="text/javascript"><!-- function func() { /* コード */ }; func(); //--></script> と <script type="text/javascript"><!-- function func() { /* コード */ }; //--></script> <body> <script type="text/javascript"><!-- func(); //--></script> </body> って何が違うズラ?
853 :
Name_Not_Found :2011/01/14(金) 00:30:41 ID:WJ87H2sH
あ、間違えた ×(function func(){ /* コード */ })(); ◯(function(){ /* コード */ })();
855 :
Name_Not_Found :2011/01/14(金) 00:41:02 ID:yjZBSSOF
Javascriptのエラー?困っています。。。 Javascriptに関して初心者です。 〜状況〜 ホームページ更新のため、javaが反映されていたバナーを変更しました。 【バナーA】(javaが反映される前のバナー画像) 【バナーA’】(ブラウザ上でカーソルを合わせるとjavaが反映され、バナーAに影がついたような画像) この二つの画像を 【バナーB】 【バナーB’】 に変更し、ホームページビルダーのFTPでアップしました。 ホームページビルダーのプレビューでは正常に作動するのですが、 FireFoxやIEなどのブラウザで表示すると以下のように表示されてしまいます。 【バナーB】(カーソルを合わせる前の画像:正常) 【バナーA’】(カーソルを合わせた画像:エラー) javaが反映された後の画像がアップ前の画像のままで、 新しい画像が表示されません。 javaはHTMLファイルとは別の外部ファイルで読み込んでいるのですが 画像を変更しただけで、javaのファイルは一切変更していません。 このようなことが生じる原因お分かりの方 是非、ご回答お願いいたします。
>>847 翻訳してみたが、もう限界。
> 自作プラグインにアクセスするときだけphpが擬似js的な動きをして
PHPがクライアントサイドスクリプトになって、
> 実態はサーバサイドでjsが処理を返すという
サーバサイドJavaScriptが処理を返して、
> ゲートウェイ的なエイリアス的ななんかそういう
なんかそういう、とか適当なこというなw
>>855 JavaとJavaScriptは別のものだからそこ間違えないように。
で、どうせキャッシュが残ってるんだろうから一度
「一時ファイルの削除」をやってみろ。
>>856 いや、多分違うだろう。俺が翻訳するわ
サーバサイドJavaScriptってのは一般的にはそんなに知られてないからナイだろうと予測して
「phpがさもJavaScriptのように動いてくれてブラウザが普段するような処理をサーバサイドでやってくれる」
という意味だと思う。
つまり無理だ。というか、それはサーバサイド処理だ。
>>858 JavaScriptのように動くのにサーバサイドってどういうこと?
>>859 そんなことできないから無理ってことでしょ
あったとしてもページ遷移するようなサーバサイドの処理になる
ajaxを使って、イベント等のページの情報を常にサーバーに送って、サーバーから得たDOM情報等の指示でページを動かすってことかな。 それならやったことあるし、できたよ。 javaアプレットで同じような考え方があるね。
クリックしたマウスが乗ったという情報だけサーバに送る感じか
サーバサイドクリッカブルマップなんて懐かしワードがあったな
コールバックから値をリターンさせたい場合って こんなふうにすればいいんですか? var foo = func(); function func(){ var value; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ value = xhr.responseXML }; return value; } valueに値が入る前にreturn valueされたりすることはありませんか?
>>864 xhr.onreadystatechange = function(){ hoge(xhr.responseXML); };
function hoge で引数を受け取る。
> valueに値が入る前にreturn value 当然されます。 つーか、それ以前に5行目のvalueと6行目のvalueは全くの別物として扱われるし。
>>865-866 どうもありがとうございます
>>865 それがちょっと不便なときがあってリターンさせたいのですがやっぱりそうしないといけないんですね
>>866 5行目と6行目の value は3行目の value を参照するわけで同じものを参照するはずだが…。
個人的には循環参照する事の方が気になるな。
ActiveXObject じゃないから大丈夫ではあるけど、好ましくない気がする。
>>867 一応、同期処理にすれば期待通りの動作になる。
>>868 5行目の value はローカル変数。6行目のイベント処理からは参照できない。
>>870 それがクロージャだと思っていたんだが…。
3行目の value を参照できないなら4行目の xhr も参照できなくなる。それでは処理が成り立たない。
第一引数で event を受け取れる実装はともかく、IE は対応しようがなくなる。
window.addEventListener("load", function(){ var body = document.body; body.appendChild((function(){ var button = document.createElement("div"); button.addEventListener("click", function(){ this.setAttribute("class", "clicked"); }, false); return button; })()); }); メモリリークのパターンがいまいち理解できないのでけど例えばこのコードはリークする?
>>873 attachEvent に変更すればリークする。
ただ、IE6 に限らず循環参照しないコードが好ましいと俺は習ったので addEventListener (XMLHttpRequest) でも気をつけることにしてる。
875 :
872 :2011/01/14(金) 22:59:04 ID:???
ああ、わかった。>870 は多分、 xhr.onreadystatechange = function () { var value = xhr.responseXML }; だと思っているんだろう。 5行目はイベントハンドラ関数内のローカル変数ではない。 (function () { var value; (function () { value = true; })(); alert(value); // true })();
>>874 ありがとうございます、循環参照は気を付けるようにします
>>873 これなら大丈夫。
function onClick () { this.setAttribute("class", "clicked"); }
window.addEventListener("load", function(){
var body = document.body;
body.appendChild((function(){
var button = document.createElement("div");
button.addEventListener("click", onClick, false);
return button;
})());
});
>>877 ありがとうございます
イベントに自身を参照するクロージャが設定されるとリークする解釈でよろしいのでしょうか
attachEvent はどうすんの?
画像がある場合にthickboxで拡大イメージを表示したくてこんなコード書きました if(item.imgB01){$("img#imgB01").attr("src", item.imgB01);$("img#imgB01").wrap("<a href='" + item.imgB01 + "' class='thickbox' rel='gallery1'></a>");} html <img src="../cmn_img/blank.gif" id="imgB01" alt="" width="261" height="392" border="0"> でもthickboxが作動しません。リンクタグはちゃんと挿入されてるようですが・・・
>>878 イベントハンドラ関数からローカル変数に格納されたDOMノードが参照可能になるとリークパターンが成立する。
(function () {
var p = document.createElement('p');
document.attachEvent('onclick', function () {
// p を参照可能なのでリークする
});
})();
ローカル変数に格納されたActiveXオブジェクトでもリークパターンが成立する。回避方法が特殊。
var xhr = new ActiveXObject('Msxml2.XMLHTTP.6.0');
xhr.onreadystatechange = function () {
// xhrを参照可能なのでこのままではリークする
xhr.onreadystatechange = new Function; // 関数オブジェクトを代入してリークパターンを回避する (null では解消されない)
xhr = null; // xhr にも null も代入
};
http://d.hatena.ne.jp/babu_babu_baboo/20100417/1271465430 がまとまっている。コメント欄やリンク先も参考になる。
addEventListener で書ける人は attachEvent でも書けると思う。
今でも気をつけている理由は
>>874 循環参照系は新規実装でも混入しやすいバグらしい。
>>882 これは分かりやすい、じっくり読んでみます。
IEのActiveXObjectの扱いが特殊なのはActiveXObject自体が
COMへのラッパで戻り値をオブジェクトっぽく見せてるだけで全く別物らしい・・からだと思います。
setTimeoutやsetIntervalから呼び出した関数の 返り値を取得ってどうすんの?
>>882 jquery-1.4.4.jsr, prototype.js (1.7) のソースを読んでみたが、両方とも対応してた。
さすがだなー。
>>887 関数呼び出しで引数に渡せばいいんじゃね?
>>881 イベントハンドラの登録のタイミングじゃないかな
thickboxの方をlive(type, fn)に書き換えれば動くとおも
returnで処理辞めないくせにsetIntervalで 複数回return呼び出しても帰り値は最初のひとつのみなのか・・・ setIntervalで呼び出した関数の状態をリアルタイムに 監視したい場合グローバル変数使うしかないんかね・・・
>>891 > 複数回return呼び出しても帰り値は最初のひとつのみなのか・・・
多分、何か勘違いしてる。
>>890 thickboxの中の
$(domChunk).click(function(){
を
$(domChunk).live('click',function(){
にしたらうまくいきました
ありがとうございました
894 :
Name_Not_Found :2011/01/15(土) 10:41:12 ID:Ftfy8Zpk
javascriptのコードに関する質問じゃないんだけど、 ポップアップブロッカーって一時話題になってたけど、あれってどうなったの? 今のブラウザに標準でついてるのはもちろん知ってるけど、一時期ほど大騒ぎになってないというか 結局ポップアップは禁止がデフォルトになったから? でもそれにしてもいろんなサイトでよく見るし。 全部Thickboxに置き換えられたかというとそうでもないし。 ポップアップ、使っても問題ないの?
いらん用途に使うとtarget="_blank"と同じで迷惑って奴
developer.mozilla.orgに繋がらないのは俺だけ?
sbmitやonclickと関連付けられてるポップアップはユーザーが呼び出したものだからブロックされない それ以外は完全にブロックってはっきりしたから問題なくなったんじゃない?
<p>ほげふがぴよ</p> を <p>ほげ<span>ふが</span>ぴよ</p> 等とDOMを書き換えることなく「ふが」にスタイルを適用したりイベントリスナーを登録したりできますか?無理ですか? 方法があれば教えてください。
>>897 おお、そういう風にハッキリ区分されたんだ?
あの顛末どうなったんだって気になってたんだ。ありがとう
>>896 よくわからんがサンキューだ
903 :
898 :2011/01/15(土) 17:48:30 ID:???
904 :
Name_Not_Found :2011/01/15(土) 20:42:17 ID:S6csxntA
var d = element.style.margin = 0 + "px"; ◯ alert(d); × d = 50 + "px"; style.marginTopは読み取り専用って事?
>>904 var d = element.style.margin = 0 + "px";
d = 50 + "px"; // d は element.style.margin の参照ではない
element.style.margin はString型だから参照を得ることは出来ない。
var style = element.style; // element.style の参照を得る
style.margin = 50 + "px"; // element.style.margin を初期化できる
メモリリークというのはウィンドウ(タブ)を閉じれば解消されるんですか? アプリケーションそのものを閉じるまでですか?
908 :
Name_Not_Found :2011/01/15(土) 21:46:16 ID:S6csxntA
900超えたのでテンプレ論議あれば今どうぞ。
>>907 メモリリークはタブを閉じる時に発生する。
タブを閉じるときに解放されるはずのメモリが解放されないのがメモリリーク。
>>910 JavaScriptでのファイルの出力についてのFAQ
タブを閉じる時に発生するってどう考えてもブラウザ側の問題だよな…
>>912 そのFAQはサイトへのリンク?それともFAQに項目追加?前者なら
リンク教えてほしい。後者なら文案がないと入れられないので文案を。
>>914 >>912 「閉じる瞬間に」発生するという言い方はちょっと違うかと。
リークパターンを作った瞬間に「ゴミになっても解放されない」
状況になってしまい、そのためにタブを閉じて不要になっても
その部分だけは解放され損なうということでしょ。もちろん
ブラウザがタコなのは異論ないけど、「タブを閉じる処理」の
せいというわけじゃ全くないから。
var hoge = { init: function() {
var hoge = { init: function() { 〜〜〜 }, } こういうのってイベントハンドラで起動させることってできないんでしょうか? <body onload="hoge.init()">で呼び出せませんでした。
919 :
918 :2011/01/16(日) 10:35:24 ID:???
すいませんできました。。。
<html> <head> <script> var hoge = { init: function() { alert("ok") } }; </script> </head> <body onload="hoge.init()"></body> </html> firefoxとchromeでalert("ok")が実行されたよ
>>916 補足ありがとう。結構説明が難しいんだな…。
Javascript側でイベントハンドラを設定しようと思ってやってみたのですがうまくいきません for (i = 1;i < 10;i++) document.getElementById("menu" + [i]).onclick = function { hoge([i]) }; だいたいこんな感じなんですが、javascript側でイベントハンドラを設定するときには引数を指定することはできないんでしょうか?
[ ]これなんで付けた。配列になってるぞ
こんなもん動くわけないじゃん
>>923 [ ]つけなくていいんですか・・・
外しても動きませんでした・・・
>>924 どのようにしたら動くかヒントだけでも教えていただけないでしょうか?
<body> <span id="menu1">menu1</span><br> <span id="menu2">menu2</span><br> <span id="menu3">menu3</span><br> <span id="menu4">menu4</span><br> <span id="menu5">menu5</span><br> <span id="menu6">menu6</span><br> <span id="menu7">menu7</span><br> <span id="menu8">menu8</span><br> <span id="menu9">menu9</span><br> <script> for (i = 1;i < 10;i++) document.getElementById("menu" + i).onclick = hoge(i); function hoge(arg){return function(){alert(arg)}}; </script> </body>
>>925 このスレをvol.1から読み返せば動くようになるよ
928 :
Name_Not_Found :2011/01/16(日) 13:47:48 ID:wy7u/eY3
>>925 >>926 が答えなんだけど、
>>922 の
document.getElementById("menu" + [i])
が何を意味しているのかを理解しないと、なんとも
[i][0]にしてしまえば間違ってはない
iには[]付けないと駄目だと勘違いしてるのかな なんにせよ[]の意味を理解しないとな
function() {}をfunction {}と省略できるの?
はい
933 :
Name_Not_Found :2011/01/16(日) 14:47:14 ID:AnfDS7j+
ローカルで単独ファイルで実行させたいのですが、alertの出し方がわかりません。 htmlに埋め込んでブラウザ上で動かすのは問題ないのですが、同じ記述でも、 「オブジェクトを指定してください」 「'window'は宣言されていません」 などのエラーになります。なにか宣言が必要なようですが、どうすればいいのでしょうか。
jsファイルだけで実行したいってこと? それJavaScriptじゃないんで
jsファイルだけで実行したいってことなんですが、これに当たるんでしょうか。
×これに当たるんでしょうか。 ○これは何に当たるのでしょうか。
WindowsのWSHで動かしているのならJScript
> WSHで WSHを含めて検索したら、「WSH.echoを使う」っぽいのが掛かりました。 お世話になりました。 window.confirmみたいなのもあると嬉しかったんだけど・・・
WSH使うってんならconfirmは WScript.CreateObject("htmlfile").parentWindow.confirm("OK?"); とかやれば出来る。
>>940-941 また調べてみます。
しかし、function内でグローバル変数が作られるなんて・・・・
この1時間半を返して orz
^ってべき乗じゃないのかよ・・・
N-88 BASICの頃以来見たことないな
べき乗が「**」って、どの言語だっけ?
FAQに入れるファイルアクセスの項目の文案ありませんか。 単に「ローカルファイルを読み込みたい」「できません」 とかでいいのかな?
>>946 ローカルファイルならQ2/A2になるでしょ
これにサーバーサイドのAも付け加える形でいいんじゃないかな
A2はCookieの利用でローカルに読み書きできるとは言えない?
クライアントへの限定的な入出力→Cookieの利用
サーバーサイドでの入出力→Perl、PHPの利用(スレ違い)
あとこのスレでも話題になったサーバーサイドJavaScriptについても
一応触れておくとか
たまにいるURLだけ貼る奴って何なの
951 :
Name_Not_Found :2011/01/16(日) 19:59:01 ID:0Aw6tvjD
質問です。下のコードをもとに、test1で参照しているeのmarginTopの値を、 test2でsetIntervalを使いスライドさせたいのですが、うまくいきません。 -------------------------------------------------- function test1() { var e = document.getElementById('id'); e.style.marginTop = test2(); } function test2() { return 50 + "px"; } -------------------------------------------------- いくつか試してみたコードがあるのですがどれもうまく動きません。 例@ -------------------------------------------------- function test1() { var e = document.getElementById('id'); e.style.marginTop = test2(); } function test2() { setInterval(function() { var q = q + 1; return q + "px"; }, 100); } --------------------------------------------------
952 :
Name_Not_Found :2011/01/16(日) 20:00:30 ID:0Aw6tvjD
例A -------------------------------------------------- function test1() { var e = document.getElementById('id'); e.style.marginTop = setInterval(test2, 100); } function test2() { var q = q + 1; return q + "px"; } -------------------------------------------------- 例B -------------------------------------------------- function test1() { var e = document.getElementById('id'); setInterval(function() { e.style.marginTop = test2(); }); } function test2() { var q = q + 1; return q + "px"; } -------------------------------------------------- 分かる方がいたらお願いします。
alert(q)してみなよ
HTML5策定でAPIがかなり充実するからFAQ大幅書き換えしないと駄目だろうな ajaxなファイルアップロードなんかも簡単に実装できるようになるし。 function fileUpload () { var files = document.getElementById("file").files; // Blobの配列 var req = new XMLHttpRequest(); var data = new FormData(); for (var i = 0; i < files.length; i++) { data.append("file[]", list[i]); } req.open("POST", "index.php", false); req.send(data); }
955 :
Name_Not_Found :2011/01/16(日) 20:17:27 ID:0Aw6tvjD
>>953 あ、すいません(><)初歩的なミスでした。
--------------------------------------------------
function test1() {
var e = document.getElementById('id');
var q = 0;
setInterval(function() {
e.style.marginTop = test2(q);
});
}
function test2(q) {
var q = q + 1;
return q + "px";
}
--------------------------------------------------
これでいけました。
それじゃまあ、もう956だから今回は無理で、大幅改訂するのなら 次スレで早めに具体案を出してほしい。ということで、次スレは 本スレとおなじままで975超えたら。
合意ができた気がしないんですけど、
>>912 からの流れだと「何をどう
直す」という合意ができたと思いますか?それを出してください。それに
反対がなければ変更したらいいんじゃないだろうか。具体的にFAQの何番を
どのように変更すると?
そもそも900からテンプレ議論開始して 950で打ち切りで次スレ持ち越しとか 質問スレ内で間にレスをはさむのに50レスでどうにかしようってのが間違い こんなことばかり毎回続けてるから変わりようがないんだよ
それは同感なんだけど、いつもじゃあ次スレになったらさっさと やろうねと言って、実際に次スレになったらいまいちテンプレ 論議が盛り上がらない、ということを繰り返してるから。 次は800でテンプレ論議してみるとかどうでしょうか?
いや今度こそ最初にやればいいだろ。 950あたりでその辺りにレスアンカー張ってもらえればみんな思い出すし。
962 :
1(ホントに1です) :2011/01/17(月) 04:19:34 ID:5DKJvtc5
963 :
922 :2011/01/17(月) 05:22:29 ID:???
964 :
Name_Not_Found :2011/01/17(月) 06:32:44 ID:5DKJvtc5
>>963 >htmlファイルにjavascriptをまとめてしまうとうまく行くのですが、分離するとうまくいきません
ファイル見てないけど、getElementById( ID )っていうのは
「DOMツリーからid属性値がIDの要素を取ってこい」っていうメソッド
つまり、少なくとも目的とする要素がDOMツリーにぶら下がるまでは、実行しても意味がない
なので、分離したときに適切なタイミングで実行できてないのが原因だと思う
んで、一般的に「DOMツリー完成したよイベント」に、実行したい関数をアタッチするのが
主流なんだけれども、旧IEとかで書き方が違うから、あえてレガシーな書き方をすると
body.onload = function(){
for(var i=0 ; i<10 ; i++){
document.getElementById("menu" + i).onclick = function(){ hoge(i); };
}
}
って外部ファイルに書いて<script>要素で読みこめばいいんじゃないかな
HTMLとDOMとJSについて考えながら、調べたり書いたりするといいかも
965 :
Name_Not_Found :2011/01/17(月) 06:34:14 ID:5DKJvtc5
主流は言い過ぎでした 俺はよくやる、とでも置き換えてくださいまし すまんこ
966 :
Name_Not_Found :2011/01/17(月) 06:34:52 ID:5DKJvtc5
あああ。 body.onloadもwindow.onloadですな
968 :
922 :2011/01/17(月) 08:01:50 ID:Cu9XeuHV
tab.view()の引数見てると変な数値が渡されていました・・・ しかもすべてのタブが同じ引数を渡しているみたいです・・・ しかし、なぜこの数値が渡されているのか理解できません init関数のfor文の変数iの現在の値が渡されています
969 :
922 :2011/01/17(月) 08:08:01 ID:???
すいません
>>926 さんのを参考にして新たに関数作りそれに引数を渡して
tab.view()に引数毎渡したらできました
何故関数を挟むとできるようになるんですか?
それを理解したいです・・・
>>969 FAQのQ14/A14を読んでないだろ。それとおなじ現象(現時点のiが
取れてしまうという点で)。FAQはまず熟読すべきだと思わんかね。
971 :
Name_Not_Found :2011/01/17(月) 08:31:58 ID:oKVu1L+F
>>967 ああああああああ!!
for(var i=0 ; i<10 ; i++)(function(n){
document.getElementById(n).onclick = function(){ hoge(n); };
})(i);
書き方はともかく、スコープつくってその中に封じ込める感じで
ほんとすんません…
972 :
922 :2011/01/17(月) 08:52:19 ID:Cu9XeuHV
>>970 すいません、熟読すべきでした。
これからは気をつけます
973 :
1 :2011/01/17(月) 18:36:50 ID:uRyN2JFp
テンプレ議論スレ、別途たてますかね? さして迷惑にもならんと思うんですが
質問です。Win7のIE8において、
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd ">
と宣言して、
<body id="MA_body" onload="EventA();" onScroll="EventA();">
と書くと、ロード時には動きますが、スクロール時に動きません。
色々検索してみましたが、サッパリです。解決方法がありましたら教えて下さい。
975 :
Name_Not_Found :2011/01/17(月) 18:53:25 ID:x25E+EsE
本に書いてあることをほとんどそのまま実行しているんですが出来ません。
function getText(){
cacheTime=(new Date()).getTime();
httpObj=new XMLHttpRequest();
httpObj.open("get", "
http://***/getNewText.php?time= "+cacheTime, true);
httpObj.send(null);
newText=httpObj.responseText;
alert(newText);
}
alertを使って確認してみたら関数はちゃんと呼び出されていました。
リクエスト先のURLにブラウザでアクセスしたらちゃんと文字データが帰ってきました
しかし、上のスクリプトではalertは表示されますが中に何も書いてありません
正しくテキストデータが取得出来ていないようです。
どこが間違っているか教えてください。
>>941 できた。
ただ・・・
ググれば解るだろとタカを括っていたけど、ほとんど掛からなかった。
日本人でこれを理解できてる人は、きっと28人ぐらいしかいない特殊な手法
なんだろう、と勝手解釈することにした。
977 :
Name_Not_Found :2011/01/17(月) 19:26:39 ID:uRyN2JFp
>>974 スクロールするのってbodyでいいんだっけか?windowな気が
>>975 非同期なんよ。
だからsendメソッド叩いても、返答があるまで待ったりしない。
xhrにreadystateってプロパティがあって、通信状況によって値が変わる。
で、変わるたびにreadystatechangeイベントが発生するから
それを使ってレスポンスを受け取ります。
つか、そんなふうに本に書いてあった?
978 :
Name_Not_Found :2011/01/17(月) 19:35:15 ID:x25E+EsE
>>977 できたぜ!
仕組み理解したw
ありがとうございます
function getText(){
cacheTime=(new Date()).getTime();
httpObj=new XMLHttpRequest();
httpObj.open("get", "
http://www.yahoo.co.jp/ ", true);
httpObj.send(null);
httpObj.onreadystatechange = func;
function func(){
if( (httpObj.readyState == 4) && (httpObj.status == 200) ){
newText=httpObj.responseText;
alert(newText);
}
}
}
>>977 がおっしゃったようにこんなかんじ
200以外が返ってきたときのことも考えておけ
980 :
Name_Not_Found :2011/01/17(月) 20:46:47 ID:uRyN2JFp
>>979 補足なんだけど、ロードする対象をキャッシュしてしまうと
糞ブラウザでreadystateが4のまま変化しないことがある
ので
if(xhr.readyState == 4 && !!xhr.responseText) //やりたい事;
else onreadystatechange = function(){
if(xhr.readyState == 4 && !!xhr.responseText) //やりたい事
}
みたいな周りくどいことしてます、自分は。
981 :
Name_Not_Found :2011/01/17(月) 20:48:58 ID:uRyN2JFp
980過ぎちゃった とりあえずテンプレはママで次スレたててきます テンプレ議論スレ建てるかどうか決めましょう
982 :
Name_Not_Found :2011/01/17(月) 20:58:00 ID:uRyN2JFp
>>981-982 おつかれ様でした、ありがとうございます(今日は全然アクセス
できませんでした)
985 :
974 :2011/01/18(火) 01:24:31 ID:???
>>977 chrome、Firefoxはbodyでonscrollイベントが発生します。
IE用にbody.onscrollで書くと、「document.getElementById(...)はNULLまたはオブジェクトではありません。」と言われます。
それでものすごく困っています…。どうにかIE上でbodyから呼び出す方法はありませんか?
onscrollは発生しているってことかな? 他に原因ありそうだから、もう少しコードが見たい
>>985 ロード時にスクロールバーが発生する時点でスクロールしてるかも
DOMContentLoadedまでまつべきかも
990 :
Name_Not_Found :2011/01/19(水) 00:32:43 ID:HfWvC9SN
"ppppp"というようにpを5個作る 一番簡単な方法を教えてください。
992 :
990 :2011/01/19(水) 01:07:01 ID:???
>>991 深夜にすみませんでした。forよりはいいですね。
ありがとうございます。
>>991 横からですまんがこれってどんな原理?
面白いので誰か解説お願いします
Array.joinは配列の要素を文字列により連結する [1,2,3].join('-'); // "1-2-3"
>>994 ありがとう、根本的な勘違いをしていたよ・・・
しかしよくこんな方法思いつくね
連続する長い文字列の生成には便利だな
使う機会は少なそうだけど
997 :
Name_Not_Found :2011/01/19(水) 16:47:24 ID:6/sbTjZN
埋めますわよ
>>991 効率は良くないような気はするが、短く書けるな。
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。