たとえば絞込検索などで、1文字入力されるごとに検索処理を実行させたいとき、
イベントのトリガーには
1 |
onInput |
を使用します。
1 |
.addEventListener('input', 関数 ); |
jQueryなら
1 |
.on('input', 関数 ); |
在宅プログラマーの備忘録として2005年に始めたブログです。
たとえば絞込検索などで、1文字入力されるごとに検索処理を実行させたいとき、
イベントのトリガーには
1 |
onInput |
を使用します。
1 |
.addEventListener('input', 関数 ); |
jQueryなら
1 |
.on('input', 関数 ); |
scriptタグで呼ばれたjsファイル内で、
そのjs自身のURL(=scriptタグのsrcの内容)を取得したい場合、
普通にlocationオブジェクトを使って取得しようとしても
おおもとのページのURLしか取得できません。
document.currentScriptオブジェクトに対応していれば簡単ですが、
対応していない場合はその時点で呼ばれている最新のscriptタグを
解析すれば取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var get_self_url = function() { var _current = (function() { if (document.currentScript) { return document.currentScript.src; } else { var scripts = document.getElementsByTagName('script'), script = scripts[scripts.length-1]; if (script.src) { return script.src; } } })(); return _current; }; |
外部のCSSファイルをJavaScriptから動的にロードする関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var loaded_styles = {}; var load_css = function(src) { if(sdl.loaded_styles[src]) { return; } var head = document.getElementsByTagName('head')[0]; var link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = src; head.insertBefore(link, head.firstChild); var loaded_styles[src] = 1; }; |
使い方
1 |
load_css('/libs/css/style.css'); |
長いタイトルですが、タイトル通りのことをやることになり、
スマートなやり方が思いつかず、結局ループを2回回す方法でやりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
var _form_data = new FormData(); var _q = location.search.replace('?', ''); var _qs = _q.split('&'); var _param_tmp1 = {}; // 同名パラメータが2つ以上あるかどうかをカウントするループ for(var i = 0; i < _qs.length; i++) { var _kv = _qs[i].split('='); if(_kv.length == 2) { if(_param_tmp1[_kv[0]]) { _param_tmp1[_kv[0]]++; } else { _param_tmp1[_kv[0]] = 1; } } } // カウントが2つ以上なら後ろに[]をつけるループ for(var i = 0; i < _qs.length; i++) { var _kv = qs[i].split('='); if(_kv.length == 2) { if(_param_tmp1[_kv[0]] == 1) { _form_data.append(_kv[0], _kv[1]); } else { _form_data.append(_kv[0] + '[]', _kv[1]); } } } |
配列の要素数はlengthで取得できますが、
連想配列の場合はlengthは使えません。
スマートではないですがfor inでループを回してカウントするのが簡単です。
連想配列でも配列でも同じように要素数が取得できる関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var len = function(val) { if(val == undefined || val == null) { return 0; } if(val instanceof Array) { return val.length; } else if(val instanceof Object) { var _cnt = 0; for(var x in val) { _cnt++; } return _cnt; } else { return val.length; } }; |
文字列だったら長さが返ってきます。