page_adsence

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