トップ 一覧 検索 ヘルプ RSS ログイン

JavaScript Memoの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!ポイント
!for(var i in Array) でiに入る数字は文字列型
配列も内部的には連想配列になってることがよく分かる。
(キーイベント系は内容が古すぎるので消去 書き直したのはこっち。http://d.hatena.ne.jp/zide/20071114)

!setTimeout, setIntervalの第一引数はglobal
globalに適当な変数を用意してthisを代入するととりあえず解決。

http://www.tohoho-web.com/lng/b200005/00050013.htm

!HTML側で宣言したcharsetと違うとIEではエラーが出る
当たり前

!©などの実体参照をページ表示後に埋め込もうとするとレンダリング時に展開できずにエラーを起こす
どうやって展開させればいいんだろう

!!!キー入力の問題
!!IE
*argumentは使えずobjectのみ
*keyCodeのみ使用

!制御文字
*そもそもonkeydownしか呼ばれない
*onkeydownでfalseを返すとキー入力無効化
*onkeypressは呼ばれないのでonkeypressでfalseを返そうが無駄

!普通の文字
*onkeydown→onkeypressで呼ぶ
*onkeydownでfalseを返すとonkeypressは呼ばれない キー入力も無効化
*onkeypressでfalseを返すとキー入力無効化
*onkeydownとonkeypressで返すkeyCodeが違う onkeydownではキーコード, keypressでは文字コード

!適した実装
*制御文字はonkeydownで処理→falseを返す
*普通の文字はonkeypressで処理→falseを返す
**制御文字では呼ばれないので判別不要 40=')'と考えてよい
!!Firefox
*argumentのみでobjectを参照するとエラー
*keyCodeとcharCodeを場合に応じて両方使用

!制御文字
*onkeydown→onkeypressで呼ぶ
*onkeydownでfalseを返しても意味なし
*onkeypressでfalseを返すとキー入力無効化
*onkeydown, onkeypress共にkeyCodeでキーコードを返す

!普通の文字
*onkeydown→onkeypressで呼ぶ
*onkeydownでfalseを返しても意味なし
*onkeypressでfalseを返すとキー入力無効化
*onkeydownではどの文字が押されたか取得不可
*onkeypressのcharCodeで文字コード取得のみ可能

!適した実装
*onkeydownでは何もしない
**onkeydownで制御文字の処理は可能であるが入力を殺すためにonkeypressでの処理も必要なのでめんどくさい
*onkeypressでkeyCodeが入っていれば制御文字の処理, charCodeが入っていれば普通の文字の処理→falseを返す
!!WinOpera
*MacOperaはやっぱりダメな気がするので相手にしない

*argument, object両方使用可 同じオブジェクトを指していると思われる
*keyCodeのみ使用

!制御文字
*onkeydown→onkeypressで呼ぶ
*onkeydownでfalseを返しても意味なし
*キー入力無効化は無理
*onkeydown, onkeypress共にkeyCodeでキーの番号を返す

!普通の文字
*onkeydown→onkeypressで呼ぶ
*onkeydownでfalseを返しても意味なし
*onkeypressでfalseを返すとキー入力無効化
*onkeydownではキーコード, onkeypressでは文字コード
!!!問題
!非文字キー(主にBS)の動作の違い
*IE
**非文字だとonKeyDownのみ呼ぶ
**onKeyDownでfalseを返すと殺せる
**onKeyDown処理中に発生したHTML部品を消すとdocumentにイベントが継承→BSだとページが戻る
*Mozilla
**非文字でもonKeyDown→onKeyPressの順で呼ぶ
**onKeyDownでfalseを返してもonKeyPressが呼ばれて効く。onKeyPressで殺す。
**onKeyDown中にフォーカスを移動した先でonKeyPressが効く。
*Opera
**基本はMozilla準拠
**どこでfalseを返しても殺せない
***ダミー部品にフォーカスを渡してsetTimeoutでフォーカスを戻す

!Operaのフォーカス移動
*1回目のフォーカス移動が効かない

!Operaのリサイズ
*tdの中身の幅を変更しても追随してくれない気がする

!!!ライブラリ
!http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm
*ライブラリ使用者から見てベクターグラフィックを実現。中身は力技。

!http://xinha.python-hosting.com/
*JavaScriptでWYSIWYG HTMLエディット。

!http://www1.chapman.edu/~jipsen/mathml/asciimath.html
JavaScriptでLaTeX→MathML変換。サーバ要らず。ライブで表示。

{{category TechMemo}}