ラベル jquery の投稿を表示しています。 すべての投稿を表示
ラベル jquery の投稿を表示しています。 すべての投稿を表示

2012年10月3日水曜日

jQueryで郵便番号検索API 其ノ二

少し前にくじら郵便番号APIというのを紹介してました。
jQueryで郵便番号APIを使う

これで申し分ないんですがひとつできないことがありました。
それはSSLページへの対応。

くじら郵便番号APIのアドレスはhttpから始まりますのでhttpsのページからこのAPIを呼びだそうとしたとき警告が出て?うまいこと動作しませんでした。

そこでまた何かないかなって探してたらいいのがありました。
ajaxzip3 - 郵便番号検索API

これはAPIを提供というよりはスクリプトを利用するかんじ。
ページを見ると使い方も書かれてるのでわかりやすいと思いますがここでも少し紹介。
<html>

<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>サンプル - 郵便番号検索API</title>
    <script type="text/javascript" src="http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js" charset="utf-8"></script>
</head>

<body>
    郵便番号:
    <input type="text" name="zipcode_1" maxlength="3" size="3" />
    -
    <input type="text" name="zipcode_2" maxlength="4" size="4" onkeyup="AjaxZip3.zip2addr('zipcode_1','zipcode_2','pref','address');" />
    <hr />
    都道府県:
    <input type="text" name="pref" size="10" />
    住所:
    <input type="text" name="address" size="50" />
</body>

</html>

この例では二番目の郵便番号を入力した際に自動的に郵便番号を検索し、都道府県名および住所を取得・表示するような動きになります。

この関数の引数は
AjaxZip3.zip2addr( '〒上3桁' , '〒下4桁' , '都道府県' , '市区町村', '町域大字' , '丁目番地' )


上のサンプルや本家のページサンプルでは郵便番号検索のトリガーを onkeyup としていますがもちろんボタンを別に用意しといて任意のタイミングで検索することもできます。
<script type="text/javascript">
    $(document).ready(function() {
        $("#btn").click(function() {
            AjaxZip3.zip2addr('zipcode_1', 'zipcode_2', 'pref', 'address');
        });
    });
</script>

<input type="text" name="zipcode_1" maxlength="3" size="3" />
-
<input type="text" name="zipcode_2" maxlength="4" size="4" />
<input type="button" id="btn" value="検索" />


簡単!というかそのままですね。
しかし、httpsにも対応してるしjsonpに対応してるのでどこいっても使えるAPIかなと思います。

2012年9月13日木曜日

jQueryで郵便番号APIを使う

JavaScriptでWebAPIを使おうとするとクロスドメインの制限にどうしても引っかかってしまいます。
そこでJSONP。
JSON形式でデータを返してくれる+クロスドメインの制限も解決してくれるJSONPが使えるAPIを探してたらいいかんじのがありました。

クジラ 郵便番号 API
http://api.aoikujira.com/zip/


使い方は簡単です。
<script>
    function search_zipcode() {
        var url = "http://api.aoikujira.com/zip/zip.php";
        url += "?fmt=jsonp&callback=?";
        url += "&zn"+$("#zipcode").val();

        $.getJSON(
            url,
            function(res) {
                var address = "";
                address += res.state;     // 都道府県
                address += res.city;      // 市
                address += res.address;   // 住所
                $("#address").val(address);
            }
        );
    }
</script>
<input type="text" id="zipcode" value="" />
<input type="button" value="住所検索" onclick="search_zipcode();" />
<input type="text" id="address" value="" />

JSONPを使う場合、コールバック関数を指定しますがjQueryでは ? を指定することで処理を置換してくれます。



こんなかんじです。



2012年7月27日金曜日

show_errorsの表示をちょっと変えてHTML5風に

題名はかなり大げさなこと書いてますが、jQueryのプラグインを久しぶりに作ってみようと思っていま勉強中のFuelPHPと合わせて適当にいじってみました。

※下に書いてあることは別にプラグインを作らなくてもCSSだけでどうにでもなります・・・ただプラグインを作ってみたかっただけです。


HTML5を使って input に required 属性を付けると

こんなかんじで格好いいです。
でもこれは HTML5 を使ってるんで validation したあとのエラーメッセージとか至って普通に表示されます。(Email アドレスの記述が間違っている場合のエラー)


これを HTML5 風に変えてみよう・・・
(いろいろめんどくさくなってきたんで途中でやめましたが・・・)

簡単にやったこと

  • Formクラスを使って input を生成
  • Validationクラスをちょっとだけ修正
  • ConfigのValidationにopen_errorを追加
  • jQueryプラグイン作って埋め込む

まず、input の生成。これは普通。(required属性はつけません)
<?php echo Form::input('name', '名前'); ?>

次に、fuel/core/classes/validation.php と fuel/core/classes/validation.error.php を修正します。

fuel/core/classes/validation.php 行560
// $output .= $options['open_error'].$e->get_message().$options['close_error'];
$output .= $e->_replace_tags($options['open_error']).$e->get_message().$options['close_error'];

open_error のタグをエラーメッセージと同じように置換するようにメソッドを呼び出します。が、_replace_tagsは protected なんで public に変更しました。

fuel/core/classes/validation/error.php 行113
// protected function _replace_tags($msg)
public function _replace_tags($msg)

これでOK。
つぎに、fuel/app/config/config.php の validation に open_error を以下のように追加。
'validation' = array(
    'open_error' => '<li class="error_:field">',
);

上の :field の部分は validation や input で指定している id になります。

これであとはjQueryのプラグインを埋め込んで実装するだけです。
jquery.validation.js を作って中身は以下
(function($){
    function Validation() {
        this._defaults = {
            form_identifier: 'form_',
            error_identifier: 'error_',
        };
        this._target = null;
        
        this.errors = {};
    }
    
    $.extend(Validation.prototype, {
        _attach: function(element) {
            this._target = element;
            this._target.css('display', 'none');
            
            this._errors = this._get_errors();
            for (i = 0; i < this._errors.length; i++) {
                this._create_message(this._errors[i]);
            }
        },
        _get_errors: function() {
            errors = [];
            
            $("li", this._target).each(function(idx, val) {
                error = {};
                error['id'] = $(val).attr('id')
                                .replace($.validation._get('error_identifier'), '');
                error['text'] = $(val).text();
                
                errors.push(error);
            });
            
            return errors;
        },
        _create_message: function(error) {
            e = $('<div>')
                    .addClass('validation_message')
                    .text(error.text)
                    .css('display', 'none');
            
            t = $('#'+this._get('form_identifier')+error.id);
            t.after(e);
            
            e.css({
                'display': 'inline',
                'position': 'absolute',
                'top': t.position().top + (t.outerHeight() - e.outerHeight()),
                'left': t.position().left + t.outerWidth() + 10,
            });
        },
        _get: function(key) {
            return this._defaults[key];
        },
    });
    
    $.fn.validation = function(options) {
        $.extend($.validation._defaults, options);
        $.validation._attach(this);
        return this;
    }
    
    $.validation= new Validation();
    window.VALIDATION = $;
    
})(jQuery);

コメントも何もないですがshow_errors()で表示している内容をとってきてそれぞれのinputの横に出してるだけです。(汚いソースですみません)

使うときはこんなかんじ。
<div class="error">
    <?php echo $validation->show_errors(); ?>
</div>

<?php echo Asset::js('jquery-1.7.2.min.js') ?>
<?php echo Asset::js('jquery.validation.js') ?>
<script type="text/javascript">
    $(document).ready(function() {
        $('div.error').validation();
    });
<script>


こんなかんじで表示されます。


最初にも言った通り、べつにプラグインの必要はないです。
それぞれの項目の場所で
<?php echo $valication->error('name'); ?>

とかしてこれにスタイルをつければ同じことできます・・・



2011年7月25日月曜日

Chromeで$(document).ready(fn)

ちょっと悩んでメモ程度に。。。
jQueryでページが読み込まれた時点で処理を行うという操作はよくあること思いますが$(document).ready(fn)で処理を行おうとすると画像が描画される前に処理が実行されました。
(多分Chromeのみ)
$("#img").get(0)とかすると正常にエレメント名も取得できますが、$("#img").width()とすると「0」になってしまいます。

すべてのページが読み込まれた時点で処理を行いたい場合は$(document).ready(fn)を使うより$(window).load(fn)を使用した方が良いようです。

2011年7月22日金曜日

WordpressでjQueryを使う

wp_head()でjQueryを読み込んでいる場合、他のjavascriptライブラリ(prototype.jsなど)と衝突を防ぐためjQuery.noConflict()が使われています。
ですのでjQueryオブジェクトの呼び出しの際には明確に"jQuery"と記述する必要があります。

$(document).ready(function() {
    alert("hoge");
});

↓↓↓

jQuery(document).ready(function() {
    alert("hoge");
});

2011年7月8日金曜日

jQueryを使ったスライドとHTML5でのスライド

最近はHTML5が流行ってますが簡単な画面なスライドをjQuery版とHTML5版を作ってみました。
(作ったと言っても大したこと作ってませんが)
jQueryとHTML5でそれほどソースを変えているわけではありませんが、HTML5(というよりCSS3)でエフェクトをかけるのは何かと便利です。


【jQueryでスライド】


【HTML5でスライド】

2011年7月4日月曜日

ASPでjQueryを使う

ASPでjQueryを使用する際に面倒なのが文字コードの扱い方。

Metabase.xmlで文字コードをUTF-8に変えておけば特に問題なく使えるのだがそのままだとshift_jisになっている。
shift_jisの状態でjQueryの$.getなどのメソッドを使用すると文字化けしてしまいます。

その場合は正確に文字コードを指定することでASPでもjQueryでのデータのやり取りが可能になります。

指定方法はまずASPの先頭に以下を追記します。
<%@ CODEPAGE = 65001 %>

65001というのがUTF-8の指定になります。(通常は932:shift_jis)

そしてそのファイルをUTF-8形式で保存します。

最後にscriptタグのところにもUTF-8を宣言します。
<script type="text/javascript" src="jquery.js" charset="utf-8"></script>

これで$.getとかでも文字化けせずにデータのやり取りが可能です。