+ JavaScript の質問用スレッド vol.52 +
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大(現行Ver.:IE5.5-6、N6-7、Opera7-8) 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
【FAQその1】 Q1. 開いた別窓/フレームの内容にアクセスできないのですが… A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。 Q2. JavaScriptでローカルファイルを読み/書きたいのですが… A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに… A3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが… A3. セミコロンで複数の文を区切られます。onclick="foo();bar();"としましょう。 Q4. document.write(...)でページ内容を追加したいのですが… A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。 innerHTMLは非標準ですがIE、Opera、Gecko(N6/N7/Firefox等)で対応済。 Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが… A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。 Q6. DOMでtable要素にtr要素を追加しても表示されないのですが… A6. IEではtbody要素にtr要素を追加する必要があります。 tbody要素はtbodyタグを書いていなくても自動的に作成されます。 またはtable.insertRow()/tbody.insertRow()を使いましょう。 Q7. Aタグのonclickで動作指定してるのですが時々動きません… A7. 「onclick="...;return false"」としないとページ移動しちゃうから。 Q8. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが… A8. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。
【FAQその2】 Q9. フォーム部品名を変数にした「...myform.変数名.value」が動きません… A9. 「document.forms.myform.elements[変数名].value」でどぞ。 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。 例:「obj.p0=obj.p1=...=obj.p8=0;」⇔「for(i=0;i<9;i++) obj['p'+i]=0;」。 Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが… A10. IEではe.currentStyle、Geckoではwindow.getComputedStyle()を使います。 Q11. 100*1.15の結果が114.999…998となってしまうのですが… A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。 Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが… A12. Geckoのnew XMLHttpRequest()、IEのnew ActiveXObject("Microsoft.XMLHTTP") を使えばできる。古いブラウザだと隠しフレームに読むなどのワザが必要。 Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません… A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどうぞ。 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();}; という風に無名関数を作りましょう。中に書かれたコードが実行されます。 Q14. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが… A14. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、 offsetがマッチした位置、sが置き換え前の文字列全体になります。
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
9 :
Name_Not_Found :2006/10/22(日) 00:12:31 ID:PS8ars4f
( ゚д゚) オッツー♪
前スレでかきこしたものですがDat落ちしたみたいなので
一応前スレで書きこしたないようをここに書き込んでおきます
>>974 失礼しました。
修正版をアップしてくれてたんですね
なかなかいいですね
打った瞬間スローになるところも
ありがとうございます
このあとは、それぞれとんだ方向のGIFに切り替わりホームランかどうかランダム?
に判定してその結果をGIFに反映させるという感じです。
あとは、ポール際のシーンもあって、ファールかホームランかの微妙なGIFも使いたいと思っています
そのシーンのGIFはまったく作ってないですが
>>991 ってことで
>>947 さんが修正してくれた感じでいいと思います
11 :
Name_Not_Found :2006/10/22(日) 13:57:35 ID:ijZGjqF8
>>10 打つ瞬間とまっているの古い機種だったからなんですね
新し眼の機種でやったらスムーズにいきました
全スレの986です。 992,993さんの通りにやってみましたが オブジェクトを指定してくださいとエラーが でてきてしまいました。 どうしてなのでしょうか?? よろしくお願いします。
>>13 関数Aの中で定義された関数Bは通常関数Aの中でしか使えない。
すれ違いかもしれませんが、 youtubeの動画を見ようとすると JavaScriptをoffにしてるか flash playerの最新版が入っていないため 見られないといわれました flash playerは入れましたが、まだ見られませんでした。 JavaScriptはインターネットオプション→セキュリティ→レベルのカスタマイズ を開いてスクリプトの項目を全て有効にしてみました。 それでもやっぱり見られません。 youtubeだけでなくflashを使ったページは皆見られないようです。 ブラウザはIEエンジンのsleipnirを使ってます。 (ただのIEでもダメでした。) どうしたらいいでしょうか?
>>15 Flashの問題、どっかに不具合修正するパッチがあったはず
よく覚えてないのでここ以外のスレで聞いた方がよろし。
スレ違いだね。初心者スレに逝くのがいいんじゃないの。 ここは自分でJavaScriptコード書く人のためのスレ。
18 :
13 :2006/10/22(日) 23:03:47 ID:???
>>14 自分頭悪いので言っている意味は分かっていても
それからどうしたらよいか分かりません。
ご迷惑をおかけしますので手取り足取りスレに行ってきます。
ありがとうございました。
19 :
948 :2006/10/22(日) 23:35:52 ID:???
前スレの948です。いろいろやってるんですが、解決しないのでもう一度質問してみます。 基本的にはブラウザを閉じた場合や他のページに移動した場合、タブを閉じた場合などに その情報をXMLHttpRequestでサーバ側に伝えたいということなのですが。。。 前スレで教えて頂いたOnBeforeUnloadだとダイアログ出すことは出来ますが、 そのままブラウザ閉じられた場合に関数を実行できません。 window.addEventListener('beforeunload', '関数名', true) のようにしてもそのまま閉じられた場合はFirefoxではアクションを検知しません。 何か対策などはありますでしょうか・・・。
>>16 ありがとうございます!
flashplayerのスレ行ったら、
やっぱり同じ問題になってたらしく、
プレーヤーをダウングレードしてみました!
見事見ることができました。
>>19 結局閉じる時に確実に何かをするというのは難しいと思うよ。
むしろXMLHttpRequestを使って定期的にサーバ側に「開いている」
と伝え、サーバ側で一定時間報告がなければ閉じたと思うのが素直かと。
22 :
948 :2006/10/23(月) 09:37:29 ID:???
>>21 やはりそうですか・・・。
サーバ側で監視スレッドを立てるなどの方法も以前から検討はしてましたが、
これできっぱり諦めがついたのでそのように実装しようと思います。
ありがとうございました。
ロードが終了したiframeの高さが知りたいんですが、 どうしたらいいのでしょうか? alert(myiframe.document.body.scrollHeight); alert(myiframe.document.body.clientHeight); alert(myiframe.document.body.scrollTop); alert(myiframe.document.documentElement.scrollTop); alert(myiframe.document.body.offsetHeight); これだとできませんでした。
>>23 ホレ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var w = frames.f0, h = 0;
if(w.document.documentElement && w.document.documentElement.clientHeight) {
h = w.document.documentElement.clientHeight;
} else if(w.document.body && w.document.body.clientHeight) {
h = w.document.body.clientHeight;
} else if(w.innerHeight) {
h = w.innerHeight;
}
alert(h);
}
</script>
</head><body onload="test()">
<iframe name="f0" src="t2.html"></iframe>
</body></html>
>>24 ありがとうございます。 すいません、質問の仕方が悪かったんですが、現在のサイズではなく、 表示されている中身がスクロールバーなしで済むときの最小サイズが知りたい のです。当然サイトによって値は変わるものになると思います。 わかりましたらお願いします。
>>26 ありがとうございます。別さばではないです。
<html><head> <script type="text/javascript"> function t() { var w=document.getElementById("i"),d=(w.contentDocument?w.contentDocument:w.Document).getElementsByTagName("body")[0]; var o="OH: "+d.offsetHeight+"<br/>SH: "+d.scrollHeight+"<br/>CH: "+d.clientHeight+"<br/><br/>"; document.getElementById("o").innerHTML=o;document.getElementById("ta").value=d.innerHTML; w.height=d.scrollHeight; } </script> </head> <body onload="t()"> <iframe id="i" src="t2.html"></iframe><br/> <textarea id="ta" rows="10" cols="80"></textarea> <div id="o"></div> </body></html>
>>28 一応、まだIE5.5は残ってるだろ。しょうもないことすんな。
>>29 >>24 が書いてるみたいに、frames.f0 のように書かないと、
一部の訪問者から、ウイルスの警告が、とかなんとか苦情くるかもなw
32 :
Name_Not_Found :2006/10/23(月) 20:41:31 ID:D5lf7eS7
「JavaScript コーディング規約」でググると
http://c2.com/cgi/wiki?JavaScriptCodingStandard ↑が出てくるんですけど、
/*-------------------------------------------------------------------------
* Gui framework classes for the Web Client are stored in this file.
*
* DEPENDENCIES
* - Data.js
* - Utils.js
*-------------------------------------------------------------------------/
これってコメントとして間違ってません?
ない
function checkVaildness(form){ var s =''; var name, id; var eles = new Array(); for(i = 0; i < form.elements.length; i++){ name = form.elements[i].name; id = form.elements[i].id; eles[name]++; } for(var k in eles){ s += k + ' = ' + eles[k] + ', '; } alert(s); return false; } nameをインデックスにしてその個数を数えたいのですが 値がNaNになってしまうのはなぜですか?
>>35 初期値を入れないとundefinedでそれに1足そうとしたらNaN
var a="", b="", c=""; みたいな書き方ができるって、知らない人が意外に多いのよね。 たいてい var a = ""; var b, c; って使い分けたような書き方をしてある。
var a = b = c = "";
>>37 普通、初期値がある変数宣言と、ない変数宣言は分けて書くだろ。
そうしないと、後でデバグする時に、見づらくてかなわん。
>>39 あ、例が悪かった。dも用意して、
var a = "";
var b = "";
var c, d;
かな?初期値を入れる時にvarを連呼。
41 :
Name_Not_Found :2006/10/24(火) 12:02:22 ID:kD8fEPK8
このCGI
http://www.futomi.com/library/accs.html を使って、htmlにJavaScript
<SCRIPT Language="JavaScript">
<!--
document.write("<img src='
http://www.hoge.com/foo/acc/acclog.cgi? ");
document.write("referrer="+document.referrer+"&");
document.write("width="+screen.width+"&");
document.write("height="+screen.height+"&");
document.write("color="+screen.colorDepth+"'>");
// -->
</SCRIPT>
を記述したところ…
IEで見ると、JavaScriptを書いた部分に20pxほどの余白が出来てしまいます。
fifefoxだと出てこないのですが…。
余白が出てこないようにするには、
どうすれば良いのでしょうか?
お分かりになる方がいらっしゃいましたら、
よろしくお願いします。
ちなみに、jsを外部に書き出してもダメでした。
43 :
Name_Not_Found :2006/10/24(火) 13:01:41 ID:e8blj3V0
>>43 そのテキスト文字というのがリンクならできる。
リンクじゃなくてもブラウザによってはできる。
45 :
Name_Not_Found :2006/10/24(火) 17:27:47 ID:aajciZSx
var o = {o:42}; というのはどういうことなのでしょうか。「o」が「o」 を持つことは あり得ないと思うのですが。
alert(o.o);//42 有り得てる。
new Array()のコールのときに まとめて連想配列を宣言するにはどうすればいいですか?
>>47 function ObjectArray() {
var a = new Array(),i;
if (typeof arguments[0] == "object") for (i in arguments[0]) a[i] = arguments[0][i];
for (i=1; i<arguments.length; i++) a[i-1] = arguments[i];
return a;
}
var myArray = ObjectArray({apple:"りんご",banana:"バナナ"},"あ","い","う","え");
for(var i in myArray) document.write(i+"="+myArray[i]+"<br>");
51 :
49 :2006/10/24(火) 19:02:22 ID:???
通常の配列に更に数字以外のプロパティを付けるっていう理解だったんだけど
ふつーにありえる。
>>48 それだとnewコールしてからさらに45を記述しないといけないようですが。
デフォではできないということでいいんでしょうか?
54 :
45 :2006/10/24(火) 19:21:53 ID:???
>>46 ありがとうございます。それは私も確認しています。
分からないのはJavaScriptは参照渡しですよね。とすると「o.o」は
中でどのような処理になっているのでしょうか?
>>53 var o = new Array()
o = {o:42};
みたいにしたいって事?
var o = {o:42};
だけでいいよ。
>>54 var o = {o:42};
は
var o = {"o":42};
とまったく同じ。
56 :
Name_Not_Found :2006/10/24(火) 20:01:45 ID:kV9tQzGr
Drag and Drop で、 ウィンドウを越えて Drag and Drop したいんだけど、ムリ? DIV+Position:absolute とかで作った擬似ウィンドウ(と呼ぶのか?) の間でDnDをするのはカンタン。 でも、Window.open()とかで作った、ホントの別ウィンドウの間で DnDって可能?
>>55 var o = new Array( {o:42} );
みたいのはできないんですかね?
62 :
56 :2006/10/24(火) 22:46:02 ID:kV9tQzGr
>>58 え?マジ?
やり方まで教えて!とは言わないんで、
Googleマップのどこがヒントになってるかだけでも教えてくださいな。
いまやってみたけど、どっこもDrag and Drop対応なんてしてないっぽいよ。
どこでDnDできるんですかね。
>>62 できたらキモイっつの
Firefoxなら拡張機能ごりごり書けば何とかなるかもしれんが、それはもうjavascriptとは無関係の世界
>>58 はGoogleマップのぐりぐり感をD&Dだとおもってるんジャマイカ?
よくわからんけど
ごりごりぐりぐり
IE限定のキモイやつ <html><head><script> var x,y,list; function getList(){return list;} function init(){ list = (window.opener ? window.opener.getList() : []); list.push(moveIcon);} function mouseDown(){ x = event.screenX - window.screenLeft - obj.offsetLeft; y = event.screenY - window.screenTop - obj.offsetTop; obj.onmousemove = mouseMove; obj.onmouseup = mouseUp; obj.setCapture();} function mouseMove() {for (var f in list) list[f](event.screenX - x, event.screenY - y);} function moveIcon(x, y) { obj.style.left = x - window.screenLeft; obj.style.top = y - window.screenTop; pos.innerHTML = x + ", " + y;} function mouseUp() { obj.releaseCapture(); obj.onmousemove = null; obj.onmouseup = null;} </script> <body scroll=no onload="init()"> <button id="btn" onclick="window.open(document.location.href)">Window OPEN</button><span id=pos></span> <div id="obj" onmousedown="mouseDown()" style="position:absolute;top:100;left:100;width:50;height:50;background:blue;"></div> </body>
うはキモス Opera でも動作した
66 :
Name_Not_Found :2006/10/25(水) 02:27:33 ID:LjM9N1Tt
JavaScriptでwaitってどうすればいいですか?
<img src="server1.com/img.jpg"> <img src="server2.com/img.jpg"> みたいに、同じイメージなんですが、 生きてるサーバが見つかるまで順繰りに トライしたいのですが、どーしましょう。 XmlHTTPRequestですと、ドメインの制限に引っかかります・・・。
img.onerror とか img.onload とか img.complete とかチェックしたら?
>>66 そういや、前どっかのWeb屋が作ったサイトで
処理
var limit = new Date() + 10 * 1000;
while (new Date() + 0 < limit);
処理
みたいなことが書いてあるのがあって、かなり死んだ。 むしろ死ねばいいのに。
>>66 setTimeout()で代替できるように書く。それができない奴は
JavaScriptやってはいけないと思う。
>>69 みたいなのは最低だから。
デバッグ中なら見逃しちゃまずいけど、デバッグしてるわけじゃないし…。
74 :
Name_Not_Found :2006/10/25(水) 22:51:23 ID:Q+/qR7Wt
質問です。 JavaScript間もないのでガベジとかよく分かっていません。 初期化だけで使うような関数はdeleteしておいたほうがよいでしょうか?
>>74 そんなもんのメモリが問題になることは絶対にないね。それとも
初期化に使う関数が何万行もあるのかね。
タイマーを作る時にボタンを押す前はstart押した後はstop しstopになるとstartになると同時にカウントが0になるように したいのですが、停止の欄にどのように0になるプログラムを 組んだらよいのでしょうか?
76さん、がっこうのせんせえにきいてみてください
78 :
74 :2006/10/26(木) 00:57:30 ID:???
2001年とは微妙に古い
>>78 1行だったらそんなものほっとくべきだよ。
>>76 <button onclick="this.innerHTML=(this.innerHTML=='start')?'stop'(count=0,'start')">start</button>
とかかな。試してない。そもそも読解の困難な日本語だし。
81 :
Name_Not_Found :2006/10/26(木) 14:55:33 ID:6eSTBhJ1
こんにちは。 var a=new obj(); のような書き方は正しいですか?
>>81 正しい。というか他にどういう書き方すんねん?
83 :
81 :2006/10/26(木) 17:50:13 ID:???
>>82 さん
というと、オブジェクトにvarをつけても別に問題ないですか?
変数はオブジェクトなんでしょうか。
85 :
81 :2006/10/26(木) 18:17:36 ID:???
わかりました。
>>83 var はすべての変数につける。JavaScriptでは変数は入れるもの
の種別と関係なくすべて一緒だから、 数だろうが文字列だろうが
オブジェクトだろうが何でも入れていい。変数はオブジェクトでは
なく「オブジェクトや値を入れる(指す)ことができるいれもの」かな。
CPUになるべく負荷を掛けずにwaitする良い方法ないですかね。
もちろんsetTimeoutで考えてるんですけど その場で処理をとどめて置くことってできますかね? 考えつかない・・・
実現が相当厳しい気がするのですが、皆さんのアイデアをお貸しください。 JavaScriptでプログラムを書いていると、ページ遷移はあまりしない方向になりますよね。 しかし、処理の一部一部をブラウザ上でブックマークなどをさせてあげたいと思ったとき、 どうやって実現すればいいのかさっぱりわからなくなってしまいました。 具体的には、ページ遷移を起こさずにアドレスバーの文字を変えることが出来ればいいのですが、 実験してみたところ出来ませんでした。直感的にはセキュリティ上絶対に出来ない気がしています。 ハッシュ(abc.html#hash)を利用してブックマークさせる方法も考えたのですが、 ブックマークはいいのですが掲示板などで自動的に#以降が無視されることもありますし、 google等のキャッシュに残らないという問題もあります(個々のページは残したいと思っています) かといって、そこそこ大きな規模になれば、画面の描画や内部データもそこそこの量になり、 出来ればページ遷移によってユーザに無為な時間を取らせたくないと思っています。 (しかし最終的に実現できない時は、ページ遷移でユーザがブックマーク可能にする事を考えています) こういう問題の解決方法はあるのでしょうか? どうかご意見アイデア等あればお聞かせください。よろしくお願いします。
>>89 その場にとどまることは出来ないので、プログラムの構造をそれにあわせて変えるのが普通です
>>90 >ハッシュ(abc.html#hash)を利用してブックマークさせる方法も考えたのですが、
画面遷移無しでhtmlに値を渡す、且つブックマークできる方法としては
これしかないと思うんだけど。
>ブックマークはいいのですが掲示板などで自動的に#以降が無視されることもありますし、 ・・
これ意味分からない。どういうこと?
93 :
92 :2006/10/27(金) 05:22:57 ID:???
あ、つまり掲示板などでURLを書き込んだ時に#以降が無視されることがあると。 まぁ俺から言わせてもらうと#以降を無視するような作りになってる 掲示板の方が直すべきだと思うけどね。 >ブックマークはいいのですが掲示板などで自動的に#以降が無視されることもありますし、 ・・ これ意味分からない。どういうこと?
94 :
92 :2006/10/27(金) 05:24:03 ID:???
>>93 そう、まさにその通りです。
メーラーなどでは結構頻繁にありますよね。
例えばblogのページなどを個別のURLで表せればいいなと思っているのですが、
友人にメールしたら見られないなんていう悲劇を考えると、画面遷移した方がマシですよね。
私もハッシュしかないのではと思っていますが、もしかしたら何か方法があるかもと思って質問しました。
>>95 「abc.html#hash」も「abc.html?query」も両方受け取れるようにしておけば?
で、掲示板などに張る場合はqueryにして、それ以降はhashにするとか。
HASHを使った方法はかなり一般的だからね
>>96 なるほど…それは妙案ですね
ベストは97さんの言うように、なんとかURLを変更することですが、
別ウィンドウを使ったりしない限り無理そうですね…
別窓を作ってそこに自分の内容をそっくりコピーして放り込み、 ページ遷移してその冒頭で別窓があればその別窓からそっくり 持って来て終わるようにするとか。ただし、最初からページ 内容をほとんどJavaScriptで生成するように書く必要があるな。
>>101 別ウィンドウがが見えなければ完璧なのですが、それは出来ませんよね。
内容をほとんどJavaScriptでやるのは問題ありません。
ちなみにチラシの裏ですが、documentが違うとelementの移動等は出来ません
>>102 それはこのスレでガイシュツで、elementは移動できないので全部innerHTML
にしてどっかんと移すという荒技をやるという…
104 :
Name_Not_Found :2006/10/27(金) 11:40:30 ID:CmYtaVPN
えっと、よくわかんないんでお願いします。 インターネットがクラスだとして、インスタンスが「2ch」なら、 インターネットのプロトタイプは何ですか?
って、インスタンスが「2ch」っておかしい様な。 インスタンスはプロバイダあたりでいんじゃないの。
>>104 なんでクラス方式とプロトタイプ方式が混ざっているのさ。
>>102 >ちなみにチラシの裏ですが、documentが違うとelementの移動等は出来ません
本題と関係ない話にレスするのもあれだが、何を言っているのかね。
移動も出来るし、Node#importNode() でコピーもできる。
>>104 そういうわけのわからんオブジェクト指向はPerlスレでやってくれよ。
109 :
Name_Not_Found :2006/10/27(金) 15:20:27 ID:63qNFSgF
質問です。 JavaScriptでオブジェクトを日付型に変えるにはどういう操作をすればよいのでしょうか?
>>108 オブジェクト指向じゃなくてプロトタイプ指向だろ。文句言う代わりに
一言答えてやればいいじゃん。当人は分からなくて質問してるんだから。
>>109 var obj = new Object();
obj = new Date();
114 :
109 :2006/10/27(金) 18:23:41 ID:???
>>112 さん ありがとうございました。
それでやってたんですが、場所が悪かったみたいですorz
115 :
Name_Not_Found :2006/10/27(金) 19:27:42 ID:lw83x0CO
DOM や オブジェクト指向に詳しい JavaScript の本ってどんなのがありますか?
>>115 JavaScriptだけでできることというのは、そのブラウザ上だけで
動くようなものだからね。アンタと彼女が同じパソコンのキーボード
を交互に打つようなチャットならできるけどそういうのが作りたい?
>>117 サイ本かMy UNIXだろ、何回もガイシュツだけど。役に立つ書籍スレ
へ逝って見れば。
>>115 確かJavaScriptはセキュリティーか何かでファイルへの書き込みは不可能(独自拡張は例外)だったと思う。
つまり、橋渡しが出来ない。JavaScriptエンジン→別のマシンのJavaScriptエンジンの通信も確か出来ないし。
Ajaxって呼ばれているものもサーバで何か動いているから出来る訳だし。
もちろん、クライアントをJavaScriptで組むのは可能(やってる所あるし)。
結論として、「JavaScriptだけで」は現時点では無理。
なんて論理的なんだろう
121 :
Name_Not_Found :2006/10/28(土) 17:39:22 ID:iKdzUyPZ
質問です、よろしくおねがいします 画像をマウスオーバーさせると、指定した文字列の色を変える方法を知りたいです ■■■■ ■画像■ ←マウスオーバーすると ■■■■ 指定した文字列 ←この文字列だけの色が変わる JavaScriptは難しいですね。他の方のスクリプトを閲覧してそれを理解するのは何とかできるのですが、 自分でスクリプトを書くとなると、どうにもこうにも、どうしようも出来ない…
どうしようもないなら、あきらめたほうがいいよ。
<script type="text/javascript"> function add(){ var li = document.createElement("li"), txt = document.getElementById("txt"); li.appendChild(document.createTextNode(txt.value)); document.getElementById("log").insertAdjacentElement('AfterBegin',li); txt.value = "";txt.focus(); } </script> <form action="#" onsubmit="return false"> <input type="text" id="txt" size="48" value="" /> <input type="submit" value="送信" onclick="add()" /> </form> <ul id="log"></ul>
フレームに関する質問です、お願いします。(初心者) index.htmlで上下分割フレームを2つ開いています。(上がtb、下がd) tbフレームとindex.htmlは同じ鯖でdフレームは別鯖です。 tbフレームのリンクをクリックするとtbフレームを閉じ、dフレームで現在開いているページ を表示するようにしたいのですが、どのようにすれば良いのでしょう?
126 :
115 :2006/10/28(土) 21:05:12 ID:pXtM+sBi
>>118 ,119
早速のご回答有難う御座いました。
javascriptという物を正確に理解していないので
私の質問の仕方が悪かったようです。
115で貼ったリンク先のように、文字を動かしたり
出来るようなチャットを作る事はかなり難しいのでしょうか?
ここのチャットもタイムリーに自動更新されないところを
見るとcgiチャットと変わらない気もしたのですが、画面上で
文字を上下左右に動かしたりという小細工が出来るようなものを
自分のHPに設置したいと思いまして。。。
自作にこだわっている訳ではないので(自信もありません)何処か
でこのようなチャットをレンタル(もしくはスクリプトの配布)
しているところがあれば素直にそれを利用したいのですが。
結果的にスレ違いになってしまっているかもしれませんが
よろしかったらアドバイスをお願い致します。
>>127 kitty-guy wo aite ni suru na!
>>126 文字を動かしたりはできるけどサーバに保存できないよ。
だから複数のマシンで情報を交換するチャットは不可能。
あのサンプルは相手方の応答をその場でランダムにでっち
あげているだけだからどこにも保存しない。
>>128 getElementByIdがポイントですね。覚えます。
ありがとうございました。
132 :
Name_Not_Found :2006/10/29(日) 00:24:57 ID:dY06jQVU
<HTML> <HEAD><SCRIPT> function f(x) { x.style="display:none"; } </SCRIPT></HEAD> <BODY> <P onDblClick='f(this)'>paragraph 1 <P onDblClick='f(this)'>paragraph 2 <P onDblClick='f(this)'>paragraph 3 ダブルクリックすると消えてしまう要素(上の例ではP要素)を作り たいのですが可能でしょうか? 上のソースではうまくいきません。
x.style.display="none";
134 :
132 :2006/10/29(日) 00:31:44 ID:???
>>127 >>129 あんたらがパールやらルビーやらスキーマやらで書く部分をjavascriptで書いてやればjavascriptだけでできるだろーが
(;;^ω^)
>>135 質問者の立場で考えたらかなり不親切なアドバイスだよな。
あんたは誰にそれを主張したいんだ?
んなこたぁー誰だって分かってんだよ。
具体的にそれをどうやって実装すんだよ。めんどくせーだろーが。
普通に役立つこと言えや!事実なんてどーでもいーんだよ。
これだからセオリストは嫌いなんだよ。アホばっか。
>>137 まーあんたには一生かかっても解らないだろうな
エンジョイだよ、エンジョイ
これだから余裕ない奴は嫌いなんだよ。
(;;^ω^)
まさかログを全部クッキーに…
>>135 サーバサイドのJavaScriptエンジンがあれば
>>139 が言うみたいにcookieにログ書き込んで、
その実体にあたるファイルをサーバの公開されてるディレクトリ内にcookie.txtとして保存する実装なら、
それをAjaxとほぼ同じ手法で読み込んで出来るはず。
という訳で、サーバサイドJavaScriptエンジン(JavaScript1.7)を
>>135 がサラッと作れば解決。
実現すれば結構便利かも。
cookie に log 記録だぁ ? なんと言う不毛な議論を !!! ここが本スレだぁ ? へそが茶を沸かすわ !
>>140 最近ではサーバに保存したデータもcookieって呼ぶのか?
てかすでにJavaScriptの範疇じゃねーだろw 普通にサーバーサイド使ったほうが早い
>>135 「JavaScriptだけで」 = 「クライアントだけで」
>>121 の質問ってさ、もしかして<a><img><br>テキスト</a>でCSSでいいんじゃねーの?
画像のすぐ下に文字あるんなら a:hover とかで設定したほうがイイよ
>>121
146 :
Name_Not_Found :2006/10/29(日) 17:00:04 ID:7X66k1Mh
>>146 普通に考えて両方組み合わせるような改造が必要だと思われ。
勉強するなら質問は歓迎するよ。全部書いてくれとかなら断るけど。
教えてください。フレーム内に読み込んだ他サイトのページに “ステータスバーを流れるメッセージ”のスクリプトがあり、それが 親フレームのステータスバーに作用してしまって困っています。 これを止める手立てはありますでしょうか? ソースを見ると 以下のような記述がありました。 stcnt=0; msg="ほにゃらら " blnk = " " str=blnk+blnk+blnk+msg; timeID=10; function scroller(){ status=str.substring(stcnt++,str.length+1); if (stcnt>str.length) stcnt=0; clearTimeout(timeID);timeID = setTimeout("scroller()",100);} 他サイトをフレーム内に読み込んでいるのは先方も了解済みで、 同好サイトのリンク集みたいなことをやっています。
test1.style.backgroundColor = "#ffffff"; test2.style.backgroundColor = "#ffffff"; test3.style.backgroundColor = "#ffffff"; これを簡単にしようと思い、ウェブを参考に for ( i = 1 ; i < 4 ; i++ ) ["test"+i].style.backgroundColor = "#ffffff"; と記述してみたのですが、 styleはNullまたはオブジェクトではありません。 とエラーが出てしまいました。 一行目から三行目までをまとめた構文にするにはどうすれば良いのでしょうか。
for ( i = 1 ; i < 4 ; i++ ) window["test"+i].style.backgroundColor = "#ffffff";
152 :
Name_Not_Found :2006/10/30(月) 00:41:17 ID:hsJikv4k
>>151 ありがとうございます。無事出来ました。
155 :
152 :2006/10/30(月) 01:43:28 ID:hsJikv4k
>>154 Enterキーを押したとき、TABキーを押したことにしたいのです。
具体的には、Enterを押したときにTABと同じように次の入力フィールドに
フォーカスを当てたいのですが
156 :
Name_Not_Found :2006/10/30(月) 02:14:45 ID:EF7xbHF2
YouTubeの動画を、JSで動的に埋め込みたいのですが、innerHTMLでもDOMでもうまくいきません。
静的なHTMLを埋め込めばもちろん普通に表示できるのですが、AJAXと連動したものを作っているので、できればJSで操作して埋め込みたいのです。
・innerHTMLの場合
targetDiv.innerHTML = '<object 〜><param 〜></param><param 〜></param><embed 〜></embed></object>';
// YouTubeのサイトのEmbedというところに書いてあるHTMLのvideo_idとwidthとheightだけ変更したもの
・DOMの場合
var object = document.createElement('OBJECT');
object.width = width; object.height = height;
var param1 = document.createElement('PARAM');
param1.name = 'movie'; param1.value = '
http://www.youtube.com/v/ ' + videoId;
// 似たようなcreateElementの処理で、上記HTMLと同じ構造を作る
object.appendChild(param1);
object.appendChild(param2);
object.appendChild(embed);
targetDiv.appendChild(object);
処理前と処理後のinnerHTMLを見てみましたが、<object>タグがまったく追加されていません。
何か良い方法がありましたら、よろしくお願いします。
(今のところIE6で実験しています。後々時間が許せばFireFox等にも対応したいと考えています)
157 :
156 :2006/10/30(月) 02:26:05 ID:EF7xbHF2
できるかぎり直接objectタグを埋め込みたいのですが、代替案としてiframeを使う方法も考えています。
targetDiv.innerHTML = '<iframe src="
http://www.youtube.com/v/ ' + videoId + '" width=・・・ />'
といった感じです。
これならまあまあうまくいくのですが、どうしてもiframeの「枠」が出てきてしまいます。
たしか、この枠は
iframe.contentWindow.document.body.style.border = 'none';
みたいに消すしかなかったと思うのですが、如何せんiframeのsrcがswfファイルなので、「アクセスが拒否されました」とか訳のわからないことを言われてしまいます。
iframeのsrcに自分のサイトのHTMLを指定して、そのHTML内にobjectタグを書く方法もやってみましたが、どうもうまくいかない部分が出てきてしまいます。
bodyのmarginをゼロにしてborderをnoneにした上で、objectのwidthとheightに100%を指定しているのに、なぜかembedに妙な余白ができてしまい、(他との兼ね合いで)レイアウトに食い違いがでてきてしまいます。
なんとか上手くいく方法はないものでしょうか・・・?
長文失礼しました。
()で括った文字以外の文字を数えることってできますか?
>>158 str.replace(/\([^\)]*\)/g, '').length()
試してないけど。
あざ〜す
html内で変数を共有化することは出来ないのでしょうか? こういう感じです↓ 一度閉じるとダメなのでしょうか? <script type="text/javascript"> b = "Hello World" ; </script> <script type="text/javascript"> document.write(b) ; </script>
>>161 同じ文書内でその順番で書かれていれば
当然意図したとおりにできるはずだが?
あれ、まとめサイトって最近の過去ログとかなかったっけ?
「過去スレ全集」へ逝け。
165 :
Name_Not_Found :2006/10/30(月) 20:32:21 ID:M4X0bzKT
166 :
Name_Not_Found :2006/10/30(月) 20:43:51 ID:c50N9/Oa
画像を一覧表示してあるアルバムのページで、ウィンドウサイズに応じて innerHTMLで動的にソースの画像を変えようと思ったのですが、どこから 手をつけていいかわかりません。 お助けおねがいします。
説明してあげようと思ったのですが、どこから 教えてあげればいいかわかりません。 お手上げです。
168 :
Name_Not_Found :2006/10/30(月) 22:03:35 ID:tQ5XQETF
IE5.0/5.5/6.0 のjavascriptの違いをまとめたサイトってない? いきなり5.0で動かないっていわれたんだけど、そんなもん持ってねぇよw
>>168 VMware がフリーになったから
そこに 98SE か 2000 を入れる
もしくは
スタンドアローン版の IE がどこかに落ちてる
>>170-172 thx!
自分で入れてやってみるしかないみたいね
よく覚えてないけど、
<a href="#" onClick="foo();">...</a>
foo() {
form.submit();
}
くらいの簡単なものだったような希ガス
明日いろいろやってみるわ
175 :
Name_Not_Found :2006/10/30(月) 23:31:39 ID:Jfof7G3e
<script type="text/javascript"><!-- document.write(aaa); ... src="test.js" ... </script> のように、外部ファイルをincludeする方法はありますでしょうか?
176 :
146 :2006/10/30(月) 23:31:57 ID:???
>>148 さん
なぜ両方組み合わせるような改造が必要なのかも
理解できてない初心者ですが勉強しますのでお願いします!
>>176 洩れもソースは読んでないんだけど、タブで前面に出ているものに
対してのみビュアが動作するということは、ビュアが動作を張り付ける
時に探す対象が前面に出ているものだけになってしまってるということでしょ。
だから前面に出ていないものに対しても同様の処理が行えるようにするという
ことじゃないの。
まあ、ちゃんとソース読んで検討しなよ。読めないなら読めるようになる
まで自力で勉強してね。入門書なんかもあるしさ。
179 :
175 :2006/10/31(火) 00:09:01 ID:???
>177 ありがとう!
180 :
156 :2006/10/31(火) 00:20:35 ID:???
レスどうもです。
>>169 コピペするだけというのは、YouTubeのビデオの右側にあるEmbedという欄の<object 〜>タグのことでしょうか?
たしかにHTMLファイルにそのままコピペすればビデオを表示できるのですが、できればページのロード後にユーザーからの操作を通じてJavaScriptで動的に埋め込みたいと考えています。
>>173 すみません、<P>とか<DIV>というのは何のことでしょうか?
いちおう自分の用意した<div id="targetDiv">の中にJavaScriptで埋め込もうとしています。
(156-157で書いた文章は長文な上にわかりづらくて、すみません)
そのまま素直にinnerHTMLに、YouTubeのサイトで表示される埋め込み用のobjectタグをコピペしたものを文字列として代入しても、なぜかその結果が反映されないのです。
もしさらに良い知恵があったら、よろしくお願いします。
>>180 色々確認してみたいんだけど、
if (document.all) {
document.getElementById('targetDIV').innerHTML = '<embed src="
http://www.youtube.com/v/1Fp870UGG7s " type="application/x-shockwave-flash" width="425" height="350"></embed>';
}
else {
document.getElementById('targetDIV').innerHTML = '<object width="425" height="350"><param name="movie" value="
http://www.youtube.com/v/1Fp870UGG7s "></param></object>';
}
は動く?
読み込む外部jsを変数によって変えたいのです。 <script type="text/javascript"> <!-- if (flag == "a") { <script type="text/javascript" src="a.js"></script> } else if ( flag == b ) { <script type="text/javascript" src="b.js"></script> } 上のようなことをするにはどうすればいいのでしょうか?
この質問多すぎるからFAQに入れるかね?そしたら罵倒すれば済むし(w
185 :
156 :2006/10/31(火) 09:51:44 ID:???
>>181 なんと!できました!
IEではobjectを使わずに、embedでやるとできるのですね。勉強になりました。
Firefoxでは上下どちらとも動かないようですが、また後ほど色々考えてみようと思います。
どうもありがとうございました!!
...innerHTML = '<div ...>' + ( YouTube Embed をコピーペーストするだけ ) + '<\/div>'; で、どちらもできるだろうに……。
TEST_WINDOW = window.open("test.html" ,"testwin","width=210,height=160,resizable=no") で開いたウィンドウの中身が全部読み込まれた時のイベントはどう記述すれば良いのでしょうか。 TEST_WINDOW.onload()では駄目でした。 出来ればIE6に対応した形式でお願いします。
>>187 TEST_WINDOW.onload = function() { 動作…; } ;
JavaScriptの文法を勉強しろボケ!
>>188 ありがとう。ごめんなさい。
改変は出来ても真っ向から学習する時間が取れんので。。。
>>188 文法的にはそれでいいけど、それでは動かないような気が・・・
そうだな。過去にも何度か出てきたが、IE6 なら、attachEvent を使う。 もっと言えば、最初はURI引数を空にして、イベント処理を与えてから、 TEST_WINDOW.location.href = "..."; でロードさせた方が確実だろうな。 というか、別窓を開くの、かったるくないか? もうすぐ2007年だぞ。<IFRAME>が登場して10年近い。 どうしても別文書を開きたいなら、<IFRAME>でいいんじゃないか? (<IFRAME>要素オブジェクト).onload = function () {...} みたいな書き方なら、期待通りに実行されるだろ。
javascriptでCGIからの戻り値を得ることはできますか? 背景 大容量ファイルをアップロードし処理するサービスを作りたい。 サーバはファイル名により処理をするかどうかの判断をする。 大容量ファイルをフォームからアップロードしてからサーバで「ファイル名により処理しない」と判断される場合、転送時間が非常に無駄です。 そこで、フォームのサブミットボタンを押しアップロードが始まる前に、javascriptでファイル名だけ取得し、サーバ側に問い合わせ、処理しないのであればアップロードをしないといった操作を行いたい。 ファイル名により処理するかどうか判断するcgiは既にあるものとします。
なんだか偉そうな文体になってしまい失礼しました。 どなたかご教授お願いいたします。
>>193 > javascriptでファイル名だけ取得し
この部分はブラウザの実装依存じゃないかしら
199 :
193 :2006/10/31(火) 19:35:48 ID:???
>>195 方法を教えていただけないでしょうか。
>>196 失礼いたしました。ご教示お願いしますm(__)m
>>197 対象はIEのみなのでOKです
>>199 に教授すると
html
<script>
function f(){
var xhr=null;
if (window.XMLHttpRequest)xhr=new XMLHttpRequest();
else if(window.ActiveXObject)
try {xhr=new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){xhr=new ActiveXObject("Microsoft.XMLHTTP");}
xhr.open("GET","
http://hogehoge.com/tmp.cgi? "+document.getElementById('f').value.replace(/^.*[\/\\]/,""),false);xhr.send("");
if(xhr.responseText=="t"){alert("up");}else{alert("not up");}
}
</script>
<input type="file" id="f"/><button onclick="f()">!</button>
cgi
#!/bin/sh
FN=`env | grep QUERY_STRING | sed 's/[^=]*=//'`
echo "Content-type:text/html
"
if [ $FN = hoge ] ; then
echo -n t
else
echo -n f
fi
202 :
193 :2006/10/31(火) 22:40:59 ID:???
>>200 遅くなりましたが、ありがとうございます!
これからちょっとやってみたいと思います。
>>201 えっと・・・、低レベルな私にはちょっと難しくてよく分かりませんが、
メモしておきます!
何か問題が起これば参考にさせていただきます。
ありがとうございます。
>>202 >>201 は低脳のデシャバリなだけなので気にしないほうが吉
2個目のリンクだけはちょっとだけ役立つけど
204 :
Name_Not_Found :2006/10/31(火) 23:38:09 ID:QQwuJrHr
台形公式による円周率の近似値の計算(分割数は1000)を完成させなさい, という問題を教えていただけませんか?
205 :
193 :2006/11/01(水) 00:11:13 ID:???
>>200 様
無事やりたいことができました。
私の頭では最初「これは何の処理だろう?」と思っていましたが
ファイル名だけを取り出すところまでやってくださり
本当にありがとうございました!
>>204 javascript:for(a=0,x=0;x<1000-1;(a+=(Math.sqrt(1000*1000-x*x)+Math.sqrt(1000*1000-(x+1)*(x+1)))/2),++x);alert(a*4/(1000*1000));
というブックマークレット
間違えた。 for(a=0,x=0;x<1000;(a+=(Math.sqrt(1000*1000-x*x)+Math.sqrt(1000*1000-(x+1)*(x+1)))/2),++x);alert(a*4/(1000*1000)); でいいのか
208 :
Name_Not_Found :2006/11/01(水) 09:11:01 ID:5iKQ/IIq
<span id=a><span id=b onClick=f()></span></span> <script> function f(){ alert(?????????) // 1つ外のタグという命令でaを取得し表示できませんか? } </script>
汚いHTML書く奴だな this.parentNode.id
211 :
Name_Not_Found :2006/11/01(水) 10:08:10 ID:ZJU7qN9t
JSってWebProg板じゃないの?そろそろ移動したら?
>>211 WebProg板のローカルルール
「* JavaScript、VBScript等クライアントサイドの話題はWeb製作板へ」
これを直す気があるなら頑張ってね。
そういうふざけた記事を見ると、著者に仕様書よめ、と言ってしまいたい prototypeプロパティのコピー って意味不明すぎてなんともコメントつけようがありません
javascriptで、selectタグ中のoption項目の数を増減させるにはどうすればいいですか?
動的にoptionエレメントを生成してselectエレメントの子要素にすればいい
>>215 Optionコンストラクタっていうものがある。
>>216-217 new option()でoptionオブジェクトが作れるんですね〜!
念入りに調べてみたらちゃんと解説してるサイトが見つかりました。
ありがとうございました〜。
自分で調べたのは実に偉い
>>213 最近,Webプログラミングの世界で静かなブームになっている言語があり
ます。何を隠そうJavaScriptです。
だとさw このあたりから中身を見抜いたほうがいい。
しかし、NIKKEIのサイトはイラつく。高が一度の閲覧のためにバカでかい
flashと重い画像をしこたまキャッシュに入れられてページがでるのに
10分くらいかかる。もう二度とご免だ。行かない。
>>218 たしか、new Optionは廃止になるんじゃなかったか?
10分てwどんだけ細い回線使ってんだよ
var hoge; if (!hoge = false) { alert('hoge is not false.'); } ↑は構文エラーになるのですが、JavaScriptの仕様はそういうもんでしょうか? Cでもこういう書き方はエラーになりますか?PHPだと大丈夫なんですが。
==
>>223 そういう意味ではなくて、代入した値に対して反転評価してます。
意図としては、つまり、
if (!false) {
}
と同義です。
(hoge is not false.と書いたのはなんか意味が変なので、気にしないで下さい)
>>223 Cでも構文エラー。
PHPは特別な構文として許しているだけ。
「左辺値」でぐぐれ。
というかECMAScriptの仕様書漁れ。
if(!(hoge = false))
問題があってここに来ましたが、 過去ログを調べて解決できました。 このスレの神々と住人に感謝、です。
いろいろと調べていましたが、検索に限界を感じてしまったので、 どうか質問させてください。 function output(num){ switch(num){ case 1: n = (jumpArray[1][document.form.jump1_1.selectedIndex]+jumpArray[1][document.form.jump1_2.selectedIndex]); if(document.form.seq1.checked == true && document.form.mul1.checked == true) { n = n * 88 / 10000; document.form.point1.value = n; break;} case 2: n = (jumpArray[1][document.form.jump2_1.selectedIndex]+jumpArray[1][document.form.jump2_2.selectedIndex]); if(document.form.seq2.checked == true && document.form.mul2.checked == true) { n = n * 88 / 10000; document.form.point2.value = n; break;} } 以上のように全く同じ処理を、場所のみ変えて行うのですが、 現在はswitch文を使って、onClickイベントから数字だけを返して分岐させています。 ただこれが延々と30くらい続く予定でして、さすがにそれは大き過ぎると感じ、 この処理を分岐させずに、すっきりと行える方法はないか、と考えています。 フォームの名前は数字だけを変えて統一させているので、 これを使って何か良い方法はありませんでしょうか? どのように検索すればよいかわからなくなってしまったので、 こちらに質問させて頂きました。 スレ汚し、本当に申し訳ありませんが、何卒お願いいたします・・・
232 :
Name_Not_Found :2006/11/02(木) 19:17:42 ID:3N+shCWj
勉強をかねてGETをパースするスクリプトを書いてるんですが。 idx[id[0]] = id[1]; のように配列のキー(?)に変数を指定する方法が分かりません。 それともこのスクリプトにはほかの問題があるんでしょうか? 秀丸で書いて、IEで表示させてるだけなのでデバッグにてこずっています。 -------------------以下ソース----------- arr = location.search.substr(1).split("&"); idx = new Array(2); for(i in arr){ echo(i + ":"); echo(arr[i] + "<br>"); id = arr[i].split("="); echo("!" + id[0] + ":" + id[1]); idx[id[0]] = id[1]; } echo("safe"); echo("!" + idx[test1]);
>>232 そのtest1というのは何? 'test1' じゃなくて?
234 :
232 :2006/11/02(木) 19:35:16 ID:3N+shCWj
>233 ありがとうございました。 俺だめじゃん・・ orz
235 :
232 :2006/11/02(木) 19:39:30 ID:3N+shCWj
ついでに聞いてよろしいでしょうか? idx[id[0]] = id[1]; ではなく id[0]内の文字列で変数を作って、 id[1] を代入する方法がありましたらお願いいたします。 GETが test1=1 だとしたら。 document.write(test1); で 1 が表示されるといった感じにしたいのです。
eval すればいんじゃね?
>>235 それはやらない方がいいよ! 重要な変数「x」があったとして
「?x=0」とかつけられたトタンにそのxが書き換えられてしまうだろ。
PHPとかでそういうのが問題になったことがあるんだよな。
>>239 その無理解・混乱ぶりの方がこええよwww
>>231 遅くなってすみません。
FAQは読んだつもりではいましたが、
よく見ると似たような質問がありました。
ご指摘、ありがとうございます。
しかし・・・こちらの問題に適用しようとしたのですが、
どうもうまくいきません・・・
そのままではダメなのでしょうか。
もちろん、理解してちゃんと使えばできるだろ。 理解できないのなら自力で勉強すれ。
243 :
Name_Not_Found :2006/11/02(木) 21:49:38 ID:4jAW24LM
Dateオブジェクトを使って桁数補正ができるのはどういう理屈ですか?
つ sprintf
あ、ここJavaScriptのスレだった
>>242 あなたの叱咤のおかげで、自力で解決にこぎつけました。
いや、自力といっても結局は過去の回答のおかげです。
function output(num){
switch(num){
default:
n = (jumpArray[1][document.form["jump"+num+"_1"].selectedIndex]
+jumpArray[1][document.form["jump"+num+"_2"].selectedIndex]);
このような感じにしたら、どの列でも処理をしてくれるようになりました。
ただ、switch文は必要がないはずなのに、
これをはずすと動きません・・・
最初からdefaultにすれば動くので、問題がないといえばないのですが、
気になるところではあります・・・
何にせよ、ご誘導とご叱咤、本当にありがとうございました。
×ご叱咤 ○叱咤 美しい日本の美しい日本語では「ご叱咤」とは言わない。 「叱咤激励」参照。「ご激励」と言わないのと同じ。
>>248 迷いましたが、つけてしまいました・・・
ご指摘、ありがとうございます。
・・・この「ご」はOKですよね。
251 :
Name_Not_Found :2006/11/03(金) 20:52:58 ID:5Ec3jjaU
IE7に変えてから2ちぁんねるブラウザ(かちゅーしゃ)でランタイムエラーが出るようになった。 一行目で文字が正しくありません、っていうもの。 不思議なのはhoge.htmlとしてローカルでIEで読み込ませると正常。 問題のスクリプトは外部スクリプトで読み込ませているんだけど、これを外部でなく 普通(内部)に記述すると正常に動作する。 外部スクリプトを複数記述しているので、IE7になって、外部スクリプトの読込数とか バッファに制限ができたのだろうか? なにかヒントはないでしょうか。
ヒント:板違い
ヒント:IE6
一行目で文字が正しくありません
var tmpAtagObj = document.createElement("A"); var tmpString = document.createTextNode("New Document"); tmpAtagObj.appendChild(tmpString); tmpAtagObj.href = "#"; こんな感じでオブジェクトどこかのHTMLに突っ込んだ場合 ダブルクリックされた時にhogeという関数を動かしたいのですが tmpAtagObj.ondblclick = "hoge()"; じゃ無理でした ダブルクリックされた時動かすにはどうすればいいのでしょうか?
256 :
255 :2006/11/04(土) 11:10:25 ID:???
すいません自己解決しました・・・
257 :
255 :2006/11/04(土) 14:32:33 ID:???
やっぱり解決してませんでした。
259 :
255 :2006/11/04(土) 14:58:37 ID:???
クズと言う奴がクズです。
260 :
Name_Not_Found :2006/11/04(土) 15:02:34 ID:hd7d6HKw
>>251 です w
いやね、その外部ファイルに var a; とかwindow.alert(1); とか単純なコードだけ書いても
同じなんだよね。スクリプトエラーなら直せばいいんだけどさ w
いや、まいったまいった。
262 :
Name_Not_Found :2006/11/04(土) 16:16:39 ID:QQPq62PT
BMIの計算を作りたいんですが画面に何も表示されません。どこが間違ってますか? function bmi(){ var taijyu=61; // kg var shincyou=1.75; // m var kekka=Math.round(taijyu / (shincyou*shincyou) );//四捨五入 var hyouka; if(kekka<18){hyouka="やせ";} else if(kekka<25){hyouka="標準";} else{hyouka="肥満"} document.write("あなたのBMI指数は、"+kekkka+"です。 <br>体系の評価は、\""+hyouka+"\"です。"); } 【html】 <html> <head> <title>BMI計算</title> <Meta http-equiv="content-script-type" content="text/javascript"> <script src="javascript1.js" type="text/javascript"></script> </head> <body onload="bmi()"> </body> </html
試してないが <body> <script type="text/javascript">bmi();</script> </body>
>>259 FAQ読まない奴のがクズに決まってるさ。2度と来るな。
266 :
Name_Not_Found :2006/11/04(土) 23:29:49 ID:R9NdBAoW
htmlとcss勉強してきたんだけどjavascriptってかなりムずくね? とりあえず自分で名前つけられるのが変数なのか?
>>266 エラーの分かりやすいPHPとかjavaとかの基礎をやってから戻ってくると逆に近道かもね。
プログラムっぽいのが初めてなら。
JavaScriptは癖あるよ。ブラウザ依存とか変なとこでひっかかったりする。
でも美しい言語の一つでもある。
確かにJSは美しい、いまだにPerlとかPHPの変数に$付ける仕様に慣れない・・・
付いてないとどれが変数でどれが構文でどれが関数か分かりづらいんだよ
JavaScript美しいかぁ。 実際利用するにはHTMLと組み合わせないといけないからな。。
JavaScriptっていうかECMAScriptの美しさは、クロージャや無名関数、関数オブジェクト、みたいな関数型言語由来の機能を残しつつ、ナチュラルな構文で書けることかなーとか思う。 なじみやすい中置記法とか、ドットによるオブジェクトのメンバアクセスとか、C由来の構文とか。 メソッドのレシーバ(this)が動的に変化するポリモーフィズムは、強力すぎてやや複雑すぎる感じもあるけど、個人的には好みだな。 もちろん細かい不満はたくさんあるけど、根底にあるモデルがすごくしっかりしていると思う。 欠点としてはモジュール化・パッケージ化がしづらい、書き方に個人個人の癖が露骨に出る、ブラウザに乗っかったJSのオブジェクトモデルは何だか知らんがグジャグジャ、などなど。 実用性の面では最悪レベルの言語かもしれん。 まあ要はオナニー言語ってことだな。
だいたい同意。
JavaScript に慣れてしまうと他の script 言語がキモく思えてしまう. たとえば AppleScript も OOP の仲間だけど激しくキモい. perl に至ってはじんましんがぁ〜〜〜〜. でも, 場合によっては使わざるを得ないのが鬱だぁ.
変数に$がついてないと書けないなんて、スクリプト言語「しか」 書けないヤツということになるわけだが…
以下のソースのようにスクロールを作った <html> <head> <title> Javascriptスクロール </title> <script language=Javascript> <!-- msg="文章"; function scroll(){ msg=msg.substring(1,msg.length)+msg.substring(0,1); document.myform.mytext.value=msg; setTimeout("scroll()",300); } //--> </script> </head> <body onload=scroll();> <form name=myform><input size=60 name=mytext></form> </body></html> 同ページに別文章で同じようなスクロールをもう一個作るにはどうすればよいのでしょうか
>>255 tmpAtagObj.ondblclick = hoge;
>>262 onloadにdocument.writeを書いても反映されないよ。
もしonloadに入れたいんだったら
document.getElementById("bmitext").innerHTML = "結果文字列";
とかやって、<body>〜</body>内に
<div id="bmitext"></div>
とか入れるといいんじゃない?
すいません、質問よろしいでしょうか? 表示するページをJSPで生成してtableを表示する際 classファイルの方でSQLを流し、tableに表示するデータを取得しています。 tableの一列目にチェックボックスがあり、ページの中のボタンを押すと チェックされた行の別の列のvalue(bool)を見て、正しい行のみ classファイルへ飛ばそうとしています。 チェックボックスのon/offをチェックし、 同じ行の他の値を調べるJavaScriptの記述方法を教えて頂けないでしょうか よろしくお願い致します。
281 :
266 :2006/11/05(日) 21:33:37 ID:2yd5nNuL
function question(){ alert('これからいくつか質問します。'); name=prompt('あなたの名前は?','中田ヒデ'); eat=prompt('好きな食べ物は?','うめぼし'); sport=prompt('好きなスポーツは何ですか?','サッカー'); if(confirm(Jリーグは好きですか?)){j='好き';} else{j='嫌い';} alert(name'さん、あなたは、'+eat+'が好きですね。スポーツは'+sport+'が好きですね。\n Jリーグは'+j+'ですね。'
282 :
266 :2006/11/05(日) 21:39:31 ID:2yd5nNuL
↑すいません! がんばってjavascriptを勉強しようと思ってるのですがつまづいた・・。 上の函数を作ってみたんですが全然作動しません。 一番最後のalert(name〜);のとこを入れないとダイアログなどが出て正常に動作します。 なので、この部分がエラーだと思うんですが、どこがおかしいんですか? alert(aa);みたくシンプルにやっても駄目でした。ヒヨッコに力を貸してください!
>>282 「(」と同じ数だけ「)」が必要だとか文字列の途中で行変えちゃ
いけないとか。エラーのときは「何行目の何文字目でエラーか」
出るんで、それを見て自分で直せるようになるべきだな。
<script type="text/javascript"> <!-- function question(){ alert('これからいくつか質問します。'); var name=prompt('あなたの名前は?','中田ヒデ'),eat=prompt('好きな食べ物は?','うめぼし'),sport=prompt('好きなスポーツは何ですか?','サッカー'),j=confirm('Jリーグは好きですか?')?'好き':'嫌い'; alert((name?name+'さん、\n':'')+(eat?'あなたは、'+eat+'が好きですね。\n':'')+(sport?'スポーツは'+sport+'が好きですね。\n':'')+(j?'Jリーグは'+j+'ですね。\n':'')); } // --> </script> <input type="button" value="問い" onclick="question()">
>>280 ハア? 正しいとかチェックするとか喪前の脳内にしかない
定義だらけでまったく内容が理解できないよな。
>>1 「質問を分かる日本語で説明できる者 」
289 :
Name_Not_Found :2006/11/06(月) 00:36:55 ID:066RjT9g
きんもー☆
290 :
Name_Not_Found :2006/11/06(月) 15:11:56 ID:db0xree1
>>284 >エラーのときは「何行目の何文字目でエラーか」 出るんで
どこに出るの?
>>290 テンプレを嫁。ブラウザをそのように設定するか
警告の「!」アイコンをクリックする。
292 :
Name_Not_Found :2006/11/06(月) 15:38:03 ID:066RjT9g
嫁だってプププきんもー☆
別に煽ったっていいけど何も出ないよ。まあがんばって虫取りしたまへ。
Javascriptにバイナリデータを吐かせて、それをブラウザに画像データとして解釈させることってできますか? <img src="img.js">みたいなことを考えているんですが。 画像としてのコンテントタイプが送れなそうだし無理ですかねえ
295 :
Name_Not_Found :2006/11/06(月) 16:18:36 ID:066RjT9g
>>294 mime type を送るのは鯖のお仕事
297 :
Name_Not_Found :2006/11/06(月) 18:32:46 ID:qJQq6gTf
javascriptの勉強をはじめました。 どうでもいい疑問なのですが、なぜjavascriptの変数やfunction名は大文字と小文字が入り混じっているのですか? また、大文字を使う場合の規則性などあるのでしょうか?
>>297 You is a big fool manという変数を作りたいときに単語の頭を大文字にして
youIsABigFoolManと表す
>>297 "camel casing"でググると吉。
規則は
>>298 の言うとおりで、その大文字がラクダのコブを
連想させるところから命名された。
301 :
Name_Not_Found :2006/11/06(月) 20:07:58 ID:qJQq6gTf
>298,300 camel casing参考になりました。ありがとうございます。 javascriptの命名規則はcamel casingが基本ということでOKでしょうか。 もう少しググってみます。
302 :
Name_Not_Found :2006/11/06(月) 21:24:29 ID:LOA4ezJF
javascriptのエラーが出るブラウザの設定ってどうやんの?ムズいの? 誰か暇人の教えたがり君設定方法を書いてくれ
camel casing は読みづらいのでうちはラクダ本派だけどアンダースコア派。
Javascriptは書くが、Java厨ではないのでアンダースコア派。 もしくは全部小文字で日が経つとなんだかわからなくなる派。
306 :
Name_Not_Found :2006/11/06(月) 21:58:01 ID:LOA4ezJF
>>306 インターネットオプションの詳細設定を総なめしてみれ
>>306 まず、絶対にエラーを起こすようなスクリプト(関数閉じてないとか)を含むHTMLを読ませたら、左下に黄色いマークが出るはずだから、それをダブルクリックする。
で、「ページにエラーがあるときは、このメッセージをいつも表示する」にチェック。あと、「詳細を表示」にしておく。
まさか釣りじゃないよね?
釣りだよバカ死んで
最初の単語も大文字なのはそのcamel casingってのに入るの? それとも、そんな変わった書き方してるの俺だけか……。
どっちもキャメルケース。 大文字始まりをアッパーキャメルケース、 小文字始まりをローワーキャメルケースというんだと。 俺の場合JavaScriptでは基本的にローワーキャメルケースで コンストラクタとして使う関数名にはアッパーキャメルケースを使う。
確か過去スレに、Sunの出しているJava Coding Standardに従うのがいいんじゃね?というスレ的推奨があったよね
>>304-305 きみらが初心者か、または、入門時にまがい物を見て影響されちゃっただけだよ。
例えば、RubyやPerlの関数名や変数名をキャメルにしたら間違いなく誰かに突っ込まれる。
逆も然り。要するに、言語の慣例に倣うのが基本だな。
JSでアンダースコア使うなら、それなりに意味のある使い方にした方が良いだろうね。
>>305 スレチガイだが、厨じゃなくても、Javaはキャメルで書くよね?馬鹿?
315 :
302 :2006/11/06(月) 23:31:08 ID:???
あ、↑の日本語がおかしいや。すみません。 あとjavascriptもスタイルシートみたく外部ファイルにしたほうがいいの?
ケースバイケースとしか言いようがない
317 :
302 :2006/11/06(月) 23:56:51 ID:???
ふーん。じゃあ馴れるまで外部は止めとくよ。サンクス。
>>316 彼は大谷晃。決定打発言乙。まあ晃は晃でも谷本のウザさは異常
"追加"ボタンを押すと、入力欄とそれに対応する"クリア"ボタンが追加されるようなことがしたいと思い、 入力欄と"クリア"ボタンの追加はできたのですが、 "クリア"ボタンにonclick="clearInput(id)"のような指定をしても思ったような動作が得られませんでした。 onclick="clearInput(2)"とか定数にするとクリアが機能するんですが、クリアされる入力欄が固定になってしまって... onclickの指定は、〜.setAttribute('onclick', new Function("clearInput(id);"));のようにしています。 間違っている点やおすすめの方法などありましたらご指導お願いいたします。
orz
322 :
Name_Not_Found :2006/11/07(火) 09:20:55 ID:FWl9XYc3
質問です。 for(var i=0;i<5;i++){ document.getElementById('tf'+i). ... } のようにしてIDを設定しようとしたのですが、オブジェクトがnullだと叱ら れました。こういう書き方だとgetElementById('tf'1).のように設定される からでしょうか。getElementById('tf1').にするにはどう書けばよいかご教 示ください。
324 :
322 :2006/11/07(火) 09:36:27 ID:???
ありがとうございます。それはないです。
それなら
>>322 で取得できるはずだべ
そうなると...の部分が怪しいがまずは一時変数に格納するとかして問題を切り分けたらどうよ?
お願いです。。。。。どう検索しても出てこない質問です。もし奇跡的にもここで分かる方がいたらぜひ教えていただきたいです。わらにもすがる思いでここにきました。 質問は、""(ダブルクオーテーション)の中には''(シングルクオーテーション)が入りますよね?そのシングルクオーテーションのさらに中に同じことをしたい場合、どうすればいいのでしょうか?というものです。 そもそも3つの入れ子は無理なんでしょうか。。。。お願いです!助けてください!!!!!!!
>>326 back slash (日本語windowsなら \ マーク)で、エスケープ。
" ' \"\" ' " こんな感じ。
>>328 うわ〜〜〜〜〜〜〜〜!!!!!!!本当にありがとうございます!!!
信じられません。グーグルで二日間探しまくったのに、全く出ていませんでした。
あなたは神です!!!!ありがとうございました!!!!!
具体的にどういうキーワードで探したら二日間もかけながら見つけられなかったのか興味がある。
でもエスケープという単語を知らずにどうやって調べればいいのかもよくわからんな
むしろ、最初に言語リファレンスを読まないのが問題なわけで…
記号の検索は名称でないと難しいからなあ
まあでも
>>332 が全てだな
んなこたあない。Googleの検索方法の書籍を読めば出ている。
335 :
Name_Not_Found :2006/11/07(火) 16:48:38 ID:qLdbpDQe
引数に0から始まる数、例えば0123を渡したところ83という数に変わっちゃったんですが 0から始まる数字は渡せない仕様ですか?
>>335 8進数として解釈されてる、というか、0から始めるのは8進数の書き方だから。
JavaScript始めたばかりなんですが、驚きの連続ですw で質問なんですが、この言語って、インスタンス生成時点でクラスの 型は自動的に決めてくれるんですか?prototypeに配列を代入する と配列になるとか。
>>337 たぶんJavaから入ったのかな?
そうなら、変数の型は全てObjectだと思えばおk。
実体となるオブジェクトの型やプロパティの有無に関するチェックは全て実行時。
>>337 まずクラスだのいう考え方をきれいさっぱり捨てる。
次にスコープとスコープチェーンを理解する。
特定のクラス名を操作したい場合はどうすればいいの? idだとgetElementByIdでいけるんだが、 getElementByClassnameってのも無いみたいだし、全く分からん。
>>340 全部のエレメントを検索してgetAttribute等でクラスを識別するのが普通
API一つでどうこうなったりはしない
>>340 まあ本来はclassNameって、JSで一括操作するためのものじゃなくて、CSSで一括指定するためのものだしな。
JSで一括操作するならclassNameに頼らず、HTMLやXMLレベルでDOMの構造をうまく作っとくほうが得策かとは思う。
何か理由があってどうしても必要なら、
>>341 の言うとおりに自分で実装したらいいと思う。
もしくは、諸悪の根源prototype.jsを使うかw
343 :
340 :2006/11/08(水) 12:26:36 ID:???
prototype.jsの関数を使ってみたがどうも上手く行かない。
http://www.devpro.it/bytefx/index.php このスクリプトを使って、特定のクラスを付けたメニューのhover時に色をフェードさせるように
したいんだがダメだ。
function fade(){
bytefx.color(document.getElementsByClassName("classname"), "backgroundColor", "#000", "#fff", 1);
}
これで黒から白に変わると思うんだが、どこがダメなのかさっぱり(メインのソースは省略)。
>>343 ライブラリの使用に困るような初心者は、
手取り足取りスレやWebProg板のAjax語るスレに行けよ。
>>341 XMLなら、メジャーな言語・パーサーのどれでも、XPathを使うに決まってる。
>>340 DOM-level-3-XPathまたはDOM-level-2-Traversalを使えるなら、それを使う。
IEは、存在しないプロパティを持つCSS規則を作って抽出してCSS規則を削除する。
どれも無理なら、DOM-CoreとDOM-HTMLで書くしかないが、
CSSセレクタに使える文字とHTMLのCLASS属性値で使える文字にギャップがあるから、
正規表現を使わずに文字列操作だけで実装するよう注意する。
あるidを持つタグの子ノードをするにはどうすればいい? document.getElementById("id").childNodes.setAttribute("-","-") こんな書式じゃダメみたいなんだが、色々調べてもやり方が分からん。
×あるidを持つタグの子ノードをするにはどうすればいい? ○あるidを持つタグの子ノードを操作するにはどうすればいい?
>>345 childNodes の最後の s は、複数形の s です。
ですから、複数の Node が、配列で返ってきます。
故に、ある特定の childNode を操作しようと思うなら、
….childNodes[x].… とすべきでしょう。
348 :
345 :2006/11/08(水) 16:05:49 ID:???
>>347 ありがとう。
しかし上手く行かない。
idにlistを付けたulの子要素であるliタグにclass名を付けたいんだが
document.getElementById("list").childNode.setAttribute("class","class名");
どこが間違ってる?
350 :
345 :2006/11/08(水) 16:29:33 ID:???
>>349 ありゃ、俺はどこを読んでたんだorz
んー、でも動かん。
エラーは出なくなったがclass名が付加されない。
諦めますた。
>>350 setAttributeでclassをいじる事に関してはFAQを読もう
ま、諦めたならいいけど
そういや予約語の class っていつ使うん?
仕様が確定して処理系が実装されたとき
354 :
Name_Not_Found :2006/11/08(水) 18:42:43 ID:OgbcvSB/
classと暮らす
355 :
Name_Not_Found :2006/11/08(水) 18:43:27 ID:OgbcvSB/
>>355 こんばんは〜
荒らしに来ますたぁ〜
さいきん, ろくな ねたが ないのねぇ〜.
もしかして れべる ていか ??? (ぐゎ〜はっはっは)
358 :
Name_Not_Found :2006/11/08(水) 19:28:53 ID:f2tI0r0j
hahaha
361 :
Name_Not_Found :2006/11/09(木) 12:03:16 ID:Pwc8M6LU
すいません。 もしAが数字じゃなかったらという条件式を次のように書いたのですがうまく行きません。 if(A!=/[0-9]/) どう書けばよいのでしょうか?
362 :
361 :2006/11/09(木) 12:18:28 ID:Pwc8M6LU
事故解決しました。お騒がせしました。
689 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2006/10/28(土) 20:48:29 ID:3XbZPdPf0 > 自己解決しました 近頃この手の素っ気ないレスが多いが、たとえ自分で解決したとしても、 その手法をレスすれば、他の困った人々の手助けになるとは考えられないだろうか。
はい、考えられません。
isNaN()
質問です。 生成されたオブジェクトのコンストラクタをとると、{}の中に [native code]と出ますが、この[native code]ってどういう意味 なんでしょうか。お教えください。
nativeのcodeという意味
368 :
366 :2006/11/09(木) 14:36:16 ID:???
>>367 早速の的確なお答えありがとうございました。勉強になりました。
function unko(){ var setlist = document.getElementById("list"); for (var i=0; i<setlist.length; i++) { if (i%2) { setlist.childNodes[i].setAttribute("title","unko"); } } } listと言うidを持つulタグの子要素であるliタグの中で、偶数版目のものだけにtitle="unko"を 付けたいがどこが間違ってるのか分からん。 知っている人がいたら教えてください。
IEはsetAttribute()が効かないが
372 :
370 :2006/11/09(木) 15:22:12 ID:???
>>371 一応Firefoxで確認しています。
<ul id="list">
<li>リスト1</li>
<li>リスト2</li>
<li>リスト3</li>
<li>リスト4</li>
<li>リスト5</li>
</ul>
こう言う並列なリストがあって、liタグ全てにclassを付加したいんですが、どうも上手く行きません。
よくわからんが372だけを見て書いてみた var items = document.getElementById("list").getElementsByTagName("li"); for(var i=0; i<items.length; i++) { items[i].setAttribute("class(Name)","適当な名前"; } 動くがどうかはしらない。またclass(Name)についてはFAQ参照
>>370 の
setlist.length を setlist.childNodes.length に変えるだけだろ
すいません、質問です。 CSSでイメージのロールオーバー設定すると、画像を先行取得していないので、 マウスオーバー時に読み込みマークでるじゃないですか・・・。 イメージを先行取得させるjavascriptを教えていただけないでしょうか?
image preload に JavaScript 使うまでもなんじゃない ? 僕なら普通に html 記述して display:none にしておく. ただし, 数が多くなると読込時間が長くなる. この辺の兼ね合いが大切だ.
>>377 なるほど、バランスを見て色々やってみます。
ありがとうございます。
ロールオーバーされそうなイメージだけ先読みしとくとかね。
携帯から失礼します。 IE5or6限定での質問です つい先ほど知ったのですが、ユニークなIDが振られたタグを参照する場合、document.all. を省略できるんですが、これってIEの仕様(正式にサポートされている)ですか? MSDNを小一時間見渡してみたのですが(英語力のなさもありますが)こういう参照方法についての記述は見当たりませんでした。 それから、BODYのonloadで呼んでいる関数内で、そのBODY内のDIVを上記方法で参照すると、エラー(定義されていません)になる可能性はありますか? よろしくお願いします
383 :
372 :2006/11/09(木) 19:38:49 ID:???
>>373 おかげ様で出来ました
感謝してます!!
385 :
381 :2006/11/09(木) 20:49:21 ID:???
>>382 ありがとうございます。
なるほど、その当時は仕様だったんですかね。今もそれは変わってないんでしょう…。
それから、二つ目の質問で追記(すいません)なんですが、実際にそういうエラーが出る場合があるらしいのです(自分の環境では再現しない)
で、色々考えて、onloadイベントは、readystateがloadedの時点で発生して、でも参照時にはcompleat(スペル違う?)ではないからかな、とか考えたんですが…。違いますかね?
要素の参照はdocument.getElementById()を使う。それが一番無問題。 IE専のしかも現在公式サポートでない機能のことなど知らんし、 何がどう実装されてるかも不明。 だからそれで相談されても何のアドバイスもないね。
>>386 お前アホかwwアドバイスできないなら偉そうにレスするなよw
388 :
381 :2006/11/10(金) 00:32:45 ID:???
>>386 ま、確かにその通り。
では、二つ目の質問をちょっと変えます。
bodyのonloadイベントは、そのbody内のエレメントはすべて準備が調ってから(readyStateがcompleteになってから)発生するのでしょうか?それとも(あくまで可能性の話として)タイミングに寄ってはエレメントを参照するとエラーになることはあるのでしょうか?
MSDNでは、全てLoadしたら、という書き方をしていて、それってどっちなのかぁ?と思いまして…
readyStateってDOMに対して定義されてないだろ
390 :
381 :2006/11/10(金) 01:34:22 ID:???
あ、そうなんですか。すいません。勉強不足でした。 ということは、bodyのonloadイベントで実行しておけば、そのbody内はどれも参照可能ってことですか?
>>390 >bodyのonloadイベントで実行しておけば
自分で試せ屑。
HTMLのBODY要素のONLOAD属性値に書くことが即ち実行とは言えない。
HTMLのイベント属性値にはreturn文が書けることからも
想像できるように、匿名の関数が作られている。
その匿名関数がイベント発生時に実行されるから、
HTMLのイベント属性値として書いたスクリプトもその時に実行される。
試しに、onload="alert(arguments.callee)" してみればよい。
HTMLのイベント属性値に限らず、例えばIEなら、
<script type="text/javascript" event="onclick()" for="EYED">alert(arguments.callee);</script>
<p id="EYED">hoge</p>
のように、SCRIPT要素の内容が匿名関数本体になる。
(つまり、これはクリックするまでは実行されない。)
ところで、開始タグ直後に「普通の」SCRIPT要素を書けば、
DOM構築及びレンダリングと同期して処理がされる。
また、DOMNodeInsertedイベントタイプを利用すれば、
DOM構築及びレンダリングと非同期で処理がされる。
>>391 何を演説してるのか分からんね。
>>390 HTML 4.01ではonloadは次のように規定されている。
The onload event occurs when the user agent finishes loading
a window or all frames within a FRAMESET. This attribute may
be used with BODY and FRAMESET elements.
だからonloadイベントハンドラの中でgetElementById()で取るなら
どの要素も既に読まれていて取れるものと理解される。取れないなら
仕様に合わないブラウザが悪い。
IE専の機能の場合、そのふるまいがどうであろうと「そういうもんだ」
とIEが言うならそれであきらめるしかない。
一言多いな
394 :
Name_Not_Found :2006/11/10(金) 08:39:09 ID:7JkVi2iI
質問です。 プロトタイプ継承問題なのですが、英語圏のサイトでincapsulatedという 単語で説明されている意味がよくわかりません。おわかりの方、ご教示 ください。
encapsulateのことを時々incapsulateって言うこともあるから、たぶんencapsulatedのことだと思うけど、日本語で言うと「カプセル化」。 普通にオブジェクト指向でいう、内部仕様の隠蔽の意味かと。
396 :
381 :2006/11/10(金) 09:06:29 ID:???
みなさん、いろいろありがとうございました。 とても勉強になりました。
var items = document.getElementById(idname).getElementsByTagName(tagname); for (var i=0; i<items.length; i++) { var number = i+1; setlist[i].setAttribute("onmouseover","function(){kansu"+number+"();}"); 任意のidを含むリストの子要素を取得して、そこのmouseover時に動的な名前の?関数を割り当てたいんだが、 上手く行かない。 firefoxは別の設定でいけるんだが、IEでは全然ダメ。 多分上の設定では以下のようになってきちんと動くと思うんだが、どこが悪いのでしょうか? <ul id="id"> <li onmouseover="function(){kansu1();">リスト1</li> <li onmouseover="function(){kansu2();">リスト2</li> <li onmouseover="function(){kansu3();">リスト3</li> <li onmouseover="function(){kansu4();">リスト4</li> <li onmouseover="function(){kansu5();">リスト5</li> </ul>
398 :
Name_Not_Found :2006/11/10(金) 12:40:47 ID:dpeaFFek
ど素人なのですが 色々調べてもわからなかったので質問させてください 下のような感じで 選択肢が2つあるラジオボタンと、それに属する2つの プルダウンメニューを設定しています ┌─────┬─┐ ◎Tシャツ│menu1 │▼│ └─────┴─┘ ┌─────┬─┐ ◎ズボン │menu2 │▼│ └─────┴─┘ menu1のプルダウンをクリックすると「Tシャツ」のラジオボタンが menu2のプルダウンをクリックすると「ズボン」のラジオボタンが onになるようなスクリプトを作りたいのですが 上手くいきません html(実際はphpファイルですが)には <form action="***.php" method="POST"> (中略) <input type="radio" name="type" value="1">Tシャツ。 <select name="group_id1" onFocus="changeCheckedA()"> <option value="hansode" selected="selected">半袖</option> <option value="nagasode">長袖</option> (中略) </select><BR> <input type="radio" name="type" value="2">ズボン <select name="group_id2" onFocus="changeCheckedB()"> <option value="jeans" selected="selected">ジーパン</option> <option value="chino">チノパン</option> (中略) </select> </form>
399 :
398 :2006/11/10(金) 12:41:43 ID:dpeaFFek
<続きです> jsファイルに function changeCheckedA() { document.forms[0].radio.value[1].checked = true ; } function changeCheckedB() { document.forms[0].radio.value[2].checked = true ; } とやっています ネットで調べて表記方法を細かく変えてみたのですが 一向にラジオ ボタンはonになりません 何かとてつもなく根本的な勘違いをしてるんだと思いますが わかり ませんでした 何かアドバイスをいただけるとうれしいです よろしくお願いいたします
>>399 フォームに名前を付けちまった方が手っ取り早いと思うがどうよ。
あと、セレクトメニューの名前が同じなのはわかりにくいが。
>>397 setlist[i].setAttribute("onmouseover","kansu"+number+"();");
でどうよ?
>>399 function changeCheckedA() {
document.forms[0].type["0"].checked = "on";
}
function changeCheckedB() {
document.forms[0].type["1"].checked = "on";
}
にしてみ。
403 :
397 :2006/11/10(金) 13:17:12 ID:???
>>402 それだとIEが動かないんですよorz
多分setAttributeうんぬんの問題だと思います。
代わりにfunctionを挟めば良いらしいんですが、+で結合している形なので"function(){kansu"が
文字列と判断されて動かないみたいで…。
上手い事やる方法は無いのかなぁ。
今更ですが
>>397 のsetlist[i]はitems[i]の間違いです。
>>397 文字列ではなく関数オブジェクトを渡す。
items[i].setAttribute("onmouseover",window["kansu"+number]);
または
items[i].setAttribute("onmouseover",new Function("kansu"+number+"();");
>>403 setAttributeを使うという考えが諸悪の根源。
items[i].onmousemove = window['kansuu' + i];
406 :
397 :2006/11/10(金) 14:06:16 ID:???
>>404 >>405 やっと出来たー。
お二人には感謝!!
10時間以上かかってようやくここまでこぎつけたorz
ほんとうに感謝です。
>>401 ホント汚いコードですいません
>>402 確かにvalueは数値ではなく文字列として考えるべきですね!!
でも変えてみましたがダメでしたorz もちろんhtmlのvalueも変えたの
ですが…("1"と"2"だったので"0"と"1"に)
他にどこがダメなんでしょうか…
408 :
402 :2006/11/10(金) 14:55:13 ID:???
>>407 ごめん、ちょっと勘違いしてたので訂正。
↓をそのままおれのとこのIEで動かしたら、おそらく意図したとおりに動いたよ。
<script type="text/javascript">
function changeCheckedA() {
document.forms[0].type[0].checked = "on";
}
function changeCheckedB() {
document.forms[0].type[1].checked = "on";
}
</script>
<form action="***.php" method="POST">
<input type="radio" name="type" value="1">Tシャツ。
<select name="group_id1" onfocus="changeCheckedA()">
<option value="hansode" selected="selected">半袖</option>
<option value="nagasode">長袖</option>
</select><BR>
<input type="radio" name="type" value="2">ズボン
<select name="group_id2" onfocus="changeCheckedB()">
<option value="jeans" selected="selected">ジーパン</option>
<option value="chino">チノパン</option>
</select>
</form>
何をメチャクチャ書いているんだか… document.forms[0].elements.ラジオボタン名[番号].checked = true; だ! デタラメなアドバイスする奴は去れ!!
>>408 いけました!! ありがとうございます!!
本当にありがとうございました!!!
しかしname="type"ってのはややこしいですね 反省です
setAttributeの引数はどっちもDOMStringだろ。 setAttribute("onmouseover",new Function("kansu")みたいな馬鹿な書き方は 誰が言い出したんだろ。
ひとつ質問です。 オブジェクトのリテラルでキーはクォーテーションで囲むのが正しいですか?
>>411 馬鹿IEの実装はそうなってないんだよ。
415 :
412 :2006/11/11(土) 00:43:09 ID:???
setAttribute使う奴は皆stringでいいと勘違いする。 だから漏れはsetAttributeを罵倒することにしてる。
417 :
Name_Not_Found :2006/11/11(土) 08:03:59 ID:1yRkwZv6
IE6以上限定でもいいのですが、 input-buttonの絶対位置を調べる方法はないでしょうか。 ボタンはスタイルシートで絶対位置指定してるものではなくて、 描写位置を知りたいです。 input-button要素に限ったことじゃないと思いますが 調べる方法を教えて下さい。
>>416 setAttributeを使わないと指定できないものもあるんじゃないのかな。
それと、setAttribute自体の引数は両方Stringだよ
>>417 offsetLeftあたりでぐぐってみて
419 :
417 :2006/11/11(土) 08:12:46 ID:???
420 :
417 :2006/11/11(土) 08:31:55 ID:???
すいません。 解決できたと思い込んでいたのですが、 思っていたのと違うみたいです。 offsetLeftは、ウィンドウを基準にした場合の要素の左の座標 だと思うのですが、 取得できた値がかなり小さいです。 なぜでしょうか。
>>420 自分で調べろ。最終ヒント:msdn measuring でぐぐれ
>>418 setAttribute()でないと指定できないものの具体例、キボン。
langとか
425 :
417 :2006/11/11(土) 21:11:38 ID:???
つまり、合計して求めるしかないってことですね。 ありがとうございました。
426 :
Name_Not_Found :2006/11/12(日) 20:47:22 ID:CHxJOLXJ
onClickやonKeyPressに複数イベントを設定することはできるでしょうか。 たとえば、ボタンを押したらfunction aaaとfunction bbbを両方実行させたいのですが
>>426 function ccc(){
aaa();
bbb();
}
という風に纏めた関数を作って、function cccを呼び出せばいい
428 :
426 :2006/11/12(日) 21:02:53 ID:CHxJOLXJ
>>427 やはりその方法しかないでしょうか。
各イベントには1つづつしか設定できないでしょうか
429 :
Name_Not_Found :2006/11/12(日) 21:03:13 ID:CxalWhpn
選択値によってスタイルのクラス名を指定し、visibilityをhidden/visibleをボタン一括して切り替えています。 このとき、クラスが設定されているタグの種類はいろいろ(少なくともspanとdiv)です。 例:選択値='typeA' … 対象クラス名='classA' 選択値='typeC' … 対象クラス名='classA','classB','classC' document.all[i].className、document.all[i]..style.visibilityを使用して IEでは何とか動くようにできましたが、他のブラウザ(NN7、FireFox、OP9)では全く動いていません。 document.all[i]ではなくdocument.getElementsById['id_str']または document.getElementsByTagName('tag_str')というサンプルは多くありましたが、 クラスが設定されているタグはページ内に複数あり、IDは設定していませんし、タグも1種類ではありません。 どうすれば、ページ内のクラス名を参照し、visibilityを変更することができますか?
>>428 onclick="aaa();bbb();"
431 :
426 :2006/11/12(日) 21:08:24 ID:CHxJOLXJ
>>429 HTML の構造を工夫して,
document.getElementsByTagName('hx');
を活用すれば id を振らなくてもうまくいく.
んで, IE を基準に考えて script を書くのはお薦めしない.
434 :
429 :2006/11/12(日) 23:10:03 ID:???
>>432 、
>>433 ありがとうございます。
全てを対象にするものが無いようなので、spanとdivのみを使用するようにして
この2種類のTagNameを調べるようにしてみます。
>>428 テンプレは読んだのかね。addEventListener/addHandlerを使えば
いくつでも追加していいける。ただしブラウザ振り分け必要。
>>429 document.allを使った時点でクロスブラウザは捨ててると思うべき。
他のブラウザで動かないとか言い出すのならDOM標準準拠で書け。
どっちでも自分の好きな方でいいが目指す方向と違う方を選んで
おいて相談されてもやる気にならんから。
436 :
Name_Not_Found :2006/11/13(月) 03:53:33 ID:MO7+AKoX
IE7で、下のような確認させる表示をつけたときだけ、そのボタンをクリックしても実行されません。 <input type='submit' name='delete' value='チェックした写真削除' onclick='return confirm("本当に削除してもいいですか?")' /> IE6やFxでは動きます。どうすればいいのでしょうか?
>>436 7.0.5728.16387
7.0.5744.16384
では問題なかった。
438 :
Name_Not_Found :2006/11/13(月) 11:09:55 ID:MO7+AKoX
439 :
Name_Not_Found :2006/11/13(月) 11:10:47 ID:MO7+AKoX
>>434 IE addRule(), removeRule()
W3 insertRule(), deleteRule()
すればいいだけのような気がするが……。
>>434 もし、どーしてもHTMLのclass属性値で自力抽出したいなら、DOM-XPathを使えって。
FxやOpera9相手なんだろ?これら今時のUA相手に、DOM-Coreや
DOM-HTMLを使って全部回すなんて、頭おかしいと思われるよwww
443 :
Name_Not_Found :2006/11/13(月) 21:40:03 ID:1wA5wtPJ
FAQ かなと思ったけどうまく調べられないのでお願いします。 script src で読み込まれた js 内で、自身のパスを参照するにはどうすればよいでしょう? img を吐くようなスクリプトで、script src 自体はどこに貼られてもよいようにしたいわけですが。 できそうな気はするんだけど…。ってか、一応以下でできたんですがもうちょっときちんとした方法は無いものかと。 document.write('<span id="xxxxxx" />'); var e = document.getElementById("xxxxxx"); var basePath = e.previousSibling.src; // script src basePath = basePath.substring(0, basePath.lastIndexOf('/') + 1);
/
ノシ
try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } 上記で、document.write(xmlhttp.readyState);を行うとどうしても4でなくて 0となってしまいます。 処理自体はxmlhttp = new XMLHttpRequest();の方が走っているのですが… エスパーの方、いらっしゃいましたらお願いします。
thx
>>446 document.write()使ってるという時点で皆ドン引きかと思われ。
過去ログ読みまくればreadyState論議が見つかると思うけどね。
質問です javaスクリプトを用いて ページ自体を更新することなく 部分的にCGIの実行結果を表示したいのですが これは可能でしょうか (perlでサーバー上のファイルサイズ取得、これをスクリプトでリアルタイムに表示) おねがいします
451 :
Name_Not_Found :2006/11/14(火) 16:04:16 ID:L1yQOXOr
質問です。 フォームのイベントでoptionのvalueに値を代入すると、その値の optionのtextがselectの窓に見えるようになるというのは、どういう 理屈からですか。いくら考えてもわかりません。IE専の仕様ですか?
>>450 まさにそういうことを目的とするのが
今流行のAJAXというものらしいです
ぐぐれば死ぬほど出てきます
>>451 サンプルが無いと意味がよくわからんです。
>>451 value of type DOMString
The current form control value (i.e. the value of the
currently selected option), if multiple options are
selected this is the value of the first selected option.
とあるから、そしてreadonlyではないから、ここに書き込むと
それが選択された値であるように選択項目が切り替えられる
ようになっている、という風に読んでもいいんじゃないの。
必ずそうなっているべきかどうかは疑問だけどさ。
454 :
451 :2006/11/14(火) 18:57:30 ID:???
>>453 なるほど選択されたという認識ですね。私はindexでするようにして
いたのですが、確かに依存なしかというと安心できないかもです。
ありがとうございました。
>>450 "CGI の実行結果" というのが
"CGI によって記録されたファイル" なら,
XMLHttpRequest が使える.
ただし, 使えない server があることに注意.
それと XMLHttpRequest は確かに魅力的だけど,
UA を選ばざるを得ない結果になりがちだし,
返される文字コードが utf-8 デフォなので
かなり使いにくい...
456 :
450 :2006/11/14(火) 19:40:30 ID:???
>>452 下らない質問ですんませんでした^
おかげさまで解決しました
>>455 AJAXでCGI直で実行結果をリアルタイム表示に成功しています
これをうまいこと数値として扱えれば最高なんですが
この辺の可能性は勝手に探してみます
ありがとうございました
>>450 ajaxでもいいけど面倒なのでiframeにでも読ませるのが簡単かもよ。
とにかくアンタが詳しい処理内容を説明しないから誰も回答しようが
ないんだよ。質問するならするでちゃんと説明しなよ。
458 :
Name_Not_Found :2006/11/15(水) 11:56:24 ID:xnA96xtJ
質問です。 appendChildするのではなくて、オブジェクトそのものをHTMLとし て生成する方法はありますか。あれば、やり方教えてください。
>>458 HTMLとして とはどのような形を言うのでしょうか。
>>458 もしかして 「要素オブジェクト.innerHTML = 'HTML文字列'」
のことかね?もしそうなら,,,
過去スレくらい読めボケ!!! 2度と来るな!!!
461 :
Name_Not_Found :2006/11/15(水) 12:58:39 ID:rd3mTVtq
>>458 文字列としてのhtmlをどこかのinnerHTMLにつっこめば、
それはDOMオブジェクトとしても扱えるよ。
そういうことを言っているんじゃないのかな?
私的最近のやりかたは、javascriptでcreateTag,appendChild等でタグを生成する
ようなことはめんどうなのでほとんどせずに、テンプレートから文字列として作った
html(の部分)をinnerHTMLにつっこんで画面を構成する、というようにしてます。
462 :
458 :2006/11/15(水) 15:37:58 ID:???
>>461 たいへん参考になりました。ありがとうございました。
形の上で罵倒だろうが
>>460 もちゃんと教えているということが
コイツには理解できないようだな。2度と来ないで欲しいね。
warota
460==463 //true 自業自得 プ
こういう時は罵倒も含めてレスくれた人全員にアンカーするのが
波風立てない大人の生き方。これ最強。
華麗にスルーされて少し傷ついた
>>459 の意見オワリ。
タグ直書きでappendChildみたいな事がやりたいなら、
insertAdjacentHTMLというものもありますよ。
>>468 このレスにはレスが貰えなくて傷つきますた
前スレまでしかレスしてない人が傷つきますた
471 :
Name_Not_Found :2006/11/15(水) 23:04:57 ID:1zeY9G6T
質問です。 コンストラクタ内の「this.getMonth()+1」が「101」と連結になってしまう のですが、どうすれば加算になりますか。「Number(this.getMonth())+1」とか でもだめでどうやってもうまく行かないです。
ソース書けと。
個人的にJavaScriptの+演算子が文字列連結の機能を持ってしまっているのは
言語設計上のミスなんじゃないかと思うわけだが。
>>471 parseIntでぐぐれ
>>471 Number()やっても駄目というのはげせないね。ソース貼ってみ。
>>473 Number()やって駄目ならparseInt()だって変わらんだろ?
変わるという目算があるのなら伺いたいところ。
文字列+this.getMonth()+1 とかやってるんじゃないかと
(this.getMonth()+1) で普通はおkだと思いますが、 もしgetMonthが自作メソッドならそっちの問題かも知れませんね。
this.getMonth()-0+1 これだ
>>477 なるほど。意図がわかりづらいがなるほど。趣味のソースで今度使おう
>>趣味のソースで今度使おう プププ
来週11月23日(木) 趣味のソース会 開催 〜晩秋の採れ立て素材で旬を味わおう〜
481 :
Name_Not_Found :2006/11/17(金) 09:32:21 ID:n96t71hZ
初歩的なことですいません。 function f(){} からfを取り出すにはどうかけばよいのでしょうか。
f取り出すと何が起こるの?
unction (){}
484 :
Name_Not_Found :2006/11/17(金) 11:52:39 ID:1+UyILB0
pop関数アルゴリズムを考えると、どうしても配列のlengthに値を代入し なければなりませんよね。しかし、それはreadonlyなので、そこでアル ゴリズムが止まってしまいます。ブラックボックスの中はどうなってい るのでしょうか。ご教示ください。
>>481 高度すぎてわかりません
>>484 それJavaScriptの質問なの?
function pop() {
[native code]
}
>>484 ってlengthはreadonlyではないんだけど。
>>481 toString()で文字列にしてfunctionの次にある名前を取り出せば?
ちなみに配列のlengthはreadonly属性がついていない ついているのは文字列
>>487 こういうこと?
var f_str = (f+'').replace(/^functions+([^(]+)[x00-xff]+/,'$1');
function Class1() { this.a = 1; } function Class2() { this.a = 2; } Class2.prototype = new Class1(); var test = new Class1(); この時、Class1のaを3にしたい場合は test.prototype.a = 3; で良いのでしょうか?
491はミスです。全文書き直させてください function Class1() { this.a = 1; } function Class2() { this.a = 2; } Class2.prototype = new Class1(); var test = new Class2(); この時、Class2のprototypeに設定されているClass1インスタンスのaを3にしたい場合は test.prototype.a = 3; で良いのでしょうか?
>>492 test.constructor.prototype.a = 3; かな。
494 :
Name_Not_Found :2006/11/17(金) 19:19:08 ID:vIQbSHCH
function Class1() { this.a = 1; } function Class2() { this.a = 2; } Class2.prototype = new Class1(); var test = new Class2(); Class2.prototype.a = 3; かな? インスタンス側に.prototypeは無い・・・と思います。
495 :
Name_Not_Found :2006/11/17(金) 19:21:20 ID:vIQbSHCH
>>493 testのconstructorはClass1になってるんじゃないかな?
>>492 でも無事に Class2のprototypeに設定されているClass1インスタンスのaを3に にしても
その内容ではどこにも影響を及ぼさないと思いますよ。
>>496 あ?アホかお前?知識無いのにレスするなよ。
新しいClass2を作ったら影響するに決まってんだろクズ
>>491-498 結局prototypeのaをぶじ変更してもClass2()のコンストラクタで
aを書き換えてしまうからね。名前が違えばちゃんと影響が見えるが。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
function Class1() { this.a = 1; }
function Class2() { this.a = 2; }
Class2.prototype = new Class1();
var test = new Class2();
test.constructor.prototype.a = 3;
test.constructor.prototype.b = 4;
var test1 = new Class2();
document.writeln('a = ' + test1.a + ', b = ' + test1.b); // 2と4を表示
</script></pre>
</body></html>
500 :
Name_Not_Found :2006/11/17(金) 23:37:34 ID:LQk52tt8
質問です。 javascriptをMAC版のIEだけ読み込ませない方法はありますか? よろしくお願いします。
普通のブラウザ判別でしょ。検索したら。
>>484 function POP()
{
var pp = this[--this.length];
return pp;
}
でいいのじゃないか?
>>502 それはマズいでしょ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
var a = [1,2,3,4,5];
a.pop = function() { var pp = this[--this.length]; return pp; }
document.writeln('[' + a.pop() + ']');
</script></pre>
</body></html>
質問者がみんな音信不通な件について
指定したい時間だけまってくれるようなプログラムを教えてください。 勝手な想像 Wait(30) ってやると30秒たつまで何もできないような感じで よろしくお願いします
>>505 JavaScriptにはそれは存在しません。30秒後以降にやりたい
動作を別の関数にしてsetTimeout()で登録すれ。そのように
コードを直せない奴はJavaScriptプログラミングをしてはいけない。
リンクをクリックして背景色や背景画像を閲覧者が変更できるようにしたいのですが、 AAA BCD EEE というテーブル内で、D内にあるリンクを押すとCの背景が、 B内にあるリンクを押すとテーブル全体の背景が変更できるようにしたいのです。 同セル内にあるリンクで同セル内の背景変更などのスクリプトは 検索してあったので分かるのですが、 指定した範囲のみを変更するってことはできるのでしょうか。
>>507 テーブルだろうがセルだろうが、「要素」 なのはかわらんわけで、
idつけて要素を特定してやればいいだけでしょ。
わざわざテーブルとかで検索するからややこしくなる。DIVのスタイル変更もTABLEのスタイル変更も一緒。
509 :
Name_Not_Found :2006/11/18(土) 11:03:42 ID:hgxLMoRd
質問です。 Arr=[1,2,3,4,5]という配列を出力するときに通常だと、 1,2,3,4,5 ですが、これを各要素ごとに改行させて 1 2 3 4 5 としたいのですが、Arrにどういう変更を加えたらいいのでしょうか。 よろしくお願いします。
510 :
509 :2006/11/18(土) 11:07:38 ID:hgxLMoRd
自己努力により解決してしまいました。 スレ汚しすいません。
>>507 セル再現して書くのめんどい。
テーブルのサンプル貼れば
それを暇人が勝手に改造してくれるよ。たぶん
>>507 function getCellBefore(cell) {
var i = cell.cellIndex - 1;
return i == -1 ? null : cell.parentNode.cells.item(i);
}
function getAncestorTableOf(node) {
var TABLE_TAG_NAME;
if (node) {
TABLE_TAG_NAME =
node.ownerDocument.documentElement.tagName == 'HTML'
? 'TABLE' : 'table';
while (node.nodeName != TABLE_TAG_NAME) {
if (!(node = node.parentNode)) {
return null;
}
}
return node;
}
return null;
}
>>508 さん
>>511 さんレスありがとうございます。
以下をやってみたのですが動きません。
head内に
<script type="text/javascript">
<!--
function bgc01(#000000){
document.getElementById("lf").bgColor=#000000;
}
//-->
</script>を、
背景を変更したい<table>内にid="lf"を、
>>507 のD内の変更を実行するリンク<a>に
href="#" onClick="javascript:bgc01(#000000);"を書きました。
良ければどなたか添削していただけないでしょうか…
514 :
507 :2006/11/18(土) 13:38:11 ID:???
>>513 名前入れ忘れました
>>507 です
>>512 さんありがとうございます
正直自分のレベルだと何が何だかよく分からないのですが
>>512 さんのタグを元に検索してまた勉強してこようと思います
せっかく書いて頂いたのにすみません…
スレ汚し失礼しました
>>512 わざと難しく書くなよw
>>513 512のスクリプトをheadに置いて、
テーブル全体の場合
<td onclick="getAncestorTableOf(this).style.backgroundImage='url(画像.jpg)'">
左のセルの場合
<td onclick="getCellBefore(this).style.backgroundImage='url(画像.jpg)'">
こんな感じに使えるよ。
>>513 <html>
<head>
<script type="text/javascript">
<!--
function bgc01(id,color){
document.getElementById(id).style.backgroundColor=color;
}
//-->
</script>
</head>
<body>
<table id="lf">
<tr><td>A</td><td>A</td><td>A</td></tr>
<tr><td><a href="javascript:bgc01('lf','#FF0000')">B</a></td>
<td id="lf2">C</td>
<td><a href="javascript:bgc01('lf2','#0000FF')">D</a></td></tr>
<tr><td>E</td><td>E</td><td>E</td></tr>
</table>
</body>
</html>
517 :
Name_Not_Found :2006/11/18(土) 18:58:26 ID:7bXBMwc3
prototypeはプロパティですかorオブジェクトですか?
なぜorで結ぶ
519 :
Name_Not_Found :2006/11/18(土) 19:06:37 ID:INXyAdGj
javaでポップアップメニューを出したのですが、 body部分の表のしたに隠れてしまってみえないのです。 どうすれば、表の上にポップアップが来るのか教えてください
志村!スレタイ!スレタイ!
div z-index 1
>>518 Is prototype a property _or_ an object?
523 :
507 :2006/11/19(日) 05:09:57 ID:???
>>516 さんが書いて頂いた通りにしたところ無事動きました!
画像変更や他のやりたいことも時間掛かりましたができるようになりました。
>>515 さんも有難うございます。参考にさせて頂きました。
JavaScript苦手だったんですけど検索中に良いサイトがたくさん見つかったので
もう少し勉強してみようと思います。皆さんありがとうございました。
524 :
Name_Not_Found :2006/11/19(日) 13:15:10 ID:lBivMJf2
Formの要素の何かに対して操作をするFormのプロトタイプを 作ろうとしているのですがうまくいきません。 例えばFormのnameを設定するfunctionを次のように書いてみました。 setNameでformの名前を設定させ、alertでセットした名前を確認する動きをさせたいものです。 うまく動かない原因を教えていただけないでしょうか。 Form.prototype.setName = function(val) { this.name = val; } function test() { var f = document.forms[0]; f.setName("aaa"); alert(f.name); }
>>524 Formがコンストラクタじゃないからじゃね?
常識的に考えて…
527 :
524 :2006/11/19(日) 14:10:15 ID:lBivMJf2
>>526 そうだったのですか。
勉強不足でした。出直してきます。
ならこうしてしまえばどうよ function Form(){/*.......*/} Form.prototype.setName = function(val) { this.name = val; }
質問です。 画像をアップロードする掲示板CGIで、 投稿ボタンを押したときに通常の投稿動作に加え、 別の掲示板CGIにも同一の内容を投稿したい(POSTで同一のフォーム内容を送信、ポップアップ等でも可)のですが、 このようなことは可能でしょうか もし可能なようでしたらヒントいただけると嬉しいです。
>>524 HTMLFormElement.prototype.setName = function(val) {
this.name = val;
}
IEはDOM系のクラスオブジェクト組み込まれてないから無理だよ
>>528 form要素のオブジェクトが確実にその
>>528 のつくったやつの子孫ならいいけどねえ
532 :
531 :2006/11/19(日) 18:03:16 ID:???
クラス「っぽい」オブジェクトってつけるの忘れた
>>529 サーバ側でその別の掲示板にpostし直すようにしたほうが簡単かと。
534 :
529 :2006/11/19(日) 20:04:32 ID:???
レスありがとうございます サーバー側からですと ユーザーのほうでポップアップさせることが出来ないので そちらも含めて方法を考えております 何か方法ありましたらよろしくお願いいたします。
どーでもいいが、NN4とNN3の場合、Formオブジェクトも、Form.prototypeも、存在する。 しかし、nameプロパティ(HTMLのNAME属性)を変更できない。 ついでに、どーでもいいが、NN4とNN3の場合、Inputオブジェクトも、Input.prototypeも、存在する。 nameプロパティ(HTMLのNAME属性)を変更できる。 他にも、衝突させそうな名前として、Urlオブジェクトなんてのも思い浮かぶ。 まあ、NN4以前の話だから、どーでもいいがな。
へえ〜へえ〜
あれ、IEでは name 値って変更できなくなかったっけ?
>>534 テキトーにいうけど、
onsubmit で フォームの action と target を一時的に変更して submit() して、action と target 戻して普通に送信すればいくんじゃね?
>>538 submitした結果が戻って来て別のページに遷移してしまうと現在の
ページのスクリプトはそこであぼーんになるから、それを避ける方法
まで含めて考えれ。
フォーム送信するとページが切り替わるでしょ。見た目が今 いるページと同じだとしてもさ。それを避けるにはiframeの 中とか別窓から送信するとか、targetでそれらを指定とか。 まあ別に洩れが作るわけじゃないから判らないならそれでいいよ。 忘れてくれ。
539ではないが、スクリプトはページが切り替わるとメモリから削除されて しまうのでもう呼び出せないということだ。
「すごいサイト」を教えて下さい お願いします
546 :
Name_Not_Found :2006/11/20(月) 11:21:44 ID:EkzDVg3W
テーブルのTRをrowspan="2"にして反映させたいのですが、 やっている事はTDの中身が<の時に<のTDエレメントを潰してrowspanをかけることです。 setAttributeもrowSpan=2もouterHTMLをアラートすると確かに書き加えられているのですが 画面に反映しません。 document.getElementsByClassName("maintablecolor2").each(function(e){ if(e.innerHTML && e.innerHTML.match("<")) { mark=e; target=e.parentElement.previousSibling; }}); target.rowSpan=2; mark.parentElement.removeChild(mark); <table border="0" cellspacing="1" cellpadding="5" class="maintableborder"> <tr valign=top align=left> <td style="" class="maintablecolor2">テキスト1</td> <td style="" class="maintablecolor2">テキスト2</td> </tr><tr valign=top align=left> <td style="" class="maintablecolor2"><</td> <td style="" class="maintablecolor2">テキスト3</td> </tr></table> 1回新しくTRエレメントを作って現存のTRの書かれてる属性をどうにか取得してrowspanと一緒にsetAttriubuteし直して (それかtr rowspan="2"というエレメントを作るか)子ノードのクローンをつけて、親ノードに付け直すしかないのでしょうか? スマートなやり方があれば教えて下さい。
>>546 そもそもtr要素にrowspan属性など存在しない。
大体getElementsByClassNameとかeachとかは何だ。
もしPrototype.jsとかを使ってるんだったらその旨ちゃんと書け。
あとparentElementはIE専だぞ。
>>546 td要素のrowSpanの書き換えはちゃんと動作するよ(IE,Gecko)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<table border="2" summary="test"><tbody>
<tr><td onclick="this.rowSpan=2">X</td><td onclick="this.rowSpan=2">X</td></tr>
<tr><td onclick="this.rowSpan=2">X</td><td onclick="this.rowSpan=2">X</td></tr>
<tr><td onclick="this.rowSpan=2">X</td><td onclick="this.rowSpan=2">X</td></tr>
</tbody></table>
</body></html>
だからアンタは他のところで失敗してるわけ。ちゃんと問題を
切り分けて追求しろって。
>>541-542 ん、だから、onsubmit されたときに、
form.target = "_blank";
form.action = "second.cgi";
form.submit();
form.target = "_self";
form.action = "first.cgi";
form.submit();
return false;
とかやればいく気がしね? って
>>538 で言ったんだけど。
なんで別のページに遷移して戻ってきたときのことのメモリのことまで考えなければいけないのかワカンネ (´・ω・`)
>>549 1回目に送信したらしたらよそのページへ行ってしまって
続きが実行されない。「戻って」なんて来られない。
やってみれば分かるだろ。
onsubmitの中にsubmit()入れるとかいうヘンな技はさておいて。
test
<form>><input>... のあたりで、 入力欄に何か入力されたら、それをイベントとして捕らえるのは、 どうやってしましょうか? <input oninput="func_handler(this.form)"> 見たいな事がやりたいわけですが、誰か教えていただければ。
>>550 当たり前のこと言ってもなあ。
>>552 onchange とか onkeydown とか?
>>552 onchange のことかな。
でもこれはフォーカス外れないと起きないよ。
あれ、ごめん。 リロードしたつもりだったけど、できてなかった。
チームで作ってる他人の関数名を拾って、削除したり追加したりしたいのですが… 追加削除に関しては、prototype.jsで出来る事が判明したのですが、関数名を指定しないといけない… functionの関数名をどうにか拾えないものでしょうか?
559 :
Name_Not_Found :2006/11/20(月) 15:21:03 ID:UzUK8x4v
質問です。 次のコードで文字補充を試みたのですが、thisに割り当て られませんと叱られます。どこがいけないのでしょうか。 String.prototype.add=function(n) { for(i=0; i<n; i++){ this += 'a'; } return this; } alert('x'.add(3));
>>559 thisを変数にすればいいんじゃね
普通に動くようになる気がするが、違うんだ?
561 :
588 :2006/11/20(月) 15:45:26 ID:???
少しだけ前進… Fxでは最高の結果だが… IE6は駄目過ぎ;; ブラウザの違いは、いつも泣きそう;; <script> function hogehoge(){ var func_name = document.getElementById('hoge').getAttribute('onclick'); alert (func_name); } </script> <input type="button" id="hoge" value="IEとFxの違いがあるような無いようなw" onclick="hogehoge()">
563 :
588 :2006/11/20(月) 15:55:37 ID:???
権限系の一括モジュールなんすよ。追加削除は、必須らしいんで…
>>562 もし知っていたら、本当によろしくお願いします;;;;
>>559 String.prototype.add=function(n) {
var r = this;
for(i=0; i<n; i++){
r += 'a';
}
return r;
}
こんな感じでよろしくおねがいします。
iにもvar付けろよ
>>559 それってどう動作して欲しいわけさ。まさかこれを実行した
後はプログラム中の 'x' と書いてあるところが全部 'xaaaaaa'
と書いてあるかのように動作して欲しいっていうわけ?
そんなことできるわけがない。質問を分かる日本語でちゃんと書け。
567 :
559 :2006/11/20(月) 16:30:02 ID:???
568 :
546 :2006/11/20(月) 17:55:02 ID:???
>>547-548 Oops久々だったんでそんなチョンボとはorz...
target=e.parentNode.previousSibling.firstChild;
でOK?
あと必ずしも先頭に"<"があるわけじゃないので、"<"が親エレメントの何番目にあるか保持したいのですが
var cnt=0;
while(e.previousSibling){e=e.previousSibling;cnt++;}
とかでOK?ほか何かDOMのメソッドとかあります?
>>568 Geckoとかは終了タグと開始タグの間の改行とかも
テキストノードとして保存するんで、テーブルを使うのなら
cellIndex、rowIndex、cells、rowsあたりを使ったほうが確実。
こういうふうに元のArrayクラスをオーバーライドするんでなく MyArrayみたいに独自のArrayクラスを作ってこれにArrayクラスを継承させるにはどう書いたらいいのですか? <script> Array.prototype.even_join = function(){ var str = ''; for(var i=0; i<this.length; i+=2){ str += this[i]; } return str; } Array.prototype.odd_join = function(){ var str = ''; for(var i=1; i<this.length; i+=2){ str += this[i]; } return str; } var x = ['チ','ク','ン','ラ','コ','ラ']; document.write(x.odd_join(),'がたった!<br>'); document.write(x.even_join(),'がたった!<br>'); </script>
>>570 普通にAを継承したクラスBを作るのと同じ。
function B(){}
B.prototype = new A;
BがMyArray、AがArrayになるだけ。
ただしlengthプロパティやtoStringの扱いには気をつけろ。
>>571 レスありがとうございます。
コストラクタはどのように書けばいいのでしょうか?
もしかしてArrayとStringみたいなネイティブクラスって継承してもメソッドはthis自体を操作するようになっているから 自分でプロパティを操作するように再実装しないといけないんですかね?
>>571 >ただしlengthプロパティやtoStringの扱いには気をつけろ。
この意味がやっとわかりますた。
コンストラクタで要素をセットするときに自分でlenngthメッソドをインクリメントしなきゃいけなかったわけですね。
なんてこったい...orz
ちと教えてください。 JavaScriptは型変換がないとのことですが、たとえば、 String.prototype.met=function(){ return this.replace(/,/g, '-');} var n=[1,2,3,4,5]; だと、n.met()はunsupported objectエラーになります。 こんなときはどう書けばいいんでしょうか。
>>576 どこでそんなでたらめを習ったんだ。
JavaScriptには型も型変換も存在するぞ。
変数が型に縛られていないだけだ。
それからそのコード、Stringに設定した
メソッドをArrayが使えるわけないだろ。
>>576 標準オブジェクトのprototypeに変な関数を設定しないでください><
>>578 くだらねえ。困るのは歴3日くらいの超初心者だけだろ。
>>576 n.toString().met();// 1-2-3
String(n).met();// 1-2-3
しかし、慎重な人はこう書く。
String.prototype.met = function () {
return String.prototype.replace.call(this, /,/g, '-');
}
String.prototype.met.call(n);// 1-2-3
>>579 お前が初心者だということはよくわかった
慎重な人ワロタ
582 :
576 :2006/11/21(火) 11:51:35 ID:???
>>577 ,
>>579 thx. なるほど。
JavaScriptって最も誤解されている言語どころか、うそとデマだ
らけの言語だということがわかりました。Oreilly買うべきかな。
慎重とかそういう問題じゃなくて、 同時に読み込まれる他のプログラムに影響を与えるのが問題だけどな C言語で #define printf puts とかされるのと同じ この話題は過去レスにも沢山出ているが、 hasOwnPropertyが動かないブラウザがある以上拡張すべきではない気がする
584 :
Name_Not_Found :2006/11/21(火) 12:48:00 ID:qH3ppM+r
スクリプトを途中で終了させたいのですが if (str == "") exit(); //空ならここで終了 以下blabla.. のような事がしたいのですがどのようにすればいいでしょう? やはり if (str != "") で { }.でくくるしかないでしょうか?
(function() { ... if(str == "") return; ... })(); みたいな感じかね
>>582 ネスケのリファレンスとガイド読めば、書いてあるんだけどさ…。
…… 誰も、読みやしねー ……
エラー出せば止まるお
【閑話休題】 IsArray()はいかにもキモイ書き方だ。isArray()としてほしい。
閑話休題って、無駄話を止めて、本題に戻ります。って意味だって知ってた?
591 :
584 :2006/11/21(火) 16:17:36 ID:???
>585-586 d やっぱそういう方法になるかぁ おとなしくおっぱいカッコ使っときます
質問させてください。 下記のようにして CGIの出力を定期的に表示するスクリプトを組んだのですが 最初の一回以降httpObj.responseTextの内容が更新されません (counter.cgiに直接アクセスしてカウントアップしても数値に変化無し) どのようにすれば解決できるでしょうか おねがいします function loadHTTP(){ $("view").innerHTML = httpObj.responseText; httpObj = createXMLHttpRequest(displayData); httpObj.open("GET",counter.cgi,true); httpObj.send(null); setTimeout("loadHTTP()", 5000);}
593 :
592 :2006/11/21(火) 18:22:12 ID:???
自己レスです うまく省略したつもりがいろいろ足りてなかったことに気付いたので 訂正させてください 下記が正しいプログラムです 改めて、分かるかたいらっしゃいましたらよろしくお願いいたします function loadHTMLFile() { httpObj = createXMLHttpRequest(displayData); httpObj.open("GET",'counter.cgi',true); httpObj.send(null); setTimeout("loadHTMLFile()", 5000);} function displayData() { $("result").innerHTML = httpObj.responseText; } function createXMLHttpRequest(cbFunc) { var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); } catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } }} if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc; return XMLhttpObject;}
>>593 function displayData() {
if(httpObj.readyState==4&&httpObj.status==200)$("result").innerHTML = httpObj.responseText;
}
595 :
10 :2006/11/21(火) 20:24:24 ID:???
教授は禁句。回答意欲の低下を招くことも考えられます。
教授に過剰反応しすぎだろ毎回毎回w
598 :
592 :2006/11/21(火) 22:02:56 ID:???
>594 レスありがとうございました 元々そのように記述しておりましたが 検証のため外しておりました。 そのとおりの記述に変更してみましたが結果は変わりませんでした。 カウンターCGIではなくhtmlファイルを読み込む場合に 実行中、ftpから該当のhtmlファイルを消去してみたところ 変化無く処理が続きました。 また、ループの検証のために時計と交互に表示するように改変しましたが、 きちんとループしておりました。 引き続き解決方法わかるかた居ましたらおねがいいたします。
女教授ください。
ご教示ひとつくださーい
ご凶事ください
女講師ください
>>598 間にproxyが挟まってる場合とかキャッシュされちゃって同じのが帰って
きたりすることがある。
リクエストに乱数のダミー変数とかをつけて見るとかしてみたらどうかな?
>>604 いや、普通にブラウザがキャッシュ使うから、header でちゃんと指定してやんないと、変更が反映されない。
ブラウザによって挙動が違ったりするから、自前で指定してやんないとはまる事がある。
>>584 do{
hogehoge;
if(hoge)break;
babibabi;
}
while(false)
607 :
Name_Not_Found :2006/11/22(水) 02:28:53 ID:VDmUjIsh
リストボックスで、複数の半角数字を入力してリストを選択する方法を教えて下さい。
下記のようなリストの場合、「12345」または「123」を押すと(その後にEnterキーがあってもいい)
「12345」が選択されるようなイメージです。
<select>
<option>12345</option>
<option>13579</option>
<option>23456</option>
<option>24680</option>
<option>99999</option>
</select>
下記のサイトでイメージに近いものがありましたが
マウスでリストの選択ができない、
キーを入力した後、マウスでブラウザをクリックしなければならない、
というところが違います。
http://okwave.jp/qa1492903.html どうかよろしくお願い致します。
○投げなんでは? 禁断のエスパになってみるw 5桁だから5回キー叩いて失敗したらまた待ちか? 入力内容は過程を確認しながらか? 入力途中のキャンセルは要るのか? ま、がんばって探せばあるかもなw
610 :
592 :2006/11/22(水) 08:10:54 ID:???
レスを参考に httpObj.open("GET",'counter.cgi',true); httpObj.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1990 00:00:00 GMT"); httpObj.send(null); 上記のように変更したところ想定どおりの動作になりました。 レス頂いた方々、ありがとうございました。
あのさ、arguments.callee は使わないほうがいいの?
>>611 なんで?ECMAで規定されていて普通のブラウザでは実装済みだろ。
>>607 ホレ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
var sel, a = new Array();
function init() {
sel = document.getElementById('s0');
for(var i = 0; i < sel.options.length; ++i) a.push(sel.options[i].value);
document.getElementById('t0').focus();
}
function chg(s) {
var n = -1; if(s == '') return;
for(var i = 0; i < a.length; ++i) { if(n < 0 && a[i].indexOf(s) == 0) n = i; }
if(n >= 0) sel.selectedIndex = n;
}
</script>
</head><body onload="init()">
<div><input id="t0" type="text" onkeyup="chg(this.value)"><br>
<select id="s0"><option>12345</option><option>13579</option>
<option>23456</option><option>24680</option><option>99999</option>
</select></div></body></html>
過去ログでどう検索して良いかわからなかったので質問させてください。 (「background」とかの単語では一通り検索してみました。) CSSにbackgrund-positionやbackground-imageで指定している値を取得したいのですが、 setAttributeやstyle.〜では取れないのです。(タグのところでstyle指定してないから当たり前?) やりたいことはその値を取得し、それを元にgetAttributeなどで再設定をしたいのですが、 良い方法はありますか?
なぜ過去ログが検索できてテンプレが読めない
615 :
613 :2006/11/22(水) 10:43:24 ID:???
>>614 ごめんなさい。すっかりテンプレ目を通した気でいました。
> Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
> A10. IEではe.currentStyle、Geckoではwindow.getComputedStyle()を使います。
これと同じってことですよね?
調べたらmozillaで載っていました。FireBugで試してみたら何とかいけそうです。
なぜかbackground-positionが取れないけど、background-imageは取れたので。
http://www.mozilla-japan.org/docs/dom/domref/examples7.html ありがとうございました。
>>612 a.push(sel.options[i].value);
IEだとここがだめっぽい
下の領域にイベントを伝播させる方法は? たとえば、DIV A の上に重ねた形で DIV Bがある。 重ねる方法は position:absolute z-index ・・・みたいな感じ。 で、DIV A/B それぞれ、onmousemove/onmouseup/onclick ... と全部設定されている。 これ、DIV Bの上で、たとえば onmousemove しても、DIV Aではトラップできないんだよね。 DIV Bの領域外でかつ DIV Aの領域内の部分でならトラップできるんだけど・・・。 上に覆いかぶさった DIV Bにより見えなくなっている DIV Aの部分に対しても、 イベントを伝播させたいんだけど、どーするの?
>>616 げげっ! スマソ、 .innerHTML にでもしといて。
>>617 試してないけど DIV BをDIV Aの中に入れてイベントを
バブルさせたらどうかな。
>617 要素をネストしろ。スタイルシートは関係ない。
620 :
617 :2006/11/22(水) 14:09:09 ID:???
>>618 ,619
それ考えたんだけど、ダメ。
というのは、617の説明じゃわかりにくかったけど、
ある種のゲームのようなものを作っている。
1、ドラッグして動かせるDIVが複数個ある。
2、ドラッグ中のDIVのDocument Orderは最優先(手前)になっている。
3、ドラッグされていないDIVは、上にほかのDIVがドラッグされていると、イベントが起こる。
イメージとしては、キャラが複数個浮いているウィンドウがあって、
あるキャラをほかのキャラの上にドラッグすると、
「踏み潰すな!ふんぎゃぁ!」とか鳴いたりする、って感じ。
・・・何が問題かというと、それぞれのキャラのDIVは対等な関係なので、
入れ子つくってバブリングすることはできない。
この場合、キャラの間に上下関係を作らないとだめでしょ。
ドラッグできる(手前に表示)のキャラと、できない(奥に表示)のキャラとか。
>>617 イベントのバブリングって、DOMツリーで、枝から幹の方向に伝達される。(順番変えられるけど…)
だから、兄弟関係にある枝には、伝わらない。
で、私は、自前でユーザーイベントツリーとバブリングやらを実装して、それ使ってる。
622 :
621 :2006/11/22(水) 14:20:07 ID:???
>>620 キャラの上に透明セルを貼って二重にしといて、
ドラッグ中は他のキャラの透明セルが最前面にくるようにすれば
たぶん「ふんぎゃぁ!」くらいはできる
かもしれない。
624 :
Name_Not_Found :2006/11/22(水) 18:12:08 ID:zovBDBh/
質問です。 テキストフィールドに「blue」などのHTMLで許容される色名を入れて 動作させるスクリプトを組んだのですが、たとえば「plue」などを入 れると、「無効なプロパティ」としてエラーになってしまいます。 条件でこれを排除するにはどうすればよいのでしょうか。 まさか、全部の色名を用意するわけにも行きません。ご教示ください。
そのまさかです。
16進数にしたら良いじゃない
628 :
624 :2006/11/22(水) 18:57:24 ID:???
>>625-627 そうですかぁ。try-catch tryしてみます。ありがとうございました。
>>624 CSSで許される色名はたったこれだけでしょ。なんで全部持たない?
The list of keyword color names is: aqua, black, blue, fuchsia,
gray, green, lime, maroon, navy, olive, purple, red, silver,
teal, white, and yellow.
>>629 それはちがうだろ。もっと勉強汁。
あんたが色の見え具合を気にするかどうかなんてどうでもいい。
>>630 1. HTML4.01によって定義される色名は16種類のみ
2. CSS2の色名はHTML4.01によって定義される色名と同じ
3.
>>624 「HTMLで許容される色名を入れて」
で「色の見え具合」って何だよ
ユーザスタイルシート使う人の事だろ
何でユーザスタイルシートが出てくるんだ?
ユーザスタイルシートで文字色とか背景色とか変えてるから
>>629 はCSS2(2.1)の仕様の4.3.6引用して
16種類しかないんだから
配列かなんかで色名全部持って比較しろって言ってるだけだろ
>>629 が色の見え具合を気にしているように読めるのが意味不明だし
ユーザスタイルシートなんて内容と全然関係ないだろ
CSS 2.1の色名は+orangeで17種類だぞ
silverがあってgoldはないってもなぁ。体系的に思想がない。 個人的にはsalmonなんかもほしいところだ。
638 :
Name_Not_Found :2006/11/23(木) 05:33:08 ID:ku55vcuz
タグのclassを動的に切り替えたいのですが どうやればいいですか? getElementById('hoge').class = 'name' のようにしてみたのですがエラーになりました。
classNameですた
>>637 それこそ自分で色名からRGB値へのデータベースを作って
持たせろ。何百個でも名前使えるようになるから。
「メソッド」を中国語でいうと?
>>624 手書きしようとするから面倒なんじゃないかな。
MAS JScript> var uri = "
http://msdn.microsoft.com/workshop/author/dhtml/reference/colors/colors_name.asp ";
MAS JScript> var r = new ActiveXObject("Msxml2.XMLHTTP.3.0");
MAS JScript> var a = [];
MAS JScript> var p = />(\w+)<\/TD>\s*<TD>(#[A-Z0-9]{6})/g;
MAS JScript> r.open("GET", uri, false);r.send("");
MAS JScript> while (c = p.exec(r.responseText)) {a[a.length] = ''.concat('"', c[1], '":"', c[2], '"');}
MAS JScript> Echo('var h6Of = {');Echo(a.join(',\n'));Echo('};');
出力結果
var h6Of = {
"AliceBlue":"#F0F8FF",
"AntiqueWhite":"#FAEBD7",
"Aqua":"#00FFFF",
"Aquamarine":"#7FFFD4",
(中略)
"Yellow":"#FFFF00",
"YellowGreen":"#9ACD32"
};
c[1].toLowerCase() した方が使い易かったな。
644 :
Name_Not_Found :2006/11/23(木) 11:14:39 ID:dxxapunO
ランダムリンクを使う場合に、いちいちリンクURLを追加しなくても 特定のフォルダ内のファイル全てにリンクさせるにはどうすればいい?
OS:WindowsXP SP2 ブラウザ:IE6 <html> <body> <A href="#" onClick="window.external.AddFavorite(location.href,document.title)">お気に入りに追加</A> </body> </html> このスクリプト、サーバ上だと動くのだが、ローカル(C直下)に持ってくると、 クリックしても何もアクションが無くなる。 (アクティブスクリプト関連の設定は許可してあります) ローカルだと使えないのでしょうか?
>>644 フォルダ内のファイルを連番にすりゃできる
>>646 隠しのマイコンピュータゾーンで実行することになるから、マイコンピュータゾーンで
使用を許可しておく必要がある。
649 :
Name_Not_Found :2006/11/23(木) 14:10:20 ID:o8siasPS
prototype.jsのeach()ってgetElementsByTagNameじゃ使えないの? $("hoge").each(function(e){ document.getElementsByClassName("hoge").each(function(e){ はいいのに なぜ document.getElementsByTagName("hoge").each(function(e){ だけエラー? ちなみにprototype.jsのソースが見れるサイトも教えてホスイ
>>649 getElementsByClassNameはprototype.jsがつくったもの(返ってくるのはArray。死んだリスト)
getElementsByTagNameはDOM(返ってくるのはNodeList。生きたリスト)
prototype.jsのeachはArray用だからNodeListで使うとエラーになる
prototype.jsは紛らわしい名前つけるのやめればいいのに
test
あるDIVに、ローカルな変数エリアをつくれないか? スレッドにおける、スレッドローカルストレージみたいなの。 具体的には、 document.getElementById("myid").var1 = "enabled"; みたいな感じで・・・。
その例えばをやってみた?
>>649 $A(document.getElementsByTagName("hoge")).each(function(e){
こうすれば動く。
ソースはどこで見れるもなにも配布元から取得してくればいいじゃん。
>>652 試せ
655 :
652 :2006/11/23(木) 15:41:22 ID:???
<html> <div id="tls1">Trial code for TLS alike vars.</div> <script> document.getElementById("tls1").var1 = "you see this var?"; </script> </html> --- DOM Inspector でみる限り、ダメっぽい・・・。 どこにも、var1 っつー項目は現れない・・・。
>>655 <html>
<div id="tls1">Trial code for TLS alike vars.</div>
<script>
document.getElementById("tls1").var1 = "you see this var?";
alert(document.getElementById("tls1").var1);
</script>
</html>
657 :
Name_Not_Found :2006/11/23(木) 15:51:52 ID:jHv+ZNd/
質問です。 ラジオボタンで、項目名とVALUE値が同じ場合に二度書きしたくないので、 項目名からVALUE値を求めるようなやりかたはありますか? <input type="radio" name="tori">ハト <input type="radio" name="tori">カラス <input type="radio" name="tori">スズメ でobj.tori[1].valueとやると「カラス」が出るようにしたいです。
658 :
652 :2006/11/23(木) 16:04:01 ID:???
>>656 ウォ!!すげぇ。
動いてるじゃん。THANX!!!!。
でも、なんで、DOM Inspector には現れないんだ??????
DOM Inspector -> 「正規DOM規格範囲内Element専用」ってこと?
>>657 無意味な横着しないでください ><
どうせスクリプト有効にしないと動作しないんだから、
inputタグそのものをスクリプトで出力したらどうですか?
>>658 DOM Node
Javascript Object
661 :
Name_Not_Found :2006/11/23(木) 23:04:21 ID:PB+Gjo+R
親ページ(フォーム入力ページ)から子ページ(確認ページ)を開き、 親ページのフォーム入力データを子ページに書き込むために以下のように したのですが、全角文字が文字化けしてしまいうまく表示されません。 何かいい改善策があればよろしくお願いします。 test.html <html><head><title>test</title></head><body> <form action="./test1.html" method="get"> <input type="text" name="encode"> <input type="submit" value="submit"> </form></body> </html> test1.html <html><head><title>**</title></head><body> <script type="text/javascript"> url=window.location+"" if(url.indexOf("?") != -1){ v=url.split("?")[1].split("=")[1] document.write(v) } </script></body> </html>
662 :
649 :2006/11/23(木) 23:33:10 ID:dcdLVN8P
>>650 THANX
じゃあ、いつものようにforかwhileでカコワルク回せでFA?
あとだれかprototype.jsのまともな解説サイト知らない?
>>662 prototype.js自体まともじゃないから
まともな解説を書けるわけが無い
>>652-658 DOMとは無関係のJavaScript Objectの仕様だから。
つか、ノードに変なプロパティ付けるくらいなら
DOM3のNode#setUserData()使え。ブラウザ実装は皆無だけどな。
getElementById()ってよく使うのに長すぎね? gEBI()とかにすればいいじゃんって感じ
667 :
Name_Not_Found :2006/11/24(金) 10:31:55 ID:e8lpFdAW
<head> <script language="JavaScript"> <!-- function gazo(mysrc) { document.img.src=mysrc; } --> </script> </head> <body> <input type="button" value="画像B" onclick="gazo(画像B.gif')"> <img src="画像A.gif" alt="" name="img"> </body> 最初に表示されてる画像がボタンをクリックしたら別の画像に変わり、 変更後の画像(または画像の下に文字列を付け加えてリンク)をクリックしたら 別の画面に飛ぶってスクリプトを作りたいんですが、 どのようにすればいいか教えていただけますか。
>>666 確かに長い。
でも、prototype.js使ってるから、あんまり気にならない。
>667 setAttributeを使う方法を、ぱっと思い浮かんだが、素人にはお勧め出来ないな
>>666 自分でそういう関数を1行で定義して使うのはいいんじゃねの?
>>669 setAttributeダサイ!
>>667 ホレ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var elt = document.getElementById('i0');
elt.src = 't2.png';
elt.onclick = function() { location.href = 't2.html'; }
}
</script>
</head><body>
<div><img id="i0" src="t1.png"></div>
<div><button onclick="test()">Test</button></div>
</body></html>
>>667 その前に、なんだそのコーディングは?そんなんじゃ画像表示も怪しいだろ。
JavascriptでURLデコードする方法を教えてください 文字コードはShift_JISです。
>>671 ぜひスバラシイコードを貼ってください。よろしこ。
>>672 JavaScriptではできません。SJISコード表を全部持てば
できるけど非現実的だよね。VBScriptかActiveXでできる
んだったっけ、過去スレのどっかにある。
>>670 またもろにメモリーリークパターンか。ほんと使えんやっちゃな。おまえかなり高齢だろ?
>>673 回答ありがとうございます
encodeURIで我慢します。
>>674 どこでどういう風にメモリリークするのか解説してよ
初心者向けスレなんだから
ホレ氏は素人だから、メモリリークが起こっただけで低脳呼ばわりするのは可哀想だが… 674に代わって解説すると、 function test() { var elt = document.getElementById('i0'); elt.src = 't2.png'; elt.onclick = function() { location.href = 't2.html'; } } 上のコードでtestの中のスコープがeltへの参照を保持していて、 eltのonclickには、クロージャへの参照を保持している。 そしてクロージャの特性上、クロージャがtestスコープへの参照を保持する訳で、 ここで循環参照が発生してメモリリークが発生している、 これは、まっとうなJavaScriptプログラマなら必ず避けなければいけないコードの典型的な例。 正直ホレ氏のコードは問題が多くて初心者向きではないと思うので、それを踏まえて利用してください。
> eltのonclickには、クロージャへの参照を保持している。 「には」? > クロージャがtestスコープへの参照を保持する どのクロージャ? > ここで循環参照が発生して 何がどう「ここで」なの? 正直677氏の日本語は問題が多くて初心者向きではないと思うので、それを踏まえて利用してください。
>>677 問題になるのは循環参照を持った大きいデータが次々にゴミになる場合。
ここでは本来クロージャは不要だから処理系がまともなら何も作らない。
馬鹿な処理系が毎回クロージャ作るとしてもeltという変数1個。
で、次のように変えて
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var elt = document.getElementById('i0');
elt.src = 't2.png';
elt.onclick = function() { location.href = 't2.html'; }
}
</script>
</head><body>
<div><img id="i0" src="t1.png"></div>
<div><button onclick="setInterval(test,100)">Test</button></div>
</body></html>
すごい勢いでtest()を呼んでみたけどメモリ使用量は増えてるかどうか
分からない程度の変動(UNIX/Gecko, WIN/IE6)。他の人も実験してみそ。
少なくとも人間がボタン押す程度で問題になるもんじゃないだろ。
で、アンタの正しいコードを貼ってくれよ。
揚げ足取り必死だな低脳w
で、アンタの正しいコードを貼ってくれよ。せいぜいvar elt の宣言を外側に出す程度?そうやってグローバル汚染するのと どっちがいいかという程度の選択だろ。
>>679 > ここでは本来クロージャは不要だから処理系がまともなら何も作らない。
Firefoxのシェアを馬鹿にするな
ちょっと変更してみた
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
var dummy = [];
for(var i=0;i<100000;i++) { dummy[i] = i; }
var elt = document.getElementById('i0');
elt.src = 't2.png';
elt.onclick = function() { location.href = 't2.html'; }
}
</script>
</head><body>
<div><img id="i0" src="t1.png"></div>
<div><button onclick="setInterval(test,1000)">Test</button></div>
</body></html>
物凄い勢いでリークしていた
だから人間が押すボタンなんだろ。
>>679 メモリリークってのは、何度も呼び出したからリークするんじゃなくて、
ブラウザを閉じるまで別のページに行ってもメモリが解放されない問題なんだよ
intervalで呼び出すことになんら意味は無いよ
本当にホレ氏は素人なんだな
それと、
> で、アンタの正しいコードを貼ってくれよ。
かっこ悪すぎるw
>684が正解 手っ取り早くメモリリークを起こすコードを書くと、 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> <script type="text/javascript"> function test() { var dummy = []; for(var i=0;i<1000000;i++) { dummy[i] = i; } var elt = document.getElementById('i0'); elt.src = 't2.png'; elt.onclick = function() { location.href = 't2.html'; } } </script> </head><body> <div><img id="i0" src="t1.png"></div> <div><button onclick="test()">Test</button></div> </body></html> これを表示してtestを押し、別のページに移動→メモリ開放されてない 確認して無いけどたぶん動くはず。仕事中にて失礼
わざわざ巨大な環境作って持たせたり何万回も呼べば そりゃそうなるけど。みんなそんな何日もブラウザ あげっぱなしなもんなのかね?
ついに負け犬の遠吠えモードになりました…
リークじゃなくてヒストリーのキャッシュなんじゃね?
>>686 256Mのノートパソコンで見ている人がメモリリークの問題のあるページを
2〜3経由するだけで、「メモリが不足しています」と表示されるんじゃないかな
>>689 分かりました、謙虚になります ^_^;;
それで謙虚に質問なんですが、この問題の場合リークのない
コードって皆さんどういう風に書いてますか?マジに質問です。
勉強しますので。
関係ないが勉強になった。偉いぞおまいら。
クロージャ周りのメモリリークはIE7/Fx2では修正されてるけどね。 今回の場合はIE6でも最後eltにnull代入すればリークしないし。 function test() { var elt = document.getElementById('i0'); elt.src = 't2.png'; elt.onclick = function() { location.href = 't2.html'; } elt = null; }
>>690 あなたが誰か知らないけれど、
リークの仕組みを理解していれば回避は結構簡単です。
リークが発生するのはDOMの循環リンク管理とScriptの循環リンク管理を
ブラウザで別システムで扱ってしまっているため、システムを超えて参照すると
それがリークとして残ってしまうことが原因です。
一番簡単なのが使い終わったイベントハンドラをスクリプトで外すことです。
ただ、removeEventListener は昔のFirefoxで正常に動かない問題があったりするので
確実な方法ではありません(ちなみに循環参照のメモリリークはFirefox1.5でも発生します)
確実なのはクロージャを使わず、クロージャを実行する関数を別に作って
それに実行させることです。
その場合はDOMに割り当てられるのは関数のみになるので循環参照は起こりません。
クロージャが1個でも循環参照していると、そのスコープ全てがリークするので
メモリリークはそこそこ気を遣う価値のある問題だと思います。
最も今回の発端になったコードくらいだったらリークしてもいいじゃん、と思うけどw
>>693 ありがとうございます。「クロージャを実行する関数を別に」
ってたとえばこういうことですよね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function handle() { location.href = 't2.html'; }
function test() {
var elt = document.getElementById('i0');
elt.src = 't2.png'; elt.onclick = handle;
}
function test1() {
for(var i = 0; i < 10000; ++i) test();
}
</script>
</head><body>
<div><img id="i0" src="t1.png"></div>
<div><button onclick="test1()">Test</button></div>
</body></html>
でもこれだとGeckoですごい勢いでメモリ消費してるよう
なんですけど…何か間違ってます?他の人がどう書いてるのか
教えて欲しいのでよろしくお願いします…
>>692 なるほど! eltにnullを代入すると確かに大丈夫になります。
なんですが、一般にはクロージャに取り込む変数に全部null
を入れるわけに行かないですよね。結局どういう指針で
コーディングすればいいんでしょう。
>>694 が間違ってる
のならどう違うのか知りたいですけど…
質問なのですが var text = "AAA<div>BBB\nCCC</div>"; var result = text.match(/<div>.+?<\/div>/im); alert(result); このように検索対象に改行が入ってると取得できないのです 改行に拘らずマッチさせたいのですが、お知恵をお貸し下さい(-人-)
>>694 をFirefox1.0にてメモリリーク確認。でも原因さっぱりわからん。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> <script type="text/javascript"> function test() { var elt = document.getElementById('i0'); elt.src = 't2.png'; elt = null; } function test1() { for(var i = 0; i < 10000; ++i) test(); } </script> </head><body> <div><img id="i0" src="t1.png"></div> <div><button onclick="test1()">Test</button></div> </body></html> Firefox1.0だとこれでメモリリークが起こる。 もうわけわからんが、クロージャの問題でないことは間違いないな。
>>696 それさあ、「.」には改行はマッチしてくれないんだよ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<script type="text/javascript">
var text = "AAA<div>BBB\nCCC</div>";
var result = text.match(/<div>[\u0000-\uffff]+?<\/div>/im);
alert(result);
</script>
</body></html>
>>697 確認ありがとうございます。やっぱり謎ですよね?となると、
eltにnullを入れるとかいうヒューリスティックしかないの?
それで結局どういうコード書くのが正しいのか誰か 教えてくれませんか…
>>694 そのやり方でもメモリリークは防げるが、クロージャ使ったときのように
test内の変数をイベントハンドラ内で使うことができなくなる。
多分
>>693 が言いたかったのはこんな感じ。
function createLeakFreeClosure(closure) {
var count = createLeakFreeClosure.count++;
createLeakFreeClosure[count] = closure;
closure = null;
return function() { return createLeakFreeClosure[count].apply(this, arguments); };
}
createLeakFreeClosure.count = 0;
function test() {
var elt = document.getElementById('i0');
elt.src = 't2.png';
elt.onclick = createLeakFreeClosure(function() { location.href = 't2.html'; });
}
>>695 大雑把に言えばDOM周りのオブジェクトへの参照を切っとけばOK。
例えば
>>685 のdummyはDOMとは関係ないJavaScriptの配列なので
nullを代入して参照を切る必要はない。ただ、参照を切るやり方だと
クロージャ内でeltを使いたいとかいったときに困るから、
そうした場合は↑の方法のほうがいいと思う。
それからFirefox/Geckoでリークしてるという人、何を根拠にそう判断した?
Mozillaの中の人の非公式な弁明は見たか?
ttp://www.d-toybox.com/studio/weblog/show.php?mode=single&id=2004120603
703 :
696 :2006/11/24(金) 15:26:14 ID:???
705 :
702 :2006/11/24(金) 15:39:05 ID:???
>>704 すまんね、702の最後は主に
>>694 の「Geckoですごい勢いで
メモリ消費してるようなんですけど」と
>>698 に向けた言葉だった。
確かにFirefox 1.5でもクロージャを直接イベントハンドラに
設定したときのメモリリークは起きる。Firefox 2では修正されてるけど。
IEも7では修正されているんだっけ。 そろそろまともにクロージャが使えるようになって欲しいよ。
>>705 はい、おっしゃる意味は分かりますけど、実行によってプロセスの
使用する記憶領域(実記憶、仮想記憶)が「ものすごく増えたまま」
になるのはGCが効果をもたらしてない可能性が高いという意味で
「怪しい」んじゃないですかね。厳密には分からないというのは
そうですけど…
まあ、回避方法としてはJavaScript側のどこかにクロージャを
持たせてそれを環境を持たない関数で呼び出すということですね。
ところで
>>702 だと大量にクロージャ生成してそれ使ったとき
全部配列に並べて持ったままになると思うけどそれはそういう
ものだということ?
708 :
Name_Not_Found :2006/11/24(金) 16:18:29 ID:K9HYMeVb
登録フォームなどにある、住所コピーをJavascriptでやりたいと思っています。 単にテキストボックスに入力した内容を下のテキストボックスにコピーするには <input name="address" type="text" onchange="form1.sub_address.value = this.value;"> <input name="sub_address" type="text" > などで出来るのですが、「住所をコピー」などの文字をクリックするとコピーされる ようにする方法がわかりません。どうすればいいのでしょうか?
住所をコピー,ってゆう文字列はどこにあんのさ?関係ないコードは貼らなくていいから.
<input type="text" name="address" value="" /><input type="button" value="Copy to " onclick="this.nextSibling.value=this.previousSibling.value" /><input type="text" name="sub_address" value="" />
異や。ちがうんじゃない?
Javascriptの文法を学びたいんですが、分かりやすい本はありませんか? いくつか挙げてくだされ。
文法を学べる本というと、サイ本しか浮かばない…
俺はこのスレッドと、ECMAの仕様書を印刷してわからないところを調べる形だけど… 仕様書を読みなれていない人だと厳しいだろうし、ECMA全部印刷するのに数千円かかるし、 あまりお勧めできる方法ではないか
フォームのエレメント追加(inputタグを増やす)ってやっぱりcreateElement? 動的にナレッジベース作りたい気がするんだけど、 なんか、テキストもチェックボックスも追加上手くいかないんだがなー
innerHTML
>>702 ってクロージャリークを回避してるの?
うへー、なんでそれで回避になるのかわかんねw
function内で変数つくって function作った時点でクロージャなるんじゃないんだ?
変数作らなくてもargumentsとかは存在してるからなー。
>>718 elt.onclickに関連付けられている関数自体がtestスコープに参照を持ってないのに注目
この場合、ブラウザの実装として、内部で関数呼び出しを単純なハッシュテーブルのインデックスで扱うので
DOMシステムとスクリプトシステムをまたいだ循環参照にならない。
循環参照をJavaScriptの中に閉じ込めてしまっているのがポイント
>>720 elt.onclickに関連づけられる関数(クロージャ)はargumentsへの
参照を持っていて、argumentsは引数への参照を持っていて、引数
は外側のクロージャを持っていて、外側のクロージャはtestスコープ
の参照を持っているけど、それでいいの?
>>721 なんかよくわからん文章だな。解読するとこんな感じか?
elt.onclickに関連づけられる関数(クロージャ)
【=createLeakFreeClosureのreturn文で返されるクロージャ】は
【createLeakFreeClosureの】argumentsへの参照を持っていて、
【createLeakFreeClosureの】argumentsは【createLeakFreeClosureの】
引数【であるclosure】への参照を持っていて、引数【closure】
は外側のクロージャ【=test内でcreateLeakFreeClosureの
呼び出し時に引数として渡されたクロージャ】を持っていて、
外側のクロージャ【=test内で作られたクロージャ】は
testスコープの参照を持っているけど、それでいいの?
だとしたら「引数は外側のクロージャを持っていて」が間違い。
createLeakFreeClosure内でclosureにnullを代入して参照を切ってるだろ。
>>721 > elt.onclickに関連づけられる関数(クロージャ)はargumentsへの
> 参照を持っていて
持っていないんじゃない?
自分自身のargumentsの参照を持つという意味なら当然持ってるけど、
そのargumentsは外側のクロージャを参照していないし。
724 :
Name_Not_Found :2006/11/25(土) 12:16:08 ID:+kpQ1nc2
何気に濃い―議論してるし、ガンガレ。 ホレ氏がやり込められるの久々に見たなw あとで誰かまとめとけよ。
>>723-724 なるほど。勝ち負けは別にどうでもいいんだけど、まとめなら洩れも
欲しい。結局どう書けばいいのかまだ分からん。
>>702 みたいに使ってる
ものもいないものもクロージャ全部抱えておいても、別のページに
移動すれば解放されるからそれでいいってこと?そして
>>698 みたいに
null入れるだけでもメモリ圧迫されるのは処理系のバグなの?
>>720 createLeakFreeClosureは渡されるクロージャーへの参照を持っているので
createLeakFreeClosureを通して参照関係は残ってるんじゃないの?
で、たとえば最初のコードでeltにnull入れて消せばいいんでしょうか。 それでいいならこの場合一番ラクちんだと思うけど。真面目に質問なので 教えてください。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> <script type="text/javascript"> function test() { var elt = document.getElementById('i0'); elt.src = 't2.png'; elt.onclick = function() { location.href = 't2.html'; } elt = null; } </script> </head><body> <div><img id="i0" src="t1.png"></div> <div><button onclick="test()">Test</button></div> </body></html>
>>725 そもそも循環参照リークだって処理系のバグみたいなもの。
スクリプト言語でこんな心配しなきゃならんのか
731 :
730 :2006/11/25(土) 12:57:43 ID:???
>>726 createLeakFreeClosureはいわばグローバル変数であり、
test内で作られるクロージャもcreateLeakFreeClosure内で作られる
クロージャもcreateLeakFreeClosureへの参照は持っていない。
クロージャがもつのは親関数の引数及び変数への参照ね。
733 :
730 :2006/11/25(土) 14:55:28 ID:???
えーと、
・elt.onclick が呼び出そうとする関数が、クロージャの関数そのもの。
→ リークする
・elt.onclick が呼び出そうとする関数が、普通の関数の場合
→ リークしない
・elt.onclick が呼び出そうとする関数が、普通の関数で、
クロージャの関数を別の(グローバルな)場所に退避させておき、その関数の中からそれを直接呼び出す場合
→ リークしない
ですかね?
>>702 はそれを動的に作っている感じか。
最初のコードの場合、↓みたいに簡単に変更すれば、クロージャも利きつつ、リークもしなくなるっぽい。(IE6)
----------------------------------
function test() {
var dummy = [];
for(var i=0;i<200000;i++) { dummy[i] = i; }
var elt = document.getElementById('i0');
elt.src = 't2.png';
elt.onclick = test.run;
test.func = function () { alert(elt && elt.src); alert(dummy.length); };
}
test.run = function () { test.func && test.func(); };
----------------------------------
// test.func → test.run.func に変更するとリークしたりして (そりゃそうだわ)、いろいろ試してて勉強になった。
>>733 なるほど分かりやすいまとめですね。外側で1個関数
作らないといけないのがあんまり嬉しくない感じは
するけどそれはもうしょうがないのかな。
ちょちょちょっとわけわかな俺様はどうも「クロージャ」の定義がわかってないようだ。
new Function(...)を使ってクロージャにならない関数を定義とかどうよ。
うう・・・
>>702 のやり方だと、Fx1.5 で、
elt.onclick = createLeakFreeClosure(func);
はいくのだが、
elt.addEventListener('click', createLeakFreeClosure(func);, false);
だとリークしてしまう・・・。
>>733 みたいな感じだと大丈夫。
どうすればいいんだろ・・・。
738 :
737 :2006/11/25(土) 16:16:22 ID:???
とか言いつつ、やってみたら、二重にするだけだったようです。 無駄レス申し訳ない。
>>736 本末転倒
>>735 そもそもクロージャによる循環参照でメモリリークが起きるのはブラウザのバグ
クロージャと関数オブジェクトと無名関数をごっちゃに使ってるやつが多いな。
日常会話なんてニュアンスがわかれば充分だし。
まあIE7でもFirefox2でも修正されてるし、ブラウザが クラッシュしたりXSSを引き起こしたりする問題でもないんだから、 気にしないって選択肢もありだとは思うがね。 あと7年もすれば気にしない派が大勢を占めてると思うよ。
7年…ネットではかなり長い時間だね。
elt=nullで防げるメカニズムがよくわからん。
>>744 あの場合の循環参照は DOMノードのonclickが関数クロージャを差し、関数
クロージャが変数eltへの参照を保持し、eltにはDOMノードが入っている、
というもの。事後にでも変数eltをnullにすればもはやDOMノードを指さなく
なるので循環参照でなくなる。
防げるっていうか、elt の値がクロージャされなくなるだけかと。
その表現はちょっと。「クロージャされる」ってどういう動詞よ ^_^;
だめかw 「クロージャ機能を使ってスコープ内の変数を参照する」 とか言うのだるくてw
だって後からnull入れたって変数elt自体は参照できるじゃん。 ただ参照したときの値がnullだっていうだけで。
750 :
Name_Not_Found :2006/11/25(土) 19:07:05 ID:75riOexU
>749 よくわかんねえけど、参照されるデータが山ほど、作られている場合は、nullで統一、一括うまぁw ってことじゃねぇの?
- DOMノードはonclickを持ってる - onclick は function() {} - function(){} は「test() 実行時に確保された変数領域」を参照している(*) - 「test() 実行時の変数領域」には var elt があり、DOMを指している DOMノードを開放しようとしたとき、 - onclickの開放が必要 - onclickの開放には「test()実行時に確保された変数領域」の開放が必要 - var eltの開放が必要 - そのときeltがDOMノードを指してると循環でヴァー なので、どこでもいつでもいいからeltがDOMを指してるのをやめればいいのか。 で、(*)のfunctionと変数領域の組がクロージャなんだと理解したんだけどあってる?
document.links[1].firstChild.nodeValue
おー出来ました ありがとうございました ココ、ID出ないのね
>>753 だいたい合ってんじゃないかなー。
仕組みについては、だいたい
>>693 ,
>>720 , あとは
>>730 のMSへのリンクに書いてる感じだと思う。
後半の循環の仕組みは自分ははっきりとはわからないけど、↑の解説みてて受けた印象はそれとはちょっと違ったかも。
しかし、クロージャ、昨日までは、クロージャのなかで使ってる変数だけ選りすぐって都合よく参照するもんだと思ってた。
親関数内で function 作ったら、その親関数内部の変数まるごと参照しちゃうんだねえ・・・。
>>730 >ってか2行くらいだったらそもそも elt を作らなくてもいいし、それでもいいかも。
この問題
>>730 がいうように、domをスクリプトの変数に保持する必要がなければ敢えて変数保持するなってことで解決したりしないの?
function test(){
$('i0').src='t2.png';
$('i0').onclik=function(){location.href = 't2.html';};
}
replace(/あ/gi,'い') で、半角スラッシュ「/」を変換するにはどうしたらいいの? replace(///gi,'い')もreplace(/"/"/gi,'い')もダメだった
replace(/\//gi,'い')
エスケープの存在をすっかり忘れてた…
>>758 いいだろうけど2回getElementById()なりを呼ぶことになるわけで…
>>753 クロージャとかの理解はいいと思うけど、そうやって再帰的に
たどりながら領域解放するという理解は違っているよ。だって
それじゃよそからも指されているところを解放してしまって破滅
するじゃん。Wikipediaでまず「ガベージコレクション」を読んで
それから「参照カウント」を読むことをすすめる。
改行ってどうやって指定するの?
自己解決 &#13;&#10;か
\r\n
実は長いJavaScript質問スレの中で、初めてのメモリリークについての議論だったわけだが 俺を含めて多数の人が理解できたみたいで非常に素晴らしい
769 :
607 :2006/11/26(日) 01:57:45 ID:???
遅くなりましたが、ありがとうございました。
まあ三年くらいで完全なムダ知識と化すわけだが
>>757 おれもれも。なんでfunction(){}は上の何も見てないのに〜とか混乱してた。
>>763 あー、参照カウント側から攻めたらわけわからんようになりそうだったので。
「Aの開放=Aへの参照が0になるためには」と読みかえればいいだけかな。
>>768 ついでにやっとクロージャも理解できた。
>>770 3年で陳腐化する知識を拒んでたらどうにも…
>>768 そうか?俺vol3〜40前後の間にお世話になって、このスレの後半からまた見だしたものだが、
そん時同じくクロージャのことでメモリリークするからって
>>702 チックな書き方のコード見たことあるぞい。
記憶違いだったかな。
>>762 function test(){
with($('i0')){
src='t2.png';
onclik=function(){location.href = 't2.html';};
}}
>>1 のカコスレ全集で簡単に検索してみたけど、
メモリリークについては、今回ほどまとまって議論?はされてないような気がするね。
リークすんだろボケ! 的なのは何回もあったがw
>>702 みたいなコードまではでてないような?
>>772 のコード
おお! まじで!
・・・って思ったけど、めちゃめちゃリークされるやん、このウスラトンカチw
しかし、Ajax で var req = new XMLHttpRequest(); req.onreadystatechange = function() { if (req.readyState != 4 || req.status != 200) return; // なんたらかんたら }; ってコードがよくサンプルで乗ってるけど、 これも地味にメモリリークしちゃうのな。怖いねえ・・・。
あれ。試してないけどprototype通してるからとかじゃなくて?
with(document.getElementById('i0')){
ならどうよ。
>>730 の論理はそういうことだと思われ。
>>774 グローバルスコープの変数なら違うだろ。曲解すんな。
>>772 var src = "global";
function test() {
with ($('i0')) {
src = 't2.png';
onclick = function() { alert(src); };
}
}
とすると「global」ではなく「.../t2.png」と表示される。
これはクロージャが要素i0への参照を持っているから。
function test() {
var handler = function() { location.href = 't2.html'; };
with($('i0')){
src = 't2.png';
onclick = handler;
}
}
ならリークしない。
フォローdクス。 要は、クロージャ―をDOMに直張りすんなってこと?
>>777 グローバルの話なんかしてないしw
まあ
>>774 の省略コードじゃそうとられるかもしれんがw function 内に書いてるんだよ。
782 :
Name_Not_Found :2006/11/26(日) 09:15:19 ID:E2tsrllS
初心者スレ荒れ荒れなのでここですみません。 livedoor wikiのフリーエリアでDOMを使ってwiki本文を弄くっているのですが 適用範囲を独自に指定できるように、コメントタグで<!--hoge--><!/--hoge-->を挿入しようとしたのですが どうやらwiki編集画面で入力したコメント//hogeはHTMLに変換されない仕様のようです。 なのでコメントタグをWikiに投稿する事で作成できません。 以上のような状況で、どうやって適用範囲を指定しようか悩んでいます。 カッコ悪くてもロードまで見えていても構いません。 ただ勝手に仕様を決めるわけでwikiなので他の方も使うので、一般的に人が書きそうな文字列と重複したくはありません。 例えば-//hogeとして、リストのテキストで//hogeと表示させたとしても、 誰かしらが例えばJavaScriptのコメントをリスト指定しない保証はないわけだし かといって∈みたいな変な記号使っても指定しづらいとかいわれそうで悩んでます。 皆さんでしたら、どんな目印記号を使いますか。 まとまってなくてスミマセン。
>>777 ていうか、グローバルな変数に req を設定すれば、今度は Fx がリークする・・・、
っていうか、Fx だとページ移動しても元のページのJSの実行結果もキャッシュするみたいで、
つまりグローバルな変数の中身を保持し続けるから、更新しない限りページ移動してもメモリ減らないぞ。
まあ、走らせた後 req を null にすればいいんだけどさ。
>>782 javascriptと関係あるのか?w
違うとこいったほうがいいよー
785 :
782 :2006/11/26(日) 09:45:06 ID:???
どこで聞けばいいですか?ム板の質問スレだとこっちに戻されそう。 初心者スレ機能してないし... どっか人がいていいとこ誘導して下さい。
原理はよくわかってないんだけど、
>>702 のコードを使用すればIE6とFirefox1.5でメモリリークの問題が起こらない
という認識に間違いはないよね?
>>787 クロージャとDOMでのリークについてはそれでいいかと。
あと
>>702 のコード、2つに分けたほうがいいかもしれない。 (addEventListener に対応するため)
>>783 FefoxやOperaが戻る進むの高速化のためにページの内容
(ソースではなく)をキャッシュしてるのとメモリリークを混同するなよ。
というかLeak Monitorで見る限り、Firefox 1.5はloadやunloadといった
特定のイベント以外は、普通の関数かクロージャかに関係なく
removeEventListenerしないとリークするような気がする。
詳しくは試してないし勘違いかもしれないけど。
790 :
Name_Not_Found :2006/11/26(日) 14:19:58 ID:i463hyl7
質問です o={'a':'x','b':'y','c':'z'} から、bを取り出すにはどう書けばよいですか?
>790 for(var i in o) { if(i=='b') alert("b"); }
792 :
790 :2006/11/26(日) 15:00:13 ID:???
793 :
790 :2006/11/26(日) 15:02:35 ID:???
?? alert("b") ??
文字列の置き換えで、.replace(/</gi,'<')を使わない方法ってありませんか? あんま正規表現つかいたくないんですよ
jsファイル読み込みでファイル名を書かずに 「(同じ階層に有る)jsファイル全部読み込む」みたいな記述はできないんでしょうか。 もしいい方法があったら教えてください。
>>796 copy /A *.js all.js
>>796 できない。サーバにあるファイルの一覧を取得みたいな手段が
ないから。CGIなりでファイルの一覧を生成して送るしかない。
>>795 全部自分でループすればどうにでもできるっしょ。
var i, result = '';
while((i = str.indexOf('<')) >= 0) {
result += str.substring(0, i) + '<';
str = str.substring(i+1);
}
result += str;
試してないけどね。
くだ質だけど lightboxみたいにrelationから外部スクリプトを呼び出す仕組み ってどっかに仕様書ある?ググったけど見つからないわ。
relationってnanだ?
>>799 仕様は無い。
それの初心者コードを我慢して読め。
function initLightbox というメモリーリークな処理がある。そこに書いてある。
>>798 ふつう、str.split('<').join('<') だろ。
splitの引数って正規表現じゃなかったっけ?
型変換か何かでうまく動くんだから、文字列のままでいいんじゃねーの?
<div id="hoge"><a href="*">aaa</a></div> この hoge の中の a タグの色だけ動的に赤にしたりしたいのですが、 どうやって書いたら良いのでしょうか
>>806 1:aエレメントのDOMオブジェクトを取得する
2:そのオブジェクトのstyleプロパティのcolor属性を望む色に変える
>>807 ありがとうございますたー!
links = getElementById("hoge").getElementsByTagName("a");
for(i = 0; links.length; i++){
links[i].style.color = 'red';
}
こんな感じで出来ますた!
>>802 =804?
それだったらstr.replace('<', '<')でいいんじゃね?
まあそもそも元質問の795で、正規表現を使いたくないという意味がわからんわけだが。
811 :
810 :2006/11/27(月) 13:14:16 ID:???
ミスったorz × str.replace('<', '<') ○ str.replace('<', '<')
>>810 replaceの場合はgフラグつけないと駄目ぽ。
あーそりゃそうか
( )内のvalueを使わずに、イベントが起こったエレメントのvalueって取れないんでしょうか? <script> function hoge(value){ var game = value; alert (game); } </script> <input type="button" value="PSP" onclick="hoge(value)">
815 :
Name_Not_Found :2006/11/27(月) 15:07:24 ID:rBYSfLHi
質問です。 setTimeout()で毎秒毎にカウントさせるスクリプトの件なのですが、 このくるくる回る数字に3桁カンマをつけることはできるのでしょうか。 一度文字列に戻してまた戻してと、普通に考えますが、相手は動いている し。処理時間にしたら毎秒のスパンは十分な余裕があるようにも思えた り。12,345 ---> 12,346 ---> 12,347のようにしたいのですが、アドバイスを。
>>815 num = String(num).split("").reverse().join("").replace(/(.{3})(?=\d)/g,"$1,").split("").reverse().join("");
別に「String(num).replace(/^(.*)(...)$/, '$1,$2')」くらいでいいんじゃ…
7桁とか、小数点入りとか、符号入りとか。
別に「String(num).replace(/(\d{1,3})(?=(?:\d{3})+(?:\D|$))/g, "$1,");」くらいでいいんじゃ… 小数部が4桁以上になるとあれだけど
正規表現使わずに書いたほうが読みやすくていいな
>>815 はカウントだから、小数や負数はとりあえず除外しておけばOK
しょうもない質問で申し訳ありません。 JavaScript初心者です。 DOMオブジェクトのエレメントオブジェクトから、多言語でいうところの派生をさせて拡張させたいと考えていまがうまく出来ません。。 具体的に試してみたのは以下のようなものです。 Test = { } Test.TestLib = { } Test.TestLib.TableEx = { } Test.TestLib.TableEx = function() { } Test.TestLib.TableEx.prototype = document.createElement("TABLE"); var objTableEx = new Test.TestLib.TableEx; //↑ document.createElement("TABLE");と同等の使用が出来るようにしたい。 見よう見まねで上記のようなコードを書いてみたのですが、うまくいかないようで objTableEx.appendChild( [別エレメント]) 等が動作しません。 TABLE等タグエレメントオブジェクト(?)から派生オブジェクトを作る方法はあるのでしょうか?
Test.TestLib.TableEx = document.createElement("TABLE"); のようにtableのオブジェクトは内部に保持しておくしかないかと
window.document.foo = "bar" のようにDOMに対して独自のプロパティ(?)を追加することはできないのでしょうか?
試せ。過去ログ嫁。検索しろ。
試したらできないようでした。なぜですか?
Object型じゃないからじゃない?
たまたま読取専用だったんだろ。
831 :
Name_Not_Found :2006/11/28(火) 08:41:11 ID:EumE01lt
表示するフラッシュの縦横サイズを、window.innerWidthを取得してから画面横幅にピッタリ合わせ、元フラッシュの縦横比を維持したまま表示させたいのですが 「document.getElementById()はNullまたオブジェクトではありません」というエラーが出てしまいます。 <script language="javascript" type="text/javascript"> <!-- var swfWidth = window.innerWidth; var swfHeight = Math.floor(swfWidth/2.14); document.getElementById('flash').width = swfWidth; document.all('flash').width = swfWidth; document.getElementById('top').width = swfWidth; document.all('top').width = swfWidth; document.getElementByid('top').height = swfHeight; document.all('top').height = swfHeight; document.getElementById('flash').height = swfHeight; document.all('flash').height = swfHeight; //--> </script> <object classid=〜 width="100%" height="100%" id="top" align="middle"> … <embed 〜 width="100%" height="100%" name="top" id="flash"/ > </object> ↑のスクリプトだとどこがおかしいですか?よろしくお願いします。
>>831 objectとembedに同じidつけたらまずいんじゃないの。不精せずに
別のものをつけて、objectのidでうまく操作できかったらembedのidで
やる、とかしてみたらどうかな。そもそもdocument.getElementById()と
document.all()を混在させる理由ってなにさ。
833 :
831 :2006/11/28(火) 09:05:34 ID:EumE01lt
>>832 objectには「top」でembedには「flash」で別のidつけてますよ?
document.getElementById()とdocument.all()を同時に使ってるのは、
一応持ってるjavascriptの本でそういう風に記述してるんで、
両方記述した方がいいのかな、と思ってやってました。
イベントのatachとdetachについです。 javascriptの本とかweb上にあるサンプルを見ると addEventListenerやatachEventを使った後に removeEventListenerやdetachEventを使っていないのをよく見るのですが、 どういうときにremoveやdetachを行って、どういうときは行わないで良いのですか? 今までaddEventListenerなどで登録したままで終わりだったんですけど、 それだとメモリーリークが発生する恐れがあると言われたので。 基本的にdetachするのが当たり前ですかね?
>>831 IEで試したらこんなかんじでした
1 onloadしてから実行するか<object>より下にスクリプトを置く ←今ココ
2 window.innerWidthはIEにない
3 .getElementByid('top') 志村〜ById!
836 :
Name_Not_Found :2006/11/28(火) 11:56:27 ID:1JJwcgN6
すいません英語の問題です。 if (null == 'test') // with casting というとき、JavaScriptで意味する「cast」とはどういうことなのでしょうか。 辞書を引くと「計算する」という意味があるのですがピンと来ないのです。
>>833 > 一応持ってるjavascriptの本でそういう風に記述してる
kwsk
>>834 メモリリークについては丁度このスレで話されてたとこだから、
>>670 あたりから読みつつ、「循環参照 メモリリーク javascript」 でぐぐっとけばいいと思うよ。
840 :
834 :2006/11/28(火) 13:24:46 ID:???
>>840 本の著者がそういう知識を持ってないからじゃないのかな
日本語でまともな本は皆無
>>840 実用上問題視されないから。
最近は、同一ページで作業する時間が長いアプリケーションとか増えてきたから、そういうアプリが気にする様な話だ。
実際それなりにJS書いてる人でも知らない人のが多かったんじゃないかなー。
リークが存在することは知っていても、なぜ起こるのかのメカニズムを きちんと理解している人は相当少なかったと思うよ
>>841 オライリーのjavascript&DHTMLクックブックも同じ感じだったんですよね。
情報が古いから仕方ない?
>>842 ってことはページが切り替われば問題なくなるということですか?
unloadする時に全部detachした方が良いと言うのを最近の本で見たのですけど、
どうなのでしょう?
>>845 ほんとにこのスレの流れ読んだのかいなw
・循環参照にならないように気をつける (ならないのなら以下の対策はいらない)
・別の関数をつかう (クロージャは使えない)
・
>>702 みたいにクッションを置く
・unload時に remove する
選択肢はこんなか?
847 :
Liu X :2006/11/28(火) 18:13:44 ID:DTm7YDJ5
大家好。 How do you know if there is something different between these two arrays contents ? Please give me your solutions on that.Say, var p=['a','b','c','d','e','f']; var q=['a','d','o','b','e','t']; Thaks in advance.
848 :
Liu X :2006/11/28(火) 18:29:07 ID:DTm7YDJ5
大家好。我自己明白了!
>>847 if(p.join(',') == q.join(',')) ...
851 :
828 :2006/11/28(火) 23:16:45 ID:???
>>829 「typeof window.document」で「object」と表示されました。型はobjectだと思います。
>>830 Firefoxのエラーコンソールで「document.documentElement.style = true;」などと無茶を
しようとすると、確かに「エラー: setting a property that has only a getter」と
怒られますが、「document = true;」などとしても何も表示されません。
本当に読み取り専用(ゲッターのみ?)ということなんでしょうか?
お前まず何に入れようとしたのか書けよ document なのか? なんで document = true とかする必要あるのかわからんが・・・
>>851 typeofがtypeを返すわけではない。仕様書の11.4.3、P47参照。
可能性としてはhost-objectで、typeofでobjectと返し、
[[PUT]]を独自に実装している、という風に考えておけばいい。
あとdocument.documentElement.styleとdocumentとは全然違う
854 :
828 :2006/11/28(火) 23:59:52 ID:???
すみません、本題に戻るとdocument.foo = "bar";とできるかどうか、ということですが、 今やったらできました。
特定の<TD>の背景画像をランダム表示にしたいんだけどどうすれば?
>>855 (1)そのTDにIDを振る。
(2)背景画像ファイル名の配列を用意する。
var files = ['a.gif','b.gif','c.gif'];
(3)bodyのonloadで背景設定する関数を呼ぶ。中身は
dobument.getElementById('TDのID名').style.backgroundImage
= files[Math.floor(Math.random()*files.length)];
858 :
Name_Not_Found :2006/11/29(水) 05:04:11 ID:29C0Qgou
ふとスレを見返してみると。。。 >808 links = getElementById("hoge").getElementsByTagName("a"); このgetElementを二つ重ねる書き方始めてみた… いつもこのスレは勉強になりますなぁ 色々と試したけど、onclickみたいなAttributeは無理だった 残念w
.getElementById("hoge")は、getElementById("hoge")の返り値[oblect(DOMエレメント)]の参照だから ver hoge= document.getElementById("hoge");でhogeに参照が入る 変数を作らずにその返り値にgetElementsByTagName("a")を適用してるだけだけど。 document.getElementById("hoge").getElementsByTagName("a")[0].target='_blank'; とかもできるよ。(IDがhogeのタグの中のAタグの一番目のターゲットを_blankに)
>>858 画像を読み込む前に実行したいのなら冒頭で<script>...</script>の
中に直接動作を書くことになるよね。しかしその時点では<img>がまだ
読み込まれてないから参照できない。だからtargetなんかも仕込めない。
どっちかというと画像をロードし終わったらaタグを挿入する方向に
した方がいいのでは。それならロード中にクリックしても何も起きない。
>>858 setTimeout で 100ミリ秒ごとにでも指定して、
bodyの中の最後のほうに書かれている特定の要素 (<div id="footer"> とか <address> とか)
が現れた時点で処理を開始、というようにすればどうかね。
function run () { if (run.flag) return; run.flag = true; alert('run'); };
run.flag = false;
function ready () {
if (document.getElementById('footer')) return run();
if (!run.flag) setTimeout(test, 100);
}
ready();
とか。
window.onload = run;
863 :
858 :2006/11/29(水) 15:18:06 ID:???
>>861 >冒頭で
ってのはheaderでってことでしょうかね。
>>858 にも書きましたがwikiなので
headerに自作スクリプトを仕込めないのですけど...
ちなみにHTML構造はフリーエリアのついてる適当なwikiのソースを見てくれれば分かると思うのですが
HTML形式で書きこみが解放されてるのはbodyのdiv内の一定領域だけです。
>画像をロードし終わったらaタグを挿入する方向にした方がいいのでは
これも、wiki書式に則って書いていて自分でaタグを仕込んでいるわけでなくCMSの方でアンカーに変換されます。
>>862 onloadイベントが発生する前の話です。
スクリプトの実行は、ドキュメント(HTML)ロード・画像ロードが完了してからonloadイベントが発生します。
>>863 ・・・ああ、
>>858 は
> (小細工すれば可能だけど) 色々小細工しなきゃいけないようでもっとスっきりできるメソッドとかないのでしょうか?
って質問だったのね。
じゃあ 「ねーよ」 ってことでいいかな。
865 :
858 :2006/11/29(水) 16:24:59 ID:???
>>864 それならそれでいいけど。
自己レスでスマソだが、色々やってみたらwin+IEな環境ですが、
グローバル領域でメソッド呼べばドキュメントロード後画像ロード前(中?)に
処理されました。deferがないと処理されるけど(alertはでた)画像ロードまで反映されないみたいですね。
<div><script defer type="text/javascript">
window.onload = piyo;
hoge();
function hoge(){document.getElementById("hoge").getElementsByTagName("a")[0].target='_blank';}
function piyo(){document.getElementById("hoge").getElementsByTagName("a")[1].target='_blank';}
</script></div>
866 :
Name_Not_Found :2006/11/29(水) 16:37:37 ID:X9AOfnuC
皆様お願いします。 ページが読み込まれるときにウインドウのスクロールバーやロケーションが消えるようにしたいのです。 お願いします。 新規ウインドウを開くときは以下のスクリプトでやってます。 <SCRIPT language="JavaScript"> <!-- function OpenWin(url){ win=window.open(url,"new","location=no,scrollbars=yes"); } // --> これは親ウインドウからの操作が必要ですのでどのページから開いてもこういうように なるように子ウインドウ側を操作したいのです。 説明下手ですみません。
>>866 できません。そんな迷惑なもん誰が使うかって感じ。
いきなり対象ページをURLから開いても、そのページのスクロールバーやロケーションを 消したいという事?
Firefox2.0で、setIntervalがうまく動きません。 <script> setInterval("alert(1)", 1000); </script> 例えばこのようにしても、間隔が空かずにアラートが開き続けてしまいます。 一定時間毎にある処理を繰り返す・・・をしたいのですが、何か方法は無いでしょうか。
乱暴な香具師だなw 新規ページを枠無しで開いて親ページを閉じるって手もあるが、嫌われるだけだじょ。
>>869 そりゃやり方がまずいんでしょ。
function test() {
alert('?'); setTimeout(test, 1000);
}
とかでやってみれば。
873 :
855 :2006/11/29(水) 20:37:26 ID:???
色々やってみたけどできない…… 誰か修正お願いします… <html> <head> <script type="text/javascript"> <!-- function t() { var bgimg = new Array('1.png','2.png','3.png'); document.getElementById('tdbg').style.backgroundImage = 'url('bgimg[Math.floor(Math.random()*bgimg.length)]')'; } --> </script> </head> <body onload="t()"> <table><tr> <td id="tdbg">AAAAAAA</td> <td>BBBBBBB</td> <td>CCCCCCC</td> <td id="tdbg">DDDDDDD</td> </tr></table> </body> </html>
>>873 'url(' + bgimg[Math.floor(Math.random()*bgimg.length)] + ')';
なんで+でつないどらんの?
あとidは一つ一つに別の名前つけるもんだお
875 :
855 :2006/11/29(水) 21:28:57 ID:???
<!--* はじめ *--> <table><tbody><tr><td> <div style="background:#999;margin:10px 0px 0px 10px"> <div style="border:1px solid #000;background:#fff;position:relative;top:-7px;left:-7px;width:480px"> <table cellspacing="0" cellpadding="0"><tbody><tr><td> <div style="padding:7px"> <a href="リンク先URL" target="_top"><img src="バナーのURL" border="0" width="幅(ピクセル)" height="高さ(ピクセル)"></a></div> </td><td style="border-left:1px solid #000;padding:7px;font-size:13px;color:#000;width:100%" onclick="window.open('リンク先URL')" onmouseover="this.style.backgroundColor='#ffbbbb'" onmouseout="this.style.backgroundColor='#fff'" align="center"> *ここにサイト名* <table><tbody><tr><td style="font-size:13px;color:#000"> *ここに紹介* </td></tr></tbody></table> </td></tr></tbody></table></div></div> </td></tr></tbody></table> <!--* おわり *--> このソースで右側のテーブルでマウスオーバーで色を変えるだけで リンクはジャンプしないようにするにはどうしたらいいのでしょうか。
877 :
Name_Not_Found :2006/11/30(木) 00:44:38 ID:qXidNjRW
Ajaxライブラリprototype.jsのソースを見ていたところ、 Ajax.Request = Class.create(); var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } という構成になっていましたが、 Ajax.Request = Class.create; var Class = { create: function() { this.initialize.apply(this, arguments); } } となっていないで、わざわざ関数を呼び出しているのは何故なのでしょうか。 ただの書き方の好みでしょうか。
>>877 俺はprototype.jsを見たことはないが、877の上と下とでは全然違う
それにしても汚いな。Classなんて誤解を招くオブジェクトを作らないで欲しい
879 :
877 :2006/11/30(木) 00:58:47 ID:qXidNjRW
すみません、追記です。
自分で試した内容としては
Ajax.Request.toString()は前者の場合に
create: function() {
this.initialize.apply(this, arguments);
}
でした。
また、Class.createを改変して、中にクラス内変数を設けて
a = Class.create()
b = Class.create()
a()
b()
でテストしたところ、同一のクラス変数を使用している、すなわち
クロージャの仕組みから、同一のインスタンスであると思われる結果になりました。
だったら、
>>877 の後者のように、いわゆるポインタを渡してあげるのでも
いいのではないかと思った次第です。
よろしくお願いします。
880 :
877 :2006/11/30(木) 01:00:52 ID:qXidNjRW
>>878 レスどうもです。
できれば、上と下がどのように違うか教えていただけないでしょうか。
>>876 IE6だが、マウスオーバーで色を変えるだけになっとるよ。
>リンクはジャンプしないようにするには
これが分からない。リンクを指定してなければ飛ばないはずだが。
onclickしなければ飛ばなかったけど。
>>866 ネスケ指定が入ってたけど
window.scrollbars.visible window.locationbar.visible
とか書いてあった。
でも権限がどうのというサイトもあった。
エロイ人詳しく。
>>877 その「後者」がいったい何を意味するのかしばらく考えさせられた。
更に
>>879 を読んで意味が分からなくなった。改変したんならその内容を書いてくれと。
何か勘違いしているような気がするが、
前者は常に新しく生成されたfunctionオブジェクトが帰ってくる。
A = Class.create();
B = Class.create();
C = Class.create();
例えばこのABCはそれぞれ別のオブジェクト。
後者はプログラム内に一つしか存在しない
Class.createというメソッドへの参照が入るだけ。何の意味があるの?
884 :
876 :2006/11/30(木) 12:47:19 ID:???
>>881 別のフレームの記述でエラーになっていたようです。
紛らわしいのでonclick="window.open('リンク先URL')"を削除して
使ってみます。
お調べありがとうございました。
885 :
866 :2006/11/30(木) 13:49:29 ID:hBaND1Je
887 :
Name_Not_Found :2006/11/30(木) 16:43:57 ID:qfEtdL3q
<FORM> <SELECT name="select" onChange="fnction(this.selectedValue)"> <OPTION value="A">A</OPTION> <OPTION value="B">B</OPTION> <OPTION value="C">C</OPTION> </SELECT> </FORM ドロップダウンリストを選択すると同時にfunction関数へvalueの値を 渡したいのですが、うまく行きません。 undefinedとなっているようです。 this.selectedValueをthis.selectedIndexにすれば上から順に0,1,2の値は取得できます。 どこがおかしいのでしょうか?
>>887 1 this.options[this.options.selectedIndex].value
2 this[this.selectedIndex].value
正確には1だと思うが2でも取得できるな
なんで?説明してエロイ人
this.options.selectedIndexとthis.selectedIndexで結果が同じになるということから察してほしい つまり、this自身がobj.optionsへの参照であり、かつメンバとしてoptionsも持っていると予想 本当はどうなっているのかは誰か教えて
>>888 それは仕様では規定されていないことだから
「ブラウザの実装がそうなっているから」としか言いようのない気が。
>>889 は間違い。この場合のthisとthis.optionsは別物。
this.options.optionsはundefinedになるでしょ。
っていうか元の質問に対してはthis.valueでいいじゃん。
this.options.options.options.options[this.options.options.options.selectedIndex].value IE6だとこれでも動作するわw firefoxは駄目。まあ仕様というものか。
>>890 >this.options.optionsはundefinedになるでしょ。
間違ってることは分かるが、俺の書いたのはoptionsがoptionsをメンバとして持ってるんじゃなくて、
thisがこのselectへの参照であり、かつこのselectのoptionsを持ってるんじゃないかって事
ところで、ブラウザの仕様といえば、selectのvalueはIEだとthis.valueだけでthis[this.selectedIndex].valueと同等になるんだったような
IE6.0やFF2.0だとうごくっぽいが
http://www.tohoho-web.com/lng/200001/00010245.htm
893 :
887 :2006/11/30(木) 18:13:50 ID:???
何かすごいことになっていますが・・・
>>888 氏の方法で動くようになりました
ありがとうございました
>>889-892 説明thx。勉強になりますた。
>>893 調べてみて初めて気づいたけどselectedIndexは正確にはselectのプロパティらしいんで
正攻法はこんなかんじのようだ。失礼した
this.options[this.selectedIndex].value
>>894 それいうんだったらselectのvalueもDOM1 HTMLから
定義されてるんだからthis.valueでいいんでは。
896 :
Name_Not_Found :2006/11/30(木) 19:58:19 ID:9RChZq5V
質問です。 「1.005」を小数点第3位で4捨5入しようとしたら豚でもないことに。 「1.01」にするMath.roundの仕方はあるんでしょうか。
>>896 Math.round(num*100)/100
898 :
896 :2006/11/30(木) 22:00:46 ID:???
>>897 ありがとうございます。それではうまくいきませんでした。
>>2 の4を30回読んでその意味をかみ締めろ
ついでに
>>4 の11に当てはまってないかも確認しろ
hhh
901 :
896 :2006/11/30(木) 23:33:34 ID:???
読んでみましたが方法は載っていませんでした。やり方を教えてほしいんです。 あるいは欠陥言語で永遠に真実にはたどり着けないものなのでしょうか。
>>901 バーロー
そういうことじゃない
>>899 は
>>2 の4、つまり「うまくいきませんでした」ではなく、
「(OS,ブラウザなどの環境)で試したところ、(前述の環境での実行orエラー結果)になりました」
と具体的にどううまくいかなかったのか検証可能なように書けといっている
さらに
>>4 の11では「小数計算は誤差が生じる可能性がある」ってことをいっている
で、
>>897 がうまくいかなかったのなら、小数第3位が整数になるように数値*1000をMath.floorしてから10で割ってMath.roundにいれればいい
903 :
877 :2006/12/01(金) 00:00:38 ID:SMaKPoC/
>何か勘違いしているような気がするが、 >前者は常に新しく生成されたfunctionオブジェクトが帰ってくる。 > A = Class.create(); > B = Class.create(); > C = Class.create(); >例えばこのABCはそれぞれ別のオブジェクト。 これが別のオブジェクトだと思う理由は何ですか?
>>901 どういう問題があったか書きなよ。それができないなら来るな。
そもそも1.005を完全に正確に表現できる処理系なんてC++だってJava
だってまずないと思うよ。言語が悪いんじゃなくてアンタが悪いね。
理解できないなら理解できるまで勉強しろ。さいなら。
>>903 反論した本人ではないけれど、多分、前者は無名関数をreturnしてるのがミソ
この場合のthisは無名関数を指すのでcreateを何度使っても競合しない
後者のcreate()はただひとつしかない関数でthisを使いまわすのはやめた方がいい
よく分からなかったら無名関数やクロージャについて調べるとわかるはず
>>903 前者のthisはcreate()でreturnしたときに新たに作られた関数のことだからいつでも別物
後者のthisはClass.createのこと
無名関数とかクロージャについて調べるといい
907 :
906 :2006/12/01(金) 00:27:41 ID:???
訂正: 後者のthisはClassのこと
908 :
877 :2006/12/01(金) 00:29:56 ID:SMaKPoC/
回答ありがとう。 こういうのを試してみました。 <html> <head> <script type="text/javascript"> <!-- var Class = { create: function() { return function() { if(this.hhh == null) this.hhh = ""; this.hhh += "Abc"; return this.hhh; } } } function t() { var a = Class.create(); var b = Class.create(); alert("1:"+a()); alert("2:"+b()); alert("3:"+a()); alert("4:"+b()); } --> </script> </head> <body onload="t()"> </body> </html> 結果からすると、aとbでthis.hhhを共有しているので、 同じ関数リテラルがabに格納されていると思うのですが・・・。
>>908 同一オブジェクトかどうかを調べる演算子「===」で調べてみなよ。
910 :
906 :2006/12/01(金) 00:34:17 ID:???
>>908 FF2.0やIE6.0では
1:Abc
2:AbcAbc
3:AbcAbcAbc
4:AbcAbcAbcAbc
となった
想定どおりでは?
911 :
906 :2006/12/01(金) 00:36:28 ID:???
さらに言うと、あくまでもthis.hhhはClass.hhhに過ぎないので、関数は別物かと
912 :
877 :2006/12/01(金) 00:37:25 ID:SMaKPoC/
>909 理由はさっぱり分かりませんが、すごく納得しました。 未熟ものですみませんでした。
>this.hhhはClass.hhhに過ぎない ?
>>908 その例だとa、bを関数として呼び出してるけど、
その場合関数内のthisはグローバルオブジェクト
(ブラウザ上ではwindow)を指すんだよ。
だからこの場合は
if(window.hhh == null) window.hhh = "";
window.hhh += "Abc";
return window.hhh
とやってるのと同じわけだ。
>>888 数年前に書いた。過去ログにあるはずだが、横着かましてんじゃねえぞ屑。
http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-94282980 > The contained options can be directly accessed
> through the select element as a collection.
あと、HTMLのイベント属性は特殊なヴェンダー仕様及び実装になっている。
HTMLのイベント属性値は、自動的に作られる匿名関数本体になるが、
この匿名関数直下でvalueを参照すれば、
まず、この匿名関数直下の局所変数またはこの匿名関数の引数から
valueという名前の変数または引数を探す。
引数はeventという名前決め打ちの物しかないから当てはまらない。
変数にもvalueが無ければ、大局変数を探す前に、thisのプロパティを探索する。
従って、thisを明示せずとも、valueと書くだけで、this.valueになる。
例えば、options及びselectedIndexと言う名前の局所変数を宣言してなければ、
options[selectedIndex].value と書くことも出来る。
>>896 一番間違いが無いのは、決して数値としての計算をしないこと。
要するに、掛けたり割ったりNumber#toFixed()したりMath.abs()しては駄目。
まず、toString()する。そして、自前で分岐して置換する。
>>916 そりゃいいけど足し算とかもできないんじゃねえ。
自分の書き込み見てほしかった915がくずけってい
>>912 理由は簡単で、関数リテラルはそこを実行するたびに新たな別の
関数オブジェクトを作って返すっていうだけ。ECMAに書いてあるよ。
まず仕様を読まなくちゃね。
877に何を説明しても無駄っぽい
ボディ内に書いたwindow.onloadイベントでDOMにアクセス出来ないのは 仕様なのかな?
KWSK
XHTML 1.1 上で document.write(document.lastModified); を実現させたいのでありますが、XHTML1.1でdocument.writeは動作しないそうで困っております。 <p id="last-modified">test</p> に document.getElementById("last-mofidied").innerHTML = document.lastModified; などと試してみても上手くいきません。DOMというものも一体何なのかわからず。 どのように書けば良いのでしょうか。
XHTML1.1を使わない
ちょっとそれはなしでお願いします。
document.lastModifiedを使わない
927 :
923 :2006/12/01(金) 21:25:37 ID:???
毎度手動で更新日時を書くのは少々面倒なため自動でやりたいのでありますが、 document.lastModifiedで何とか表示できませんでしょうか。
phpなりSSIじゃやだ?
古典的な愚問>document.lastModified
930 :
923 :2006/12/01(金) 23:10:03 ID:???
>>928 できればjavascriptでしたいと思いまして。
>>929 それはどういうことでしょうか?
XHTMLいじtったことないから適当だけれど <p id="last-modified">test</p> 以降、もしくはonloadで document.getElementById("last-mofidied").firstChild.data=document.lastModified; とかしてもNG? あと、前提だけど alert(document.lastModified); はもちろん出来ることを確認してるんだよね?
1秒ごとにsubmitしたいスクリプトなんですが <form>タグ内に <input type="button" onclick="setTnterval(submit(),1000)"> とやってみたのですが、ボタンを押しても一回だけsubmitされるだけで intervalでsubmitされません。 何がいけないのでしょうか。
submit してページが遷移される造りになっていれば 当然一回しか submit されないわな
934 :
923 :2006/12/01(金) 23:44:04 ID:???
>>931 ちょっと駄目のようです。
alertでちゃんと日時を返してくれるのは確認しております。
>>935 どっちにしてもページ遷移すればsetIntervalは無効さ
937 :
877 :2006/12/02(土) 00:46:21 ID:???
>>919 ありがとうございます。
そーですかぁ、仕様だったんですね。
なんか理屈から考えようとしてた(それ理屈?も間違ってたけど)のが間違いでした。
ECMA仕様書熟読してみます。
939 :
932 :2006/12/02(土) 01:37:19 ID:???
>>933 >>935 >>936 ありがとうございます。(Intervalはスペルミスでした)
ということは、1秒ごとにsubmitしたい場合はどのような方法が
一般的なのでしょうか?
>>939 意味がわからん
submit=ページが変わる
1度submitしたら基本的に別の画面に変わるもの
941 :
923 :2006/12/02(土) 01:54:15 ID:???
>>938 ご指摘ありがとうございます、修正したら見事表示されました。
本当に申し訳ございません、レスをくださった皆様ありがとうございました。
フレーム?
>>932 同じ内容を1秒ごとにsubmitする意味って?
超つかぬことをおききしまする。 「もし、AがBで、かつCだったら・・・」を表すには、 if (A=B){ if(A=C){ //いろいろいろいろ処理 } } と書くより他にないですか? CGIみたいにif文一個で終わらせられない物かと思ったのですが・・・ とほほリファレンスにはありませんでした。
if(A==B&&A==C){ //処理 } で十分
あ、なるほど。d楠。
>>945 プログラミングに慣れてない人間には一番わかりやすいってだけ。
#仕様書とか言われても見ても理解できんw
情報古くなってるかもしれないけど。。。
>>944 念のために言っておくとCGIとPerlは別物だからな。
Perl以外の言語でも(理論上はJavaScriptでも)CGIは作れるからな。
>>947 正直、とほほしか読めない奴には来て欲しくないな。
>>939 それ何に使うのか書きなよ。迷惑スクリプトは回答されないからね。
とほほ のどこがわかりやすいのかな? あれは情報が古いから、わかりやすくて嘘の無い別のサイトを作るときの参考までに教えて欲しい
>>945 えーとですね、とほほの良いところは、ズラーッと書いてあるところです。
で、悪いところは、情報が古い上に時々間違いが書いてあるところです。
それだけJSが進化してきたってことだ、喜ばしいじゃないか。
情報が古いとか間違いとかもあるけど、とほほで学ぶと 間違ったJavaScript像が身についてしまって有害なんでは と危惧している。熟読したわけじゃないけど、とほほで 勉強したとかいう厨房にはこのスレで山ほど遭遇したもんで。
KWSK for exm?
過去スレ全集→スレ内検索で「とほほ」を検索。
新スレは975超えたら。テンプレの参考サイトに
>>717 を追加ね。
まあここにいるやつらが俺も含めて とほほの批判はしても代わりになるサイトを 作ろうとしないっていうのもあるけどな。
mozillaと、msのサイト見ろ!で、済む事に、わざわざ労力を使う気にならない…
まっとうな奴→まっとうなドキュメントを見てまっとうに理解。 ダメな奴→ダメなドキュメントを見てさらにダメダメに。 ダメな奴が好むようにダメ風で、かつ内容がまっとうなサイト作り→至難の技。
ちょと、Safari使いいたら for (i in navigator) document.writeln( i, " = ", navigator[i] ); 晒してもらえないだろうか
961 :
Name_Not_Found :2006/12/02(土) 16:37:00 ID:HZhsw6+P
ページ開閉時に関数を呼ぶイベントハンドラのテストをしてみました。 onLoadは成功したのですがonUnLoadは失敗してしまいました。 原因がわかりません。 どなたか教えてください。よろしくお願いします。 <html> <head> <title>あかさたな</title> <script type="text/javascript"> <!-- function good(){ alert("aaaaa"); } function goodbye() { alert("aaaaa"); } //--> </script> </head> <body onLoad="good()" onUnLoad="goodbye()"> </body> </html>
962 :
Name_Not_Found :2006/12/02(土) 16:38:39 ID:HZhsw6+P
>>961 の失敗した具体的な内容は画面を閉じてもアラート画面が開かなかったことです。
あと、テストしたOSとブラウザは?
965 :
Name_Not_Found :2006/12/02(土) 16:54:30 ID:HZhsw6+P
>>963 それはテストしてません。
ブラウザはIE6でwindowsXPです。
好きな体位は? あと、体験人数は?
967 :
963 :2006/12/02(土) 16:59:24 ID:???
968 :
Name_Not_Found :2006/12/02(土) 17:02:28 ID:HZhsw6+P
969 :
963 :2006/12/02(土) 17:04:21 ID:???
例えばonunloadをonbeforeunloadにしてみる それでもだめなら諦める
bodyにonunloadとwindow.onunloadの違いも考えないとダメかも
過去の経験ではunloadを止めることは困難だったと記憶。 unload時に確実に何か動作させることも困難だったと記憶。
えーと、
>>971 の後者はちょっと自信なし。でもそうだったような気が。
973 :
Name_Not_Found :2006/12/02(土) 18:24:49 ID:a2H2EggP
Dojoを使って、スプリクト書いてるんだけど ドラッグ&ドロップで動かしたリストをAjaxで投げて、保存したい。 その際の位置関係とかは、自作しないといけない? 左右上下に動かして、順番とかかえるような なんか、このへんWEBで見つかんない。 詳しい方m(_ _)m
975 :
Name_Not_Found :2006/12/02(土) 18:55:01 ID:2z7/M7wg
はや師走ですね、こんにちは。 document.write( 3 + 4 ); はwrite()内を演算してしまいますが、演算させないでそのままの文字列と して表示させることはできますか?つまり、 document.write( 3 + 4 );が「7」ではなくて「3+4」と表示されるようにしたい のですが。
document.write( '3 + 4 ');
977 :
975 :2006/12/02(土) 19:40:53 ID:???
>976 ご回答恐れ入ります。 僕の説明が悪かったです。お聞きしたいのは関数ですね。つまり、 document.write( F(n) );でnが「3+4」となっている場合に、このwrite()の 結果が「3+4」と表示される関数はどう書けばよいのでしょうか。
>>977 不可能でしょ。引数を演算してしまうのはJavaScriptの言語仕様だから止められない。
Lisp系の言語とかだと引数を演算しないままもらう方法があったりするけどね。
979 :
Name_Not_Found :2006/12/02(土) 20:37:44 ID:a2H2EggP
>>973 英語マニュアル読んでみることにします・・
980 :
975 :2006/12/02(土) 20:55:19 ID:???
>>978 さん。コメントありがとうございました。そうですか。諦めます。
srcElementのDOM版はどうすればいいんでしょうか。
target
985 :
983 :2006/12/03(日) 15:54:10 ID:???
おいらに? ありがとうございました。
986 :
ななし :2006/12/03(日) 21:05:32 ID:3hE8D/sa
javascript:void(document.oncontextmenu=document.onselectstart=null);
991 :
ななし :2006/12/03(日) 23:02:05 ID:3hE8D/sa
>>987 具体的には何を使えばよいのでしょうか?
992 :
Name_Not_Found :2006/12/04(月) 13:29:21 ID:5e1ic5eo
JavaScriptでJSONのデータをevalして利用するのはわかるのですが、 JavaScriptからJSONデータを書き出すにはどうしたらいいでしょうか?
switch-caseでcase条件が和の場合の書き方って case 1|2|3 : はダメなんだね。どうやるの?
WinIEってイメージオブジェクトの使い回しに不具合が有るのは常識なのかな? 既に生成したイメージオブジェクトを一応deleteして新たに作ってsrcを指定して 読み込もうとしてもロードしたりしなかったり挙動不審でまいっちんぐ
>>995 switch(num){
case 1: case 2: case 3:
//
//処理
//
break
}
前スレ
1000なら初心者全員死亡
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。