Archive for 11月, 2009

このページの目次

jQueryの.is(expr)にはめられた

月曜日, 11月 9th, 2009

こんにちは、なかわけです。

今日はjQueryの.is(expr)にはめられました。
実装したかったのはoption要素にselected=”selected”があれば、
ある処理をするというもの。

$(function(){
    if($('select option').is('[selected="selected"]')){
        console.log('exist');
    }else{
        console.log('not found');
    }
});
<select>
    <option value="0">Chocolate</option>
    <option value="1" selected="selected">Donut</option>
    <option value="2">Ice cream</option>
</select>

これを実行するとコンソールに’not found’が表示されます・・。
悩んだ挙句、後輩に相談。

どうやら、.is()はoption要素3つに対して判別を行っていたらしく、
false, true, falseが戻っていたらしく、
3番目のfalseがif()にかけられて’not found’が表示されていたようです。

ちくしょー。

で、とりあえず今回は selected=”selected”があるかないかだけ知りたかったので、
以下のように書いて対応しました。

$(function(){
    if($('select[name="nationality"] option[selected="selected"]').length){
        console.log('exist');
    }else{
        console.log('not found');
    }
});

自分が未熟なのがいけないんだけど、よくこういう問題にはめられる気がする・・・。
頼りない先輩ですまん・・・(´・ω・`)

Javascriptって2次元の連想配列できないの?

金曜日, 11月 6th, 2009

こんにちは、なかわけです。

今日仕事中にJavascriptにハメられたことをメモ。
メモしておけば同じ過ちをしないと思ったので。

2次元の連想配列が作りたくで以下のように書きました。

//TypeA
TypeA = {};
TypeA['hoge']['fuga'] = 'piyo';
alert(TypeA['hoge']['fuga']);

こうすると、alertはでないし、なかわけの環境ではスクリプトエラーも出ませんでした。
おかしいなあと思って、その時はとりあえず1次元の連想配列でやり過ごしました。

お家帰って思いつきました。
TypeA = {};
はObjectであっても、
TypeA['hoge']
はObjectではないのでfugaプロパティが追加できない(配列的に扱えない)!

てことで、以下

//TypeB
TypeB = {};
TypeB['hoge'] = {fuga : 'piyo'};
alert(TypeB['hoge']['fuga']);

のように書くか、もしくは

//typeC
TypeC = {};
TypeC['hoge'] = {};
TypeC['hoge']['fuga'] = 'piyo'
alert(TypeC['hoge']['fuga']);

のように書く必要があったのですね。
あーしょうもないことに時間費やした・・・。
でも、ここにメモしたので一生忘れない!