Home > webプログラム > javascript

12月24日 

javascript

javascriptのmatchで変数を抜き出す

文字列の中からパラメータを抜き出したいとき、

JAVASCRIPT:
  1. var hoge = "/member_id/29/".match(\/member_id\/(\d)\//);
  2. if (hoge != -1) {
  3.     var member_id = Regexp.$1;
  4. }

みたいな書き方が一般的だと思うんだけど、

JAVASCRIPT:
  1. var member_id = "/member_id/29/".match(\/member_id\/(\d)\//)[1];
  2. if (member_id != null) {
  3.     ...
  4. }

みたいな書き方も出来るよ、という覚え書き。
もち、複数の値を抽出したいときは前者の手法を使えば良し、ということで。

11月30日 

javascript

Google Mapで表示位置がおかしくてグレーが表示される時

急に気温が高下するこの季節、椎間板ヘルニアはもとより頸椎ヘルニアも目を覚まし猛威を振るってくれるので2,3日死んでることがあるんですが、今年のは微妙に軽症が続いててシンドイなーと思ってたら、週末に来てくれました。
息してるだけで吐きそうな頭痛w

これはいむら整体院に行くしか!w(日曜日はお休みですよ)

閑話休題。

最初は非表示にしておいて、ボタンを押したときにGoogle Map表示させたい、という時なんかに起き勝ちなんだけど、地図の中心位置がおかしくて、半分がグレーで地図が表示されない、などの症状。

原因は地図を表示させる要素のサイズがまだ確定してない状態でGoogle Mapの処理が走ると、変なサイズで初期化されちゃう、ということらしい。

そんな時は要素のサイズが確定したタイミングで

JAVASCRIPT:
  1. map.checkResize();

案外知らないもので、1ピクセル四方の要素を作ってみたり画面外に要素を置いておいて、とかいろいろ試してみたんですが、結局は上記の1行で済んでしまったというオチなのでありますorz

ちなみに、地図の読み込みが終わったかどうかは

JAVASCRIPT:
  1. var map = new GMap2(document.getElementById('map'));
  2. // その他初期化処理
  3. GEvent.addListener(map, "load", function() { ... });

ではイベントの登録が既に遅い(じゃいつ指定するのよ?と)、ということだそうで(というか使い方が違う?)、地図画像がすべて読み込まれたかどうかを

JAVASCRIPT:
  1. GEvent.addListener(map, "tilesloaded", function() { ... });

で取ることができます。

が一応、"undocumented(ドキュメントに記載されてない)"情報のようなので、将来的な動作が保証されるものではない、ということをご承知おき下さいませ。

Google Map API 小ネタでした。

07月29日 

javascript

IEでjavascriptでのsubmitが実行されない時

連日の妙なバタバタでお疲れ&返信の滞りがちな今日この頃です(関係者の皆様、申し訳ございません)。

そんな時にハマってしまった今回の一件。

「IE6でだけ、javascriptでsubmitさせてるのが効かない」

HTML:
  1. <a href="javascript:void(0);" onclick="hoge();">fuga</a>

JAVASCRIPT:
  1. function hoge() {
  2. ...
  3. document.form.submit();
  4. }

が、FirefoxやChromeでは動くのに、IE6だと動かない罠。

答えは簡単で、

JAVASCRIPT:
  1. function hoge() {
  2. ...
  3. document.form.submit();
  4. return false;
  5. }

末尾でfalseを返しましょう、とそんだけ。

ということで、これは癖を付けておかなくちゃ駄目ですね~

週末は、親族の法事やパノラマ撮影、先輩のお見舞い。今日は今日とてママパパ教室に駆り出され、沐浴のお勉強。そこで妊婦体験とか言いながら疑似体験パーツを着けて辱められウワァァ-----。゚(゚´Д`゚)゚。-----ン!!!!
帰ってから収穫したバジルを一杯使った晩飯を作って食ったらバタンQ(古い)。風呂から上がって復活して、一仕事終えたところであります。

家がバジル臭い。

07月18日 

javascript

jQueryでお手軽CSS制御(Chromeでのバグの話も)

CSSの制御というか、Classの制御というか。
CSSを直接触っちゃうより、Classを用意しておいて付加したり外したりのほうが何かと管理もしやすいでしょ?

JAVASCRIPT:
  1. (function($) {
  2.     $(document).ready(function() {
  3.         $('#target tr:odd').addClass('odd');
  4.     });
  5. })(jQuery);

targetというIDを持つテーブルの奇数行trにoddというクラスを追加してあげてます。
行数の多いテーブルだと、いちいち奇数行にクラスを指定してやるのも面倒だし、行の入れ替えが発生した日にゃぁ、アンタ。リアルで「キーッ!!!」って叫んじゃうってモンですよ。

Javascriptの使用がOKだったら、とてもとても助かるね。

でも例えば、テーブルが2つ続いてて、それらにも奇数行毎にClassを付加したい場合、単純に考えて…

JAVASCRIPT:
  1. $('table tr:odd').addClass('odd');

としてしまうんだけど、1つめのテーブルが奇数行(例として5)で終わってしまった場合、2つめのテーブルのtrは「リセットされて1から」ではなく「5の続きの6から」となってしまい、なぜか偶数行スタート(本来は1だから奇数)になってしまい、具合が悪いことになっちゃうんですね~困る。
(解決法、探り中。末尾に空の<tr></tr>入れちゃうのでもOK。だけど文法的にはNG)

さらにGoogle Chromeで発見した不具合。
複数の要素を指定する時、コンマ(,)でセレクタを区切れば同時に選択できるのですが、

JAVASCRIPT:
  1. $('table tr:odd, ul li:odd').addClass('odd');

IEやFirefoxでは意図したとおりの動きになってるんですが、Chromeだけは最初の要素しか識別してくれない。単純な解決方法は、

JAVASCRIPT:
  1. $('table tr:odd').addClass('odd');
  2. $('ul li:odd').addClass('odd');

2行に分割…orz
うーむ、ちょっと切ないですね…

ちょっと検証が甘いですが、便利なjQueryもちょっとした落とし穴が用意されていますよ…というお話しでした。それでも便利すぎて手から離せないjQueryなのです。罪なヤツ。

06月29日 

javascript

jQueryネタで喋ってきました

二宮さん(design studio PENCIL)から「jQueryネタで1時間喋れ」とお達しが来てしまったので、京都で立ち上がったグループ「Web★Choco@KYOTO」でデザイナーさん向けのjQuery導入をテーマに喋ってきました。

資料作りの最中に紆余曲折あり、当初予定していた手法でのプレゼン資料ではなく、パワーポイントで作り直すハメに。これが当日の午前3時。そこからコピペ&原稿追加&アニメーションなどの調整をして、5時半に就寝。早めに起きて再調整。

早めに出て、嫁と外で飯を食ってから行こうと思ったけど結局その余裕もなく、一緒に家を出たものの1本早い電車に乗って、京都は烏丸にある会場「ちおん舎」に向かいました。
天然方向音痴の自分は、当然の如く駅を出て逆に進んでしまい、なかなかの距離を歩いて目的地へ到着。京都の歴史ある建物でのプレゼンです。とても雰囲気が良いです。

しばらく皆さんが集まるのを待って会が始まりました。
スピーカー1人目は二宮さんで、タイポグラフィーの話。

が、資料の最終確認と調整をしてたので、あまり聞いてません(爆)

1つめのレクチャー終了後、自己紹介タイムと休憩時間。当初喋らないはずだった自己紹介も急遽喋ることになり。。。あまり何を喋ったのか覚えてません。休憩時間も手直しやら眠いやら…
そうこうしてたら自分が喋る番になって。

今回は、「過去にトライしたけど挫折した」、「これからちょっと始めてみたい」、というデザイナーさんに向けた内容を心がけてたので、ちょっと自分としては使用するのが微妙な表現方法なども織り交ぜてしまいながらのプレゼンでした(本職のプログラマーさんからすれば反感買うかもしれない的な)。

順を追って見てもらって、考え方や雰囲気を掴んでもらえたらイイかな?という期待を込めて、これまた予定していなかったライブコーディング(実際にその場でコードを書きながら説明する)をやることにしました(決めたのは当日の午前5時w)。

緊張していないように見えて実は相当しているので、ライブコーディングで単純なミスにすぐに気付くことが出来ず大焦りしてしまった場面が。しかし、スピーカーから「あれが悪いんじゃない?」とか声を上げて下さったので、「これはいい(ニヤリ)」と、“みんなでバグを探して考えてみよう“的な流れに無理矢理持ち込んでみたところ、結構な盛り上がりになってくれてシメシメ。
思わぬ所で、雨降って地固まるというか雨のあとは上天気というか。

持ち時間も数分オーバーで収まって、なかなか良いプレゼンだったのではないかな?と、終わった後に声を掛けて下さったリスナーの方達の反応からも伺うことができた気がします。

んで、質問タイムの時に出た「初心者にお勧めの書籍も紹介すべきでは?」という事だったので今日、本屋に行って立ち読んできました。あまり冊数は無かったのですが、その中でも自分的に良書だな、と思ったのはMYCOM BOOKSの「実践!Ajaxフレームワーク jQuery」です。“Ajax“と入っているので、初心者向けとは異なるのかな?と思ったんですけど、意外とそうでもなく今回のプレゼント併せて読むとイイ感じなのでは無いかな?という印象でした。
興味のある方は読んでみて下さいね。

当日使用した資料は、Web★Choco@KYOTOのサイトにあるのですが、登録とかしてなくても見られるのかな?
興味のある方はご覧下さい。

まー、そんなに喋れるネタを持ち合わせている訳では無いのですが、またこういう機会を与えていただければ喋ってみたいと思います。

たぶんVol.2とかもやるのだと思うので、興味のある方はmixiのコミュニティーなど参加してみては如何でしょうか?

06月26日 

javascript

Google Maps API Ver.3を使ってみよう

Mac miniを買いに梅田まで出たものの、売る気の全くない売り場構成&定価販売で買うのが負けな気がしたので買わずに帰ってきました。交通費を考えると、どんどん通販との差が無くなってきてます…orz

ということで今日は技術ネタ、と言えないくらい簡単に使えるようになってしまったGoogle MapsのVer.3の簡単すぎる導入のお話しを。

これまでGoogle Mapは、使用するサイトのURLに対する一意のコードをGoogleから取得して使用してました。なのでローカル開発環境、テスト環境、本番環境とコードを取得しないといけない場合もあって、結構面倒な場面も。。。
Ver.3からはこのコードが廃止されたので、そんなこたぁ気にせずに使えるようになったのです!(ひゅーひゅー!太っ腹~)

さらに、これまで行われてきた細かいバージョンアップで煩雑化していた箇所が大幅にブラッシュアップされて結構素直に使えるような印象です(そこまで深く触ってないのですが…)。

ということで今回は簡単に地図を表示するまでを見てみたいと思います。
続きを読む »

02月09日 

javascript

javascriptでOOPとjQuery

JavascriptをOOPで、jQueryを組み合わせて使おうとした時にハマった沼からの脱出方法例。

JavaScript:
  1. var hoge = {
  2.     fuga : function() {
  3.         jQuery.ajax( {
  4.             url:'hogehoge.xml',
  5.             success:onSuccess
  6.         });
  7.     },
  8.     onSuccess :function(data) {
  9.         ...
  10.     },
  11.     ...
  12. }

だとバッチリコケる。

そんな時は

JavaScript:
  1. jQuery.scope = function(target, func){ return function() { func.apply(target, arguments); }};
  2. var hoge = {
  3.     fuga : function() {
  4.         var obj = this;
  5.         jQuery.ajax( {
  6.             url:'hogehoge.xml',
  7.             success:jQuery.scope(this, obj.onSuccess)
  8.         });
  9.     },
  10.     onSuccess :function(data) {
  11.         ...
  12.     },
  13.     ...
  14. }

てな感じにすればOK、という場当たり的な対処法。ちょっと「var obj = this;」的なところが駄目っぽさ満載。

参考ページ

02月02日 

javascript

jQueryでonclick

リクリチャットでjQueryの事を喋るなら、このエントリの基礎みたいな感じ。でも今回も喋る人が多そうだから自粛しようかな。

さて。
例えばAJAXでXMLを引っ張ってきて、DOMで要素を追加して、そいつをクリックしたらイベントを駆動させる、というシチュエーションの時。

jQuery.each(data, function(i, dat) {
  jQuery('<a/>')
    .attr('class', 'hoge')
    .attr('href', 'javascript:void(0)')
    .attr('onclick', 'fuga('+dat.id+')')
  )
  .append('to')
)};

は、Firefoxだと動く。Chromeだとonclick属性が入らず動かない。

jQuery.each(data, function(i, dat) {
  jQuery('<a/>')
    .attr('class', 'hoge')
    .attr('href', 'javascript:void(0)')
    .click(function() {fuga(dat.id);})
  )
  .append('to')
)};

は動く。Chromeでも。

でもタブンもうちょっとスマートにするなら、

jQuery.each(data, function(i, dat) {
  jQuery('<a/>')
    .attr('id', 'btn_fuga')
    .attr('class', 'hoge')
    .attr('href', 'javascript:void(0)')
    .attr('rel', dat.id)
  )
  .append('to')
)};
jQuery('#btn_fuga').click(
  fuga(jQuery(this).attr('rel'));
);

てな感じか。検証してない&突っ込みどころ満載かと思いますので、各自で勉強して下さいな。
jQueryマンセー!だけど、微妙な部分があるのもまた事実。

12月08日 

javascript

覚え書き

SexyLightbox2とTinyMCEとjQuery

部屋とYシャツと私。
ドツボと原因究明とシステム作り直し。orz

SexyLightbox2(以下SLB)はajaxでhtmlを引っ張ってきてゴニョゴニョを勝手にやってくれるので、最近SLBどっぷりだしシステムにも組み込んじゃえ、と今作ってるシステムのフォームをajax駆使して表示してみたりしたらセキュリティの問題も(モロCSRF弱くなる)出てきて、対応策考えたり(ワンタイムトークン仕込んだり)で結構面白いことになってるんだけど、バッチリはまりましたよ、罠に。。。

続きを読む »

« 前の記事