MW211 EXIT

devlog
JavaScript/コールバック関数の変数スコープ
2012年09月20日
以下のようにコールバック関数にグローバル的な変数valueを引き渡すことは
直書きだと可能だ。
┌──────────────────────────────────────┐
│function main() {                                                           │
│    var value = 1;                                                          │
│    $.getJSON(url,                                                          │
│              function(json) {                                              │
│                  alert(value);                                             │
│              }                                                             │
│    );                                                                      │
│}                                                                           │
└──────────────────────────────────────┘

しかし、コールバック関数を外に出すと、引き渡すことはできない。
┌──────────────────────────────────────┐
│function main() {                                                           │
│    var value = 1;                                                          │
│    $.getJSON(url,                                                          │
│              sub                                                           │
│    );                                                                      │
│}                                                                           │
├──────────────────────────────────────┤
│function sub(json) {                                                        │
│    alert(value);                                                           │
│}                                                                           │
└──────────────────────────────────────┘

本格的にグローバル変数にしてしまえばなんとでもなるが、
安易な濫用は避けたいところ。

ってことで、妥協案は以下の通りか。
┌──────────────────────────────────────┐
│function main() {                                                           │
│    var value = 1;                                                          │
│    $.getJSON(url,                                                          │
│              function(json) {                                              │
│                  sub(json, value);                                         │
│              }                                                             │
│    );                                                                      │
│}                                                                           │
├──────────────────────────────────────┤
│function sub(json, value) {                                                 │
│    alert(value);                                                           │
│}                                                                           │
└──────────────────────────────────────┘
コールバック関数に長々と記述するのを避けることはできる。

もっといい方法があるんだろうな、きっと。
分類:JavaScript、jQuery
CSS/自動改行
2012年09月18日
tdタグとかに適当に文字を出力して、いい感じに改行して欲しい場合、
その指定が結構ややこしいことに気づいた。

結論から言えば、以下の通り。
┌──────────────────────────────────────┐
│td {                                                                        │
│    white-space         :normal;                                            │
│    word-break          :break-all;                                         │
│}                                                                           │
└──────────────────────────────────────┘
Firefox向けに「word-break:break-all;」も付けてやんないとダメみたい。
分類:CSS
PostgreSQL/列幅縮小
2012年09月17日
例えば16バイトの文字列を8バイトとする場合は、以下のような感じ。
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 列 = SUBSTR(列, 1, 8);                                              │
├──────────────────────────────────────┤
│ALTER TABLE 表                                                              │
│    ALTER COLUMN 列                                                         │
│    TYPE character varying(8);                                              │
└──────────────────────────────────────┘
UPDATE文で事前にデータを切り捨てておけばスムーズに移行できる。

もちろん、サイズを大きく変更すれば列幅拡大ができる。
この場合は、当然ながら切り捨ては不要だ。
分類:PostgreSQL
jQuery/append()メソッドの要素指定の罠
2012年09月16日
┌──────────────────────────────────────┐
│.append($('<input>').prop('type','hidden'))                                 │
└──────────────────────────────────────┘
とかで、hidden属性とかを追加する訳だが、
セレクタのタグがいらねぇんじゃね?どうせタグ要素を指定するんだし、
とか思い、タグを取っ払った。
┌──────────────────────────────────────┐
│.append($('input').prop('type','hidden'))                                   │
└──────────────────────────────────────┘
するとsubmit時、他のPOST項目がクリアされてしまった。

大変だこりゃ(もちろん元に戻した)。

どういう仕組みなんだろう?
分類:注意、jQuery
jQuery/値を設定する場合の罠
2012年09月15日
┌──────────────────────────────────────┐
│.append($('<input>').prop('type', 'hidden')                                 │
│                    .prop('name', 'command')                                │
│                    .val(xyz)                                               │
│)                                                                           │
└──────────────────────────────────────┘
上記のような書き方は、以下のような書き方で代用できそうな気がする。
┌──────────────────────────────────────┐
│.html('<input type="hidden" name="command" value="' + xyz + '"/>')          │
├──────────────────────────────────────┤
│.append('<input type="hidden" name="command" value=" + xyz + '"/>')         │
└──────────────────────────────────────┘
こっちの方がHTML文に近いからわかりやすいし…。

実は怖い落とし穴があるのです。

変数xyzに「"」とかが入った場合。

サニタイズしていないので、valueに「"」が入らないのです。

ってことで、前者を使う方がいいみいたい。
但し、変な値が入らない場合は後者の方がわかりやすいかも。
とにかく、valueは文字列結合なんか使わないで、val()を使いましょうって話。
分類:注意、jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(4)
2012年09月14日
┌──────────────────────────────────────┐
│$('tbody')[0].rows.length                                                   │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│$('tbody').children('tr').length                                            │
└──────────────────────────────────────┘
テーブルの行数を取得するには、children()を使うといいかも。
「tbody」の直下は「tr」しかないから、「children()」だけでもいいのかもね。
分類:jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(3)
2012年09月13日
┌──────────────────────────────────────┐
│$('#セレクタ').scrollTop($('#セレクタ')[0].scrollHeight);                   │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│$('#セレクタ').scrollTop($('#セレクタ').prop('scrollHeight'));              │
└──────────────────────────────────────┘
末尾までスクロールするために、スクロール縦幅を取得するのはprop()で。
attr()だと取得できない(undefined)ので、ご注意を。
分類:jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(2)
2012年09月12日
┌──────────────────────────────────────┐
│if ($('#セレクタ')[0]) {                                                    │
│    $('#セレクタ')[0].focus();                                              │
│}                                                                           │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│$('#セレクタ').focus();                                                     │
└──────────────────────────────────────┘
フォーカスをあてるのは、別に先頭要素にしなくてもよかったのね。
分類:jQuery
jQuery/[0]を使ってなんとかやってたよ改善集(1)
2012年09月11日
┌──────────────────────────────────────┐
│if ($(this).find(':hidden')[0])                                             │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│if ($(this).find(':hidden').length)                                         │
└──────────────────────────────────────┘
存在チェック。
ま、先頭の要素があるか否かで判断できるのですが、要素数を見た方がスマートかも。

なお、もっと、わかりやすく書けばこうです。
┌──────────────────────────────────────┐
│if ($(this).find(':hidden').length > 0)                                     │
└──────────────────────────────────────┘
分類:jQuery
Smarty/続・textareaタグを使う場合の注意
2012年09月10日
┌──────────────────────────────────────┐
│<textarea>{$初期値}</textarea>                                              │
└──────────────────────────────────────┘
てやると、先頭の空改行が削除されていくという問題があったが、
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}                                                                   │
│</textarea>                                                                 │
└──────────────────────────────────────┘
今度は上記のようにすると、末尾に空改行が追加されていくという
対照的な事象があることがわかった。

ってことで、最適解は以下の形のようだ。
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}</textarea>                                                        │
└──────────────────────────────────────┘

…う~ん、なんか不恰好。
分類:Smarty
前へ 1 … 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 … 156 次へ