カテゴリー: javascript

JsTestDriverで「Oh Snap! No server defined!」って出た。

JsTestDriverで「Oh Snap! No server defined!」って出た。

テスト駆動Javascriptを読んでて「JsTestDriver」を導入しようと思って設定してたら
java.lang.RuntimeException: Oh Snap! No server defined!
っていうエラーが出た話。

そもそもの「JsTestDriver」の導入方法はアシアルさんが丁寧に書いてくれているのでそれを真似る。
windows版では問題なく動いたんだけどCentOS5の環境でやろうとしたらエラー出たという。。

アシアルさん:JsTestDriverで簡単テスト

■実際にエラーになったコマンド

$ java -jar $JSTESTDRIVER_HOME/JsTestDriver-1.3.5.jar --tests all
setting runnermode QUIET
java.lang.RuntimeException: Oh Snap! No server defined!
        at com.google.jstestdriver.config.DefaultConfiguration.getServer(DefaultConfiguration.java:61)
        at com.google.jstestdriver.config.Initializer.initialize(Initializer.java:99)
        at com.google.jstestdriver.embedded.JsTestDriverImpl.createRunnerInjector(JsTestDriverImpl.java:368)
        at com.google.jstestdriver.embedded.JsTestDriverImpl.runConfigurationWithFlags(JsTestDriverImpl.java:342)
        at com.google.jstestdriver.embedded.JsTestDriverImpl.runConfiguration(JsTestDriverImpl.java:233)
        at com.google.jstestdriver.Main.main(Main.java:70)
Unexpected Runner Condition: Oh Snap! No server defined!
 Use --runnerMode DEBUG for more information.

■今回のフォルダ構成

jarファイル

/home/myname/bin/
`– JsTestDriver-1.3.5.jar

ソースとテストファイル

/home/myname/public_html/Javascript/
|– JsTestDriver.conf
|– src
| `– sample.js
`– test
`– sample.js

どうも原因はconfファイルを見つけられなかったことらしい。
なので明示的に対対象の設定ファイルの場所を「–config」オプションで指定するようにする。
※絶対パスで指定してるけど別に相対でも可。

$ java -jar $JSTESTDRIVER_HOME/JsTestDriver-1.3.5.jar --config /home/myname/public_html/Javascript/JsTestDriver.conf --tests all
setting runnermode QUIET
..
Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1.00 ms)
  Microsoft Internet Explorer 9.0 Windows: Run 2 tests (Passed: 2; Fails: 0; Errors 0) (1.00 ms)

動いたー!

■参考URL

JsTestDriverで簡単テスト

java.lang.RuntimeException: Oh Snap! No server defined!

JsTestDriver導入

jQuery 郵便番号から住所を表示するPostal Search Ajax API

以前prototype.jsとかを使って郵便番号から住所を検索して表示する
ライブラリを使っていた事があったけどjQueryでもそういったものがないのか
調べてみたらあった。

Postal Search Ajax API チュートリアル

ここが素晴らしい。

郵便番号と住所のデータベースは Postal Search APIs & Solutions のサーバで管理するため、あなたの WEB サーバに データを格納したり、最新データを維持する必要はありません。

但し利用に当たってはPostal Search APIs & Solutions 利用規約をちゃんと守りましょう。

非常識なアクセスしないようにしないとね。

使い方は簡単で「郵便番号から住所を検索する #1」みればわかると思う。

因みに以前利用させてもらっていたライブラリはこちら。

AjaxZip2

こちらもjQueryにも対応されていたみたいです。

あっajaxzip3っていうのもあったんだ・・・。気付かなかった。。

jQuery getでキャッシュされなようにする

jQueryでgetメソッドを利用した際にIEでキャッシュされてしまい内容が更新されなかったのでメモ。

$.ajaxSetup() メソッドでキャッシュしないように指定します

$.ajaxSetup({
	cache: false
});
$("#target_ajax_load").load("hello.html");

jQuery.ajax(settings)
IEにてAjax通信がキャッシュされる、F5でリフレッシュしてもダメ

jQuery サンプルメモ

jQueryの実際のサンプルコードがある分かりやすいサイトをメモしておく。

少しのコードで実装可能な20のjQuery小技集(webクリエーターボックス)

プラグイン無しでjQueryだけの小技が紹介されています。なによりサイトが綺麗だし見やすい。

Index of Semooh jQuery Sample Site(jquery sample)

74のサンプルが紹介されています。こちらはプラグインを利用しているものも含みます。
実際にその場で動作を確かめられる上に設定値を変更したりできる。

JavaScript + Ajax + jQuery 実践サンプル集

とにかく沢山のサンプルがある。。

jQueryってサンプル見てるだけでなんか楽しい。

さて今日は深夜作業なんでこれくらいで。。(ネタが無いだけ)

jQuery IEでattrが動かなくて困った。

前のエントリでdefaultValueのことを書いたけどIEで動かなかった・・・。

とりあえず試したのはIE8

HTML部分はこんな感じ

<input type="hidden" value="" name="back_id" id="back_design_no" />

以前書いたIEで動かない例

var selected_id = 'hogehoge';
$("#back_design_no").attr("defaultValue", selected_id);

こう書いたら動いた

var selected_id = 'hogehoge';
$("#back_design_no").attr({"value": selected_id});

他にもIEで動かない書き方があることを知った。。。

参考
jQuery が IE でうごかねぇーーー、って思ったので、メモっとく。

console.logで動かないとか言ったことあるなーw

jQuery live関数 サポートしていないイベント

jQueryのlive関数で指定できるイベントを勘違いしていたのでメモ。

live(type, fn)

jQuery 1.3より実装。
イベントに対してハンドラを登録します。
登録されたイベントは、現在および将来的にも、セレクタにマッチする全ての要素に適用されます。
カスタムイベントに対してbindすることも可能です。

この関数で指定できるイベントは以下

  • click
  • dblclick
  • mousedown
  • mouseup
  • mousemove
  • mouseover
  • mouseout
  • keydown
  • keypress
  • keyup

もっと読む jQuery live関数 サポートしていないイベント

jQuery inputのデフォルト値を変更する。

ちょっとはまったので記録

以下のようにvalue値がすでに設定されている場合には

<input type="hidden" name="hoge" value="moge" id="fuga"/>

以下のようにvalで値を詰めてもvalueの値が変わらなかった。

$("#fuga").val('buzz');

以下のようにするとできた。

$("#fuga")..attr("defaultValue", 'buzz')

defaultvalue属性を知らなかった・・・。

参考:フォーカスを当てるとデフォルト文字列が消えるinput text (jQuery編)

jQuery toggle()で表示、非表示

とりあえず今日やったことをば。

jQueryのtoggleで表示、非表示する例。

これを↓

こうしたりする↓

※モザイクはなんとなく。

HTMLのソースはこれ

<p id="toggle_bar" class="tl"><span id="icon" class="strong fonts-02">+</span><a href="#">××××××××××××××××××××××</a></p>

<div id="search_area" class="search-select clearfix">
<ul>
	<li><input id="1" class="check01" name="tag" type="checkbox" value="1" /><label for="1">××××××</label></li>
	<li><input id="2" class="check01" name="tag" type="checkbox" value="2" /><label for="2">××××××</label></li>
	<li><input id="3" class="check01" name="tag" type="checkbox" value="3" /><label for="3">××××××</label></li>
	<li><input id="4" class="check01" name="tag" type="checkbox" value="4" /><label for="4">××××××</label></li>
	<li><input id="5" class="check01" name="tag" type="checkbox" value="5" /><label for="5">××××××</label></li>
	<li><input id="6" class="check01" name="tag" type="checkbox" value="6" /><label for="6">××××××</label></li>
	<li><input id="7" class="check01" name="tag" type="checkbox" value="7" /><label for="7">××××××</label></li>
	<li><input id="8" class="check01" name="tag" type="checkbox" value="8" /><label for="8">××××××</label></li>
	<li><input id="9" class="check01" name="tag" type="checkbox" value="9" /><label for="9">××××××</label></li>
	<li><input id="10" class="check01" name="tag" type="checkbox" value="10" /><label for="10">××××××</label></li>
	<li><input id="11" class="check01" name="tag" type="checkbox" value="11" /><label for="11">××××××</label></li>
	<li><input id="12" class="check01" name="tag" type="checkbox" value="12" /><label for="12">××××××</label></li>
	<li><input id="13" class="check01" name="tag" type="checkbox" value="13" /><label for="13">××××××</label></li>
	<li><input id="21" class="check01" name="tag" type="checkbox" value="21" /><label for="21">××××××</label></li>
	<li><input id="30" class="check01" name="tag" type="checkbox" value="30" /><label for="30">××××××</label></li>
	<li><input id="31" class="check01" name="tag" type="checkbox" value="31" /><label for="31">××××××</label></li>
	<li><input id="34" class="check01" name="tag" type="checkbox" value="34" /><label for="34">××××××</label></li>
	<li><input id="35" class="check01" name="tag" type="checkbox" value="35" /><label for="35">××××××</label></li>
	<li><input id="36" class="check01" name="tag" type="checkbox" value="36" /><label for="36">××××××</label></li>
	<li><input id="38" class="check01" name="tag" type="checkbox" value="38" /><label for="38">××××××</label></li>
</ul>
</div>

jsはこれ

$("#search_area").css("display", "none");
$('#toggle_bar').click(function(){
    $('#search_area').toggle();
    var lab = $('#icon').html();
    if(lab == '-') {
        $('#icon').html('+');
    } else {
        $('#icon').html('-');
    }
});

簡単っすな。。表示を無理矢理変えてるところがイケてないけど。。

参考
toggle()

jQueryのtoggleメソッドって気持ちいい

jQuery cookieを使ってページの表示履歴を保持する

ページの表示履歴簡易的に取りたいということなのでjQueryを使ってどうやるのか調べてみた。

こちらを参考にしました。
jQueryを使ってクッキーを操作

jquery.cookie.jsを使うらしいのでこちらからダウンロード

自作した外部ファイル

$(function(){
    var COOKIE_NAME = 'test_cookie_name';
    var COOKIE_PATH = '/';

    var page_array = [];
    if($.cookie(COOKIE_NAME)){
        page_array = $.cookie(COOKIE_NAME).split("-");
    }

    // 現在開いているページのファイル名を取得
    var file_url = location.href;
    file_url = file_url.substring(file_url.lastIndexOf("/")+1,file_url.length);
    file_url = file_url.substring(0,file_url.indexOf("."));

    if( $.inArray(file_url, page_array) == -1) {
        // cookieから取得した配列内に存在しない場合は追加
        page_array.push(file_url);
    }

    // パス(/)や有効期限(3日)を指定する
    var date = new Date();
    date.setTime(date.getTime() + ( 1000 * 60 * 60 * 24 * 3 ));

    // とりあえず"-"区切りで連結してcookieに格納
    $.cookie(COOKIE_NAME, page_array.join("-"), { path: COOKIE_PATH, expires: date });
})

履歴を取得したいページでの読込み例(ここでは自作の外部ファイルをhistory_sample.jsとしている)

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="./jquery.cookie.js"></script>
<script type="text/javascript" src="./history_sample.js"></script>

cookie_sample.html
cookie_sample2.html
cookie_sample3.html
とかのファイルに仕掛けた場合、3ファイルをブラウザで開いたあとはcookiに以下のような
値がはいります。

データの保存方法が・・・とかありますがとりあえずサンプルなのでこれで。

jQuery チェックボックスの値復元

仕事でcheckboxの値を復元する必要があったのでjQueryでやってみた。

とりあえずコード

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    var tags = ['1', '2', '3']; // 復元する値の例
    $('#main :checkbox').each(function(){
        if($.inArray($(this).val(), tags) > -1){
            $(this).attr("checked", "checked");
        }
    });

});
</script>

HTML部分(大体こんな感じ)

<div id="main">
    <input type="checkbox" name="sample" value="1" />hoge
    <input type="checkbox" name="sample" value="2" />moge
    <input type="checkbox" name="sample" value="3" />fuga
    <input type="checkbox" name="sample" value="4" />fuzz
    <input type="checkbox" name="sample" value="5" />buzz
</div>

この場合だと「hoge」、「moge」、「fuga」にチェックが入る想定。

$(‘#main :checkbox’)でcheckboxをさらって一つずつeachで処理。
その際順番に処理されるcheckboxの値がtags配列(復元対象)中に
あるかどうかを$.inArray($(this).val(), tags)でチェックし、「-1」(存在しない)
以外であれば復元するという感じ。

とりあえずできたけどこれがいいのかどうか・・・。

参考URL
■[jquery]チェックボックスのチェックを反転させるボタン