Category: ‘JavaScript’
Adobe edge jQuery UI 読み込み処理
jQuery UI のライブラリの読み込み方法。
StageのcreationCompleteメソッド内に、下記のコードを記述する。
yapnopeとは、JavaScriptを読み込むJavascriptライブラリらしく、詳しくは調べてないが、読み込んだあとに指定したfunctionを呼び出すようだ。
そして、jQuery UI ライブラリのメソッド(draggable/droppable等)を適用できる。
yepnope({ nope:['js/jquery-ui-1.9.2.custom.min.js'], complete:init }); function init(){ sym.$("myPic").draggable(); sym.$("dropBox").droppable({drop:function(){sym.getSymbol("myPic").play()}}); }
今後、他のメソッド等も試してみようと思う。
楽しい。
jQuery GalleryView の縦写真
jQueryの素敵なギャラリーライブラリである、GalleryViewを使ってみた。
デフォルト設定で使用してみると、縦写真の場合に写真の上下が見切れてしまう。
よくよく調べてみると、ちゃんと設定オプションがあった。
$('#myGallery').galleryView({ panel_scale: 'fit' });
ますます使えそうである。
Rails3でjQueryMobileのsubmitが効かない。
jQueryMobileで、submitしたのだが、なぜか上手くいかない。
formの属性に、data-ajax = “false” と指定しなければいけないらしい。
これは、どちらかと言うと jQueryMobileの仕様です。
ハマってので覚え書き。
HTML Form
<%= form_tag(item_list_path, :method => "GET", :id => "frm", "data-ajax" => false) do %> <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true"> <%= radio_button_tag :item, 1, true, {:class => "item"} %> <label for="game_id_1"> 商品1 </label> <%= radio_button_tag :item, 2, false, {:class => "item"} %> <label for="game_id_2"> 商品2 </label> <%= radio_button_tag :item, 3, false, {:class => "item"} %> <label for="game_id_0"> 商品3 </label> </fieldset> <% end %>
JavaScript
<script> $(function() { $(".item").change(function(){ $("#frm").submit(); }); }); </script>
Rails select_tag の onchangeイベントによる form_tag action属性の変更
セレクトボックスを変更したタイミングでサブミットを呼びたいので、下記のように記述した。
form_tagとselect_tag を使用すると、下記のHTMLが吐き出される。
<%= form_tag :controller => "index", :action => "index" do %> <%= select_tag(:area_id, options_from_collection_for_select(@areas, :id, :area_name, @area_id), \:onchange => "this.form.submit()") %> <% end %>
<form accept-charset="UTF-8" action="/area/2" method="post"> <select id="area_id" name="area_id" onchange="this.form.submit()"> <option value="1">Japan</option> <option value="2" selected="selected">Thailand</option> <option value="3">USA</option> <option value="4">Canada</option> <option value="5">England</option> </select> </form>
しかし、この方法だけだと、formの属性であるactionが、/area/2 のまま変わらない。
色々と試したが、javascriptで対応するしかないようだ。
<script type="text/javascript"> $(function(){ $('#area_id').change(function() { $("form").attr('action', '/areas/' + $(this).val()); $("form").submit(); }); }); </script>
Javascriptで、formのactionを変更してsubmitする。
もう少しスマートな方法もありそうだが、これで良しとする。
IEの条件付きコメントについて
いまさらながら、覚え書き。
<!--[if IE]> IEでのみ表示される <!--[endif]>
<!--[if gte IE 6]> IE6以降でのみ表示される <!--[endif]>
<!--[if !IE]> IEでは表示されない <!--[endif]>
jQuery Plugin 事始め その2
以前の記事で、jQueryのプラグインを簡単に作成してみたが、まだまだ融通が利かない。
そこで、いろんなライブラリを解読してみて、そこそこ使える形式が見えてきたので記載する。
この記述方法だと、内部からも外部からも関数をコールできるので、後にパラメータを渡すことができる。
jquery.sample.js
/* * 自作プラグインサンプル */ ;(function($){ var sample = function(target, opts){ //デフォルトパラメータ this.defaults = { param : 'hoge', params : [{title : 'DefTitle1', name: 'DefName1', id: '111' }, {title : 'DefTitle2', name: 'DefName2', id: '222' } ], width : '1200px' } //パラメータ上書き $.extend(this.defaults, opts || {}); //関数コール this.init(); this.reload(this.defaults.width); } //関数定義 sample.prototype = { init: function() { alert("Init:" + this.defaults.param); }, reload: function(str) { alert("Reload:" + str); } }; //----------------- // エントリポイント //----------------- $.fn.sample = function(options){ //オプション取得 opts = jQuery.extend({}, $.fn.sample.defaults, options); // return this.each(function(){ // new sample(this, options, temp); // }); if ( $(this).length > 1) { var _instances = []; $(this).each(function(i) { _instances[i] = new sample(this, options); }); return _instances; } else { return new sample(this, options); } }; //----------------- //デフォルト値 //----------------- // $.fn.sample.defaults = { // param : 'hoge', // params : [{title : 'defTitle1', name: 'defName1', id: '111' }, // {title : 'defTitle2', name: 'defName2', id: '222' } // ], // width : '1200px' // }; })(jQuery);
コールする側 [HTML]
<script type="text/javascript"> $("#sample").sample({param:'moge'}).reload('hage!!'); </script> <div id="sample"></div>
但し、十分な検証はしていないので、自己責任で参考にしてください。
IE8で、JavaScriptオブジェクトがエラーとなる件
FireFox では動作するが、IEではうまくいかない場合は、カンマの有無を調査するのが良いと思う。
言語仕様的に言うと、ECMAScript第3版ではオブジェクトリテラルの最後のカンマ “,” は違反らしい。最新のECMAScript第5版では最後のカンマ “,” は無視されるとのこと。どの道、最後のカンマ “,” は付けない方が良い。
余談だが、jQuery.append() が動作しなかったこともある。これも単純に</div>タグを付け忘れたという単純ミス。
問題が起きたら、まずは簡単なところから確認するべきである。
JSON仕様
JSON.parse() をしようとして、結構エラーになるので覚え書き。
特にオブジェクト型のプロパティと、文字値に、ダブルクォーテーションを指定する事はとても重要。
シングルクウォーテーションだと怒られる。
文字値:”abcd” [ダブルクォーテーションのみ]
数値:123.4 [10進数のみ]
Boolean値:ture or false
null値:null
オブジェクト:{“x” : “abc” ,”y”: 123}
配列: [1,2,”aaa”]
jQuery Plugin 事始め その1
以前も記述したが、jQuery プラグイン形式でスクリプトを記述すると中々良いかもしれない。
今後は勉強がてらに、jQuery プラグインの作成方法を試していこうと思う。
試行錯誤しながらの記述なので、使用方法に間違い等があるかもしれないので参考までにしてください。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript" ></script> <script src="jquery.myPlugin.js" type="text/javascript" ></script> <script type="text/javascript"> $(function(){ $("#test").myPlugin({ params : [{title : 'optTitle1', name: 'optName1', id: '011'}, {title : 'optTitle2', name: 'optName2', id: '022'} ] }); }); </script>
/* * jQueryプラグインテンプレート */ ;(function($){ var target; var opts; $.fn.myPlugin = function(options){ //対象のスコープを設定 target = $(this); //オプション取得 opts = jQuery.extend({}, $.fn.myPlugin.defaults, options); //opts = jQuery.extend(true, $.fn.myPlugin.defaults, options); return this.each(function(){ //処理記述 func1(); $(this).css({width : opts.width, height : opts.height, background : opts.color}); }); }; //ローカル関数 function func1(){ //パラメータも取得可能 var targetId = target.attr('id'); var param = opts.param; var params = opts.params; console.log(targetId + "/" + param + "/" + params[0].title + "/" + params[1].title); }; //デフォルト値 $.fn.myPlugin.defaults = { param : 'hoge', params : [{title : 'defTitle1', name: 'defName1', id: '111' }, {title : 'defTitle2', name: 'defName2', id: '222' } ], height : '200px', width : '300px', color : 'blue' }; })(jQuery);