JavaScript の質問用スレッド テンプレ
FAQ
- Q1. 開いた別窓/フレームの内容にアクセスできないのですが…
- ページ内容が別サーバの場合セキュリティ制約により絶対無理です。
- Q2. JavaScriptでローカルファイルを読み/書きたいのですが…
- Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに…
- Q3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが…
- セミコロンで複数の文を区切れます。onclick="foo();bar();"としましょう。
- Q4. document.write(...)でページ内容を追加したいのですが…
- 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。
部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、
(2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。
innerHTMLは非標準ですがIE、Opera、Safari、Gecko(N6/N7/Firefox等)で対応済。
- Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが…
- IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか
<div><table>...</table></div>
とでもしてdivのinnerHTMLを書き換えましょう。
- Q6. DOMでtable要素にtr要素を追加しても表示されないのですが…
- DOMでは(XHTML 1.x除く)tbody要素にtr要素を追加する必要があります。
tbody要素はtbodyタグを書いていなくても自動的に作成されます。
またはtable.insertRow()/tbody.insertRow()を使いましょう。
- Q7. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが…
- グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。
- Q8. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
- 「document.forms.myform.elements[変数名].value」でどぞ。
JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
- Q9. Aタグのonclickで動作指定してるのですが時々動きません…
- 「onclick="...;return false"」としないとページ移動しちゃうから。
- Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
- 取得には document.defaultView.getComputedStyle() を使う必要あり。
IEでは要素オブジェクトのプロパティcurrentStyleを使う。
- Q11. 100*1.15の結果が114.999…998となってしまうのですが…
- コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。
- Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが…
- IE7/Gecko/Opera/Safariのnew XMLHttpRequest()、IEの new ActiveXObject("Msxml2.XMLHTTP.6.0") (または"Msxml2.XMLHTTP.3.0") を使えばできます。古いブラウザだと隠しフレームに読むなどのワザが必要。
- Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
- IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();}; という風に無名関数を作りましょう。中に書かれたコードが実行されます。
- Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが、「"...this..."」とか「function(){...this...}」ではうまく行きません。
- それらが実行されるときはthisは別のもの(window等)を指してしまってる。
「function(x){return function(){...x...};}(this)」のようにthisを別の変数に束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中)
- Q15. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが…
- string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、offsetがマッチした位置、sが置き換え前の文字列全体になります。
- Q16. input type="file"の値を設定(参照)できないのですが…
- セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
- Q17. getElementById('ID名')や$('ID名')で要素が取れないのですが…
- コード実行時点でHTMLがそこまで読まれてない。onload中でやるとか。
リンク
- Validator
-
- HTML
-
- ECMAScript
-
- DOM
-
- JavaScript
-
- E4X (ECMAScript for XML)
-
- JScript/MSDN
-
- JSON
-