+ JavaScript の質問用スレッド vol.51 +
新スレは975超えたら。テンプレ(とくに2レスに分けるFAQ)の意見は
お早めに。
953 :
Name_Not_Found:2006/10/21(土) 08:43:42 ID:RIMO9wU9
document上にオブジェクトを生成する場合、appendChildで追加できますが、
その元になるHTMLのオブジェクトをJavaScriptで作るにはどうすればよいの
でしょうか。
var t=document.cereateElement('div');
document.appendChild(t);
だとクラッシュします。
>>953 クラッシュしねーよ、ただエラーが出るだけだよ
頼むからエラーメッセージくらい読もうぜ
955 :
953:2006/10/21(土) 09:52:50 ID:???
>>954 失礼しました。ページが破棄されるのでついクラッシュと書いてしまいました。
お答えよろしくお願いします。
>>946 >DOM3 Eventsにいたっても異なるイベントグループ間での
>リスナの呼び出し順は不定なんで、
論点がそれてるよw
>実際prototype.jsやMochiKitなど
>よく使われるライブラリでも特に管理してませんし。
だから?
バグを真似しろとでも?w
>>953 質問の意味が分からない。何をしたいのかも分からない。
javascrictのリンクとハイパーリンクは何処がどう違うんですか?
>>958 「javascriptのリンク」って言うのは<a href="javascript:...">ってやつのこと?
もしそうだとしたら……「ハイパーリンク」は実行すると指定されたページに飛ぶけど
「javascriptのリンク」は実行するとhrefに指定されたJavaScriptが実行される、って説明でOK?
>>956 じゃあこれでどうでしょ。
Q14. ひとつのオブジェクトに複数のイベントを追加したいのですが…
A14. obj.onxxx=funcではなく、obj.addEventListener('xxx',func,false)
(IEではobj.attachEvent('onxxx',func))を使いましょう。ただしIEではイベントを
複数指定したときの実行順は不定です。順番が大切なら自分で管理しましょう。
それからこれは俺の勝手な想像だが、prototype.jsやMochiKit、Yahoo! UIなどで
これに対する対策がとられていないのは、開発者がこの問題を認識していない
からではなくて、彼らがこのことを重要な問題とは捉えてないからだと思う。
言うならば妥協。リスナの実行順が重要になる場面ってあんまりないと思うし。
結論が出ないようならFAQの改訂は無理だということになるが。
>>959 said
「javascriptのリンク」は実行するとhrefに指定されたJavaScriptが実行される、
どこでそんなこと習ってきたの?
a href と onclick の挙動がおなじだったりして
a onclick = javascript: と a href = はおなじだろ
>>962 <a href="javascript:alert('href')">href</a>
<a onclick="alert('onclick')">onclick</a>
<a href="javascript:alert('href')" onclick="alert('onclick')">href&onclick</a>
じゃFAQ14,15あたり? はとりあえず審議中で分断するか、
外してしまうかしときゃいいじゃん。
obj.onxxx=function(){a();b();c()}
obj.addEventListener('xxx',function(){a();b();c()},false)
で何がダメなの?
>>962 <a href="javascript:'GoodBy!'">Hello!</a>
967 :
Name_Not_Found:2006/10/21(土) 16:03:50 ID:o4WDMAy4
正直
>>947は天才だと思う。
この野球ゲーム、完成させようぜっ!
>>947 よくアドバイスしたいんだけど、タイミングがどうおかしいんだ?
969 :
Name_Not_Found:2006/10/21(土) 16:31:08 ID:0RpVgaQM
ページのどのあたりがクリックされたかを解析したいと思い
JavaScriptでWindowサイズと、クリックした座標を取得し、コンテンツの横幅を設定し
そこから割り出そうと思っているのですが、ページをスクロールされている場合、
高さを割り出すことができずに困っています。
どうにかこうにかなりませんか?
あるタグが画面のしたほうにあったとして、それをユーザがスクロールして
画面に入ったときイベントを発生させたいのですが、やり方がありましたら
教えてください。
お願いします。
タグが画面にあるかどうかはわからんね
だってタグだよ?
【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が置き換え前の文字列全体になります。
>>968,974
右バッターなので、早くふるとレフトに飛んで遅くふるとライトに飛ぶように
しているのですがいまくいきません
それ以前球の当たりがまったくおかしいのです
バットがボールにあたってないのでヒットになったりと・・・
979 :
Name_Not_Found:2006/10/21(土) 21:23:50 ID:24MI3M23
質問です。
o={a:'b'}とo={'a':'b'}のちがいについて教えてください。
>>977 処理の概要書いてくれないと読むのちょっとしんどい。
見た感じ、「プレイ」を放してからのボール到達時間は一定。
「打つ」を放してからのスイングは一定みたいなので、
2つのボタンを放した時の時間差分で、結果は作れるように思う。
変化球追加してもそれは同様。
>>979 それはまったく同等。フィールド名を''で囲めるようになっている
のは、名前でない(数字や記号などの)フィールド名が使えるように
するためだけど、普通の名前のときも囲んでも別にいい。
フィールド名じゃなくプロパティ名だろとかの突っ込みはご勘弁を。
>>980 失礼しました
処理の概要はおっしゃる通りです
実際には、GIFアニメを使っているので、ボールがホームベース上にいくコマのタイミング
とバットを振ったときに、ホームベース上にいくコマのタイミングが合致したらボールが
飛ぶというGIFアニメに変更しています。
そのときに、タミングが多少早いとレフト方向に飛ぶGIFアニメ、遅いとライト方向に飛ぶGIFアニメ
に差し替えています。
ここのスレを教えてもらったスレでのアドバイスは「i_Disp1」の数値加算がうまくいってないのでは
とのことです。
こんな感じで質問の内容わかるでしょうか?
983 :
Name_Not_Found:2006/10/21(土) 22:50:26 ID:24MI3M23
My result is this :
Prototype.js is junk.
>>982 じゃ、内部処理としては問題なし、ということかな?
問題は見た目。内部処理と見た目の隔たりだけということ?
テキストボックスの中に入れる数値が未入力だと=ボタンを
押した時に”未入力です”と表示させたいのですが、
どうがんばってもポップアラートがでません。
どこがおかしいのか教えていただけないでしょうか?
987 :
986:2006/10/22(日) 00:42:10 ID:???
<script type="text/javascript">
<!--
function keisan(){
var f = document.f1;
var v1 = eval(f.t1.value);
var v2 = eval(f.t2.value);
switch(f.color2.value){
case "+" :
document.f1.t3.value = v1 + v2;
break;
case "−" :
document.f1.t3.value = v1 - v2;
break;
case "×" :
document.f1.t3.value = v1 * v2;
break;
case "÷" :
document.f1.t3.value = v1 / v2;
break;}
function blankCheck(){
if(document.f1.t1.value==""){
alert("未入力です");
return false;}
if(document.f1.t2.value==""){
alert("未入力です");
return false;}
}
}
//-->
</script>
988 :
986:2006/10/22(日) 00:42:47 ID:???
</head>
<body>
<form name="f1" onSubmit="return blankCheck()">
<input type="text" size="5" name="t1">
<select name="color2">
<option value="+">+</option>
<option value="−">−</option>
<option value="×">×</option>
<option value="÷">÷</option>
</select>
<input type="text" size="5" name="t2">
<input type="button" value="=" onClick="keisan()">
<input type="text" size="5" name="t3">
</form>
</body>
</html>
989 :
948:2006/10/22(日) 06:51:16 ID:rJb00/3P
>>951 OnBeforeUnloadだとダイアログ出すことは出来ますが、
そのままブラウザ閉じられた場合に関数を実行できません。
window.addEventListener('beforeunload', '関数名', true)
のようにしてもそのまま閉じられた場合はFirefoxではアクションを検知しません。
何か対策はありますでしょうか・・・。
>>984 内部処理として問題なしかどうかが私的に?なんです
すいません。
以下の加算するのがうまくいかずタミングがづれている感じです
デバッグでステータス場合に値を表示しているのでそれでわかるのではと思います。
i_Str = parseFloat(i_Str)+0.01;
いかがでしょう?
>>990 setTimeoutで指定した関数が呼ばれるタイミングは保障されていないんだから、その処理では無理。
>>974では時間差分で判定してるけど、それじゃだめなの?
>>986 <form name="f1" onSubmit="return blankCheck()">のonsubmit〜はいらない
<input type="button" value="=" onClick="keisan()"> を
<input type="button" value="=" onClick="blankCheck() && keisan()">
この書き方がジャヴァスクリプトで出来たか記憶があいまいだけど・・・
javascriptの論理積って左から評価されること、偽があればそこで評価を終えることは保障されてる?
>>992 保証されているとも。でも「onclick="return blankCheck() && keisan()"」だね。
>>993なんでreturnすんの?サブミットボタンじゃないんだぜ?
あれ、フォーム内のただのボタンでもサブミットされるんだっけ?
よーし、今度はパパが1000ゲットするぞ。
>>974 失礼しました。
修正版をアップしてくれてたんですね
なかなかいいですね
打った瞬間スローになるところも
ありがとうございます
このあとは、それぞれとんだ方向のGIFに切り替わりホームランかどうかランダム?
に判定してその結果をGIFに反映させるという感じです。
あとは、ポール際のシーンもあって、ファールかホームランかの微妙なGIFも使いたいと思っています
そのシーンのGIFはまったく作ってないですが
>>991 ってことで
>>947さんが修正してくれた感じでいいと思います
f
t
p
1000ならJSONP
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。