page_adsence

2009年6月16日火曜日

cookieに関して

いつも忘れるのでメモ
cookieは異なるドメイン間での受け渡しはセキュリティの観点からできてはいけない。
document.cookieにドメインを設定する項目があるが、
実際にドメインを超えれるわけではない。
cookieの値をドメイン超えて受け渡すのであれば、
hiddenに入れてPOSTするとか、クエリにつけて送るとかしないと無理。
それを受け取って保存するとかという方法をとればできなくはない。
しかし、現在あるAPIに対してのアクセスなどの実際にそのドメインに遷移せずに、
処理を実行するような場合はできない。

2009年6月9日火曜日

window.onloadとdomready.js

domready.jsはDOM 読み込み完了のタイミングで、任意の関数を実行できるようにするJavaScriptライブラリ。
対応ブラウザは以下の通り

  • IE 7 (XP standalone)
  • IE 6 SP2
  • Firefox 2.0.0.4
  • Opera 9.21
  • Safari 2.0.4
  • Mac Firefox 2.0.0.4
  • Mac IE 5.2.3


ただし、Mac IEではwindow.onloadを代用するように実装されている。

ajax系の処理をする場合は大体window.onloadイベントが発生するのを待って処理するようにしている。
ただ、window.onloadというのはDOMツリーの構築を待つだけじゃなく、すべての画像の読み込みも待ってしまう。
これではせっかくajaxを使っているのに、もったいない。

なのでJqueryを使うのであれば$(function(){})もしくは$(document).ready()を使う。
このほうが画像のロードとか待たなくていいので早い。

2009年4月24日金曜日

valueの書き換えに関して

Jqueryでinput textに入っている値をkeyupのイベントのタイミングで書き換えを行っていたら、
カーソルが強制的に文末に移動してしまうという現象があった。
発祥したブラウザはIE7のみ

コードは以下の通り。
$('input:text').bind('keyup', function(){
    var input_text = $(this).val();
    $(this).val( parseInt(input_text) );
})

どうもvalueを書き換えると、勝手にフォーカスを移動させるという
おせっかい仕様のせいらしい。

2009年4月22日水曜日

parseIntに関して

parseInt( number, 10 );

とやると10進数の数値型に直してくれるが、
以下のような数字を040から40にしたい場合にそのままparseIntすると問題があるので、
toStringしてから変換すること。
var a = 040;
var b = parseInt( a, 10 );
alert(b);

var a = 040;
var b = parseInt( a.toString(), 10 );
alert(b);

2009年4月21日火曜日

Jqueryのチェックボックス

$(':checkbox').val([1,2,3,4])

でcheckboxを一括で:checkedにできる。

select[multiple="multiple"]

でも同じようにできる。
指定された値以外の項目は

:not(:checked)

になる。

ってさ。
へー、速度が気になる所だけど、これ結構便利かも。

ajaxの通信時ステータスについて

XMLHttpRequest内にはreadyStateというプロパティがあり、
それは0~4でステータスが切り替わるたびに、この数字が切り替わる。

readyStateの詳細は以下の通り。
0 : open()は呼び出されていない。
1 : open()は呼び出されたが、send()は呼び出されてない。
2 : send()は呼び出されたが、サーバからのレスポンスはまだ返ってきてない。
3 : サーバからのデータを受信中。
4 : サーバからのレスポンスの受信が完了した。

readyState==3の時にはFirefoxとIEで挙動が変わる。
Firefoxに関しては通信中に何度もonreadystatechangeが呼ばれるが、
IEではステータスが切り替わったタイミングで1度だけ呼ばれる。

var request = HTTP.newRequest();
request.onreadystatechange = function(){
    if ( request.readyState == 4 ) {
        /* request complete */
    }
}

javascript 高速化

switch caseで文字列の比較ではなく、hashを用意して数値として比較したほうが早くなる。
但し文字列を、charAt() や charCodeAt() で数値化してから比較しようとすると関数呼び出しコストがかかる為、予想に反して遅くなる。

■参考URL
http://d.hatena.ne.jp/uupaa/20081029/1225223181

2009年4月20日月曜日

jqueryによる$.ajax通信の終了を取得するには

$.activeを使うと可能。
$.activeにはajaxの通信中の数が格納されており、
0になるタイミングで全ての処理が終わったことなる。

参考ページ
http://hkom.blog1.fc2.com/blog-entry-648.html

http://gihyo.jp/dev/feature/01/jquery/0012?page=3