<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Life["Breathing"] &#187; javascript</title>
	<atom:link href="http://blog.hsin.tw/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hsin.tw</link>
	<description></description>
	<lastBuildDate>Fri, 06 Jan 2012 10:42:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>[CKEditor] 增加上傳圖片功能</title>
		<link>http://blog.hsin.tw/2011/ckeditor-upload-image/</link>
		<comments>http://blog.hsin.tw/2011/ckeditor-upload-image/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 06:59:24 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[ckeditor]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=481</guid>
		<description><![CDATA[現在這個版本(3.x)的上傳圖片功能預設是沒有打開的 工具列[影像]點進去後 裡面原本只會有 [影像資訊] [超連結] [進階] 如果順利完成的話 會在[進階]左邊 出現一個[上傳] [START] ▼ 首先當然是引入ckeditor檔案 跟Form ▼ javascript需要加上一行 ▼ server端(這裡使用PHP)接收上傳圖片部分 也就是上面說的/upload 都順利的話 最後回傳給ckeditor後 會帶入到工具列[影像]裡面的[影像資訊]頁籤 他會把URL跟圖片預覽都帶進去 再自己做處理囉 接著再按確定 就會插入進文章了 [END]]]></description>
			<content:encoded><![CDATA[<p>現在這個版本(3.x)的上傳圖片功能預設是沒有打開的<br />
<span id="more-481"></span><br />
工具列[影像]點進去後<br />
裡面原本只會有 [影像資訊] [超連結] [進階]<br />
如果順利完成的話 會在[進階]左邊 出現一個[上傳]</p>
<p>[START]</p>
<p>▼ 首先當然是引入ckeditor檔案 跟Form</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;/js/ckeditor/ckeditor.js&quot;&gt;&lt;/script&gt;
&lt;!-- textarea記得加上class=&quot;ckeditor&quot; 這樣就可以使用預設的ckeditor了 --&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; action=&quot;/goupdate&quot; method=&quot;post&quot;&gt;
&lt;textarea id=&quot;editor1&quot; name=&quot;editor1&quot; class=&quot;ckeditor&quot;&gt;&lt;/textarea&gt;
&lt;input type=&quot;submit&quot; value=&quot;送出&quot;&gt;
&lt;/form&gt;
</pre>
<p>▼ javascript需要加上一行</p>
<pre class="brush: jscript; title: ; notranslate">
//接著就是寫上server端接收上傳圖片的路徑 -&gt; 這邊就是/upload
CKEDITOR.replace('editor1'
    ,{filebrowserImageUploadUrl : '/upload'}
);
</pre>
<p>▼ server端(這裡使用PHP)接收上傳圖片部分 也就是上面說的/upload</p>
<pre class="brush: php; title: ; notranslate">
// 檔案的name預設是upload (我不知道去哪改耶XD 有人知道嗎?)
$fileNameLong = $_FILES['upload']['name'];
//
//  作了一些對圖片的處理後
//
$pathToSave = '/var/www/htdoc/photo/myimage.jpg';
move_uploaded_file($_FILES['upload']['tmp_name'],  $pathToSave);
// 再做一些處理後
// 如果上傳成功就是沒有錯誤訊息
$errorMsg = '';
// 這邊記得回傳給ckeditor
echo &quot;&lt;script&gt;&quot;;
if($errorMsg==''){
    // $fileUrl是圖片網址 就自己先處理好吧
    $fileUrl = &quot;http://www.mysite.com/photo/myimage.jpg&quot;;
    echo &quot;window.parent.CKEDITOR.tools.callFunction(2,'&quot; . $fileUrl . &quot;','');&quot;;
} else {
    echo &quot;alert('&quot;.$errorMsg.&quot;');&quot;;
}
echo &quot;&lt;/script&gt;&quot;;
</pre>
<p>都順利的話 最後回傳給ckeditor後<br />
會帶入到工具列[影像]裡面的[影像資訊]頁籤<br />
他會把URL跟圖片預覽都帶進去<br />
再自己做處理囉<br />
接著再按確定<br />
就會插入進文章了</p>
<p>[END]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2011/ckeditor-upload-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codeigniter開啟csrf protection時 傳送表單(or ajax)</title>
		<link>http://blog.hsin.tw/2011/codeigniter-csrf-protection-form-ajax/</link>
		<comments>http://blog.hsin.tw/2011/codeigniter-csrf-protection-form-ajax/#comments</comments>
		<pubDate>Wed, 18 May 2011 10:37:42 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=449</guid>
		<description><![CDATA[在CI 2.0中有一個csrf(Cross Site Request Forgery) protection的功能 如果打開這個功能的話 post表單給server 會吐 error 500 An Error Was Encountered The action you have requested is not allowed. 會無法執行 這時候要在表單傳送的數值中加入一個token的值 才能正常使用表單功能 可以在application/config/config.php中找到下面這幾行 原本$config['csrf_protection']預設是FALSE 改成TRUE就可以打開了 開啟之後 會自動幫你在cookie中存一個值 cookie的name在上面說的config.php中可以設定 之後傳送表單就要連這個token一起傳才行 以下用jquery的ajax功能示範 getCookie()是用js取出cookie的值 這是在網路上找到的 可以直接拿去用 而csrf_test_name就是在config.php中可以設定的參數 將這個cookie抓出來一起送出表單 就可以正常使用了 &#8230; <a href="http://blog.hsin.tw/2011/codeigniter-csrf-protection-form-ajax/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在CI 2.0中有一個csrf(Cross Site Request Forgery) protection的功能<br />
<span id="more-449"></span><br />
如果打開這個功能的話<br />
post表單給server 會吐 error 500<br />
An Error Was Encountered<br />
The action you have requested is not allowed.<br />
會無法執行<br />
這時候要在表單傳送的數值中加入一個token的值<br />
才能正常使用表單功能</p>
<p>可以在application/config/config.php中找到下面這幾行</p>
<pre class="brush: php; title: ; notranslate">
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
</pre>
<p>原本$config['csrf_protection']預設是FALSE 改成TRUE就可以打開了<br />
開啟之後 會自動幫你在cookie中存一個值<br />
cookie的name在上面說的config.php中可以設定<br />
之後傳送表單就要連這個token一起傳才行</p>
<p>以下用jquery的ajax功能示範</p>
<pre class="brush: jscript; title: ; notranslate">
$(function(){
    $('#btn').click(function(){
	    $.ajax({
	        type:'POST'
	        ,url:'/ajax' //ajax接收的server端
	        ,data:$('#form').serialize()+'&amp;csrf_test_name='+ getCookie('csrf_test_name')
	        ,success:function(data){
			alert(data.msg);
	        }
	        ,dataType:'json'
	    });
    });
});

function getCookie(name){
    var arr = document.cookie.match(new RegExp(&quot;(^| )&quot;+name+&quot;=([^;]*)(;|$)&quot;));
    if(arr != null) return unescape(arr[2]); return null;
}
</pre>
<p>getCookie()是用js取出cookie的值<br />
這是在網路上找到的 可以直接拿去用</p>
<p>而csrf_test_name就是在config.php中可以設定的參數<br />
將這個cookie抓出來一起送出表單<br />
就可以正常使用了</p>
<p>有任何指教歡迎留言~</p>
<p>referer : <a href="http://ericlbarnes.com/blog/post/codeigniter_csrf_protection_with_ajax">http://ericlbarnes.com/blog/post/codeigniter_csrf_protection_with_ajax</a></p>
<p>==================<br />
update<br />
==================<br />
依據這頁<a href="http://codeigniter.com/forums/viewthread/163976/">http://codeigniter.com/forums/viewthread/163976/</a> 某樓提供的方法<br />
可以使用以下方法取得token_name以及值</p>
<pre class="brush: php; title: ; notranslate">
&lt;input type=&quot;hidden&quot; name=&quot;&lt;?php echo $this-&gt;security-&gt;csrf_token_name?&gt;&quot; value=&quot;&lt;?php echo $this-&gt;security-&gt;csrf_hash?&gt;&quot; /&gt;
</pre>
<p>滿方便的<br />
另外還有一點就是<br />
如果是用CI內建的form helper<br />
在開啟csrf_protection時 會自動幫你加入這個token的值<br />
我本身是沒有在用啦<br />
如果有在用的人 就會比較方便囉 (或許根本就不會發現這個問題XD)<br />
==================<br />
以上是update的資訊<br />
==================</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2011/codeigniter-csrf-protection-form-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jquery .trigger()的用法</title>
		<link>http://blog.hsin.tw/2011/jquery-trigger-howtouse/</link>
		<comments>http://blog.hsin.tw/2011/jquery-trigger-howtouse/#comments</comments>
		<pubDate>Tue, 10 May 2011 04:55:56 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=441</guid>
		<description><![CDATA[到今天才知道trigger()的用法 ._. 今天用這個jquery輪播的plugin http://jqueryfordesigners.com/jquery-infinite-carousel/ 他裡面有bind()了一個跳頁數的method 但是我折騰了一兩個小時 都不知道怎麼用阿！！！NO！！！ 上個廁所突然豁然開朗 原來是要用trigger()阿！！！(摸鬍子) 以下是剪貼官網的範例 首先當然是bind一個新的method 可以是click, focus 這些javascript原本就有的 或是自己取名字也行~ (上面的例子就是custom) 要觸發 就是用.trigger()囉 有參數的話 後面第二個參數用一個陣列帶入！ 收工！ 不錯不錯 希望不會再忘了]]></description>
			<content:encoded><![CDATA[<p>到今天才知道trigger()的用法 ._.<br />
<span id="more-441"></span></p>
<p>今天用這個jquery輪播的plugin<br />
<a href="http://jqueryfordesigners.com/jquery-infinite-carousel/" target="_blank">http://jqueryfordesigners.com/jquery-infinite-carousel/</a><br />
他裡面有bind()了一個跳頁數的method<br />
但是我折騰了一兩個小時 都不知道怎麼用阿！！！NO！！！</p>
<p>上個廁所突然豁然開朗 原來是要用trigger()阿！！！(摸鬍子)<br />
以下是剪貼<a href="http://api.jquery.com/trigger/" target="_blank">官網</a>的範例</p>
<pre class="brush: jscript; title: ; notranslate">
$('#foo').bind('custom', function(event, param1, param2) {
    alert(param1 + &quot;\n&quot; + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);
</pre>
<p>首先當然是bind一個新的method<br />
可以是click, focus 這些javascript原本就有的<br />
或是自己取名字也行~ (上面的例子就是custom)</p>
<p>要觸發 就是用.trigger()囉<br />
有參數的話 後面第二個參數用一個陣列帶入！<br />
收工！<br />
不錯不錯<br />
希望不會再忘了</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2011/jquery-trigger-howtouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Plugin : ClockPick 選取時間</title>
		<link>http://blog.hsin.tw/2009/jquery-plugin-clockpick/</link>
		<comments>http://blog.hsin.tw/2009/jquery-plugin-clockpick/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 06:14:14 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=368</guid>
		<description><![CDATA[網路上可以找到很多月曆的js程式 但是選取時間的程式相對少很多 前陣子找到了這個基於jquery的選取時間程式ClockPick 使用的方法很直覺 也有數個參數可以設定以達到自己的需求 demo就直接去該網頁看囉 範例下載]]></description>
			<content:encoded><![CDATA[<p>網路上可以找到很多月曆的js程式<span id="more-368"></span><br />
但是選取時間的程式相對少很多<br />
前陣子找到了這個基於jquery的選取時間程式<a target="_blank" href="http://www.jnathanson.com/index.cfm?page=jquery/clockpick/ClockPick">ClockPick</a><br />
使用的方法很直覺<br />
也有數個參數可以設定以達到自己的需求<br />
demo就直接去該網頁看囉</p>
<p><a href="http://ex.hsin.tw/files/clockpick.zip">範例下載</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-plugin-clockpick/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 11:54:43 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=337</guid>
		<description><![CDATA[這些只是我大概記一下的內容 要詳細閱讀跟學習jQuery還是買本書比較實在喔~ 原文書網址：jQuery in Action 中文版：jQuery實戰手冊 原文電子書版本：咕狗"jquery in action ebook" http://jquery.com/ 這本書是以jQuery 1.2.1版為基礎 ch.1 Introuducing jQuery&#160; jQuery概略介紹 ch.2 Creating the wrapped element set&#160; 建立elements set ch.3 Bringing pages to life with jQuery&#160; 讓頁面上的東西更生動 ch.4 Events are where it happens!&#160; events的操作 &#8230; <a href="http://blog.hsin.tw/2009/jquery-in-action/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>這些只是我大概記一下的內容<br />
<span id="more-337"></span><br />
要詳細閱讀跟學習jQuery還是買本書比較實在喔~<br />
原文書網址：<a href="http://www.manning.com/bibeault/" target="_blank">jQuery in Action</a><br />
中文版：<a href="http://findbook.tw/book/9789861816388/basic" target="_blank">jQuery實戰手冊</a><br />
原文電子書版本：<a href="http://tinyurl.com/d3tbsq" target="_blank">咕狗"jquery in action ebook"</a></p>
<p><a href="http://jquery.com/" target="_blank">http://jquery.com/</a><br />
這本書是以jQuery 1.2.1版為基礎</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch1-introuducing-jquery/">ch.1 Introuducing jQuery</a>&nbsp;<br />
jQuery概略介紹</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch2-creating-the-wrapped-element-set/">ch.2 Creating the wrapped element set</a>&nbsp;<br />
建立elements set</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch3/">ch.3 Bringing pages to life with jQuery</a>&nbsp;<br />
讓頁面上的東西更生動</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch4/">ch.4 Events are where it happens!</a>&nbsp;<br />
events的操作</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch5/">ch.5 Sprucing up with animations and effects</a>&nbsp;<br />
動畫及效果</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch-6/">ch.6 jQuery utility functions</a>&nbsp;<br />
通用函式</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch-7/">ch.7 Extending jQuery with custom plugins</a>&nbsp;<br />
自訂擴充plugin</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch8/">ch.8 Talk to the server with Ajax</a>&nbsp;<br />
ajax介紹</p>
<p><b>ch.9 Prominent, powerful,and practical plugins</b><br />
plugin介紹<br />
<a href="http://docs.jquery.com/Plugins" target="_blank">http://docs.jquery.com/Plugins</a>&nbsp;<br />
<a href="http://jquery.com/plugins/most_popular" target="_blank">http://jquery.com/plugins/most_popular</a>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.8 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch8/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch8/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 12:05:45 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=323</guid>
		<description><![CDATA[ch.8 Talk to the server with Ajax .method{background-color:#ffffcc;color:#000000;margin:10px;width:250px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 8.1 Brushing up on Ajax 簡單地說明了ajax運作的過程 8.2 Loading content into elements 8.2.1 Loading content with jQuery 首先先介紹jQuery中ajax最簡單的一個command load(url,parameters,callback) url是要求的網址 parameters是以object形式帶入的參數 如果有值是使用POST method，省略的話則是使用GET method callback是當load好的值已經被放入elements後執行的function 這個function有三個參數 response text、the status code跟the XHR &#8230; <a href="http://blog.hsin.tw/2009/jquery-in-action-ch8/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ch.8 Talk to the server with Ajax<br />
<span id="more-323"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:250px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">8.1 Brushing up on Ajax</div>
<p><!--div class="subtitle">8.1.1 Creating an XHR instance</div>
<div class="subtitle">8.1.2 Initiating the request</div>
<div class="subtitle">8.1.3 Keeping track of progress</div>
<div class="subtitle">8.1.4 Getting the response</div-->
簡單地說明了ajax運作的過程</p>
<div class="title">8.2 Loading content into elements</div>
<div class="subtitle">8.2.1 Loading content with jQuery</div>
<p>首先先介紹jQuery中ajax最簡單的一個command</p>
<div class="method">load(url,parameters,callback)</div>
<p>url是要求的網址<br />
parameters是以object形式帶入的參數<br />
如果有值是使用POST method，省略的話則是使用GET method<br />
callback是當load好的值已經被放入elements後執行的function<br />
這個function有三個參數 response text、the status code跟the XHR instance</p>
<pre class="brush: jscript; title: ; notranslate">
$('.injectMe').load('/someResource #div');
</pre>
<p>這個例子會讀取/someResource頁面的東西<br />
並將內容填入所有class=injectMe的elements中<br />
有一點可以提的是 在url這個參數中 如果只是要取得該頁面上部份的內容時<br />
可以在後面加上selector<br />
像這個例子就是取得/someResource中&lt;div>裡的內容</p>
<div class="method">serialize()</div>
<p>而如果要使用表單中的值帶入參數<br />
可以利用serialize()來將要傳送的值轉成query string</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form id=&quot;form1&quot; name=&quot;form1&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;myname&quot; value=&quot;joe&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;age&quot; value=&quot;18&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;city&quot; value=&quot;taipei&quot;&gt;
&lt;/form&gt;
</pre>
<pre class="brush: jscript; title: ; notranslate">
var str = $(&quot;#form1&quot;).serialize();
//str會轉成這樣
// myname=joe&amp;age=18&amp;city=taipei
</pre>
<div class="method">serializeArray()</div>
<p>而serializeArray()則是會返回一個object</p>
<pre class="brush: jscript; title: ; notranslate">
var myobj = $(&quot;#form1&quot;).serializeArray();
</pre>
<p>myobj會轉成這樣<br />
[{name: 'myname', value:'joe'},{name: 'age', value:'18'},{name: 'city', value:'taipei'}]</p>
<div class="subtitle">8.2.2 Loading dynamic inventory data</div>
<p>舉一個賣鞋的頁面來練習load()</p>
<div class="title">8.3 Making GET and POST requests</div>
<div class="subtitle">8.3.1 Getting data with jQuery</div>
<div class="method">$.get(url,parameters,callback)</div>
<p>以get method連線</p>
<pre class="brush: jscript; title: ; notranslate">
$.get(
	'getmydata.php',
	{a:1, b:2, c:3},
	function(data){alert(data);}
);
</pre>
<p>url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status</p>
<div class="subtitle">8.3.2 Getting JSON data</div>
<div class="method">$.getJSON(url,parameters,callback)</div>
<p>url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status<br />
與$.get()相同 但是是返回JSON形式的值</p>
<div class="subtitle">8.3.3 Making POST requests</div>
<div class="method">$.post(url,parameters,callback)</div>
<p>以post method連線<br />
url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status</p>
<div class="title">8.4 Taking full control of an Ajax request</div>
<p>前一節介紹的是簡易的ajax連線方式<br />
這節則是會介紹比較詳細 可以設定較多細節的方式</p>
<div class="subtitle">8.4.1 Making Ajax requests with all the trimmings</div>
<div class="method">$.ajax(options)</div>
<p>可以帶的參數很多<br />
這裡舉較常使用的三個<br />
其他的可以到<a href="http://docs.jquery.com/Ajax/jQuery.ajax#toptions" target="_blank">docs</a>看</p>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
  url: &quot;test.js&quot;,
  type: &quot;GET&quot;,
  dataType: &quot;script&quot;
});
</pre>
<p>url是要求的網址<br />
type是POST或是GET<br />
dataType是返回值的形式 可以填入的有xml、xml、xml、json、jsonp、text</p>
<div class="subtitle">8.4.2 Setting request defaults</div>
<div class="method">$.ajaxSetup(properties)</div>
<p>$.ajaxSetup()設定同一個頁面中$.ajax()可以共用的參數<br />
可以帶入的參數也就是前一小節(8.4.1)所說的參數<br />
這個不會影響到load()<br />
而設定type時也不會影響到$.get()跟$.post()</p>
<div class="subtitle">8.4.3 Global functions</div>
<p>除了可以用$.ajaxSetup()預設參數外<br />
還有在ajax連線中的不同階段可以使用的function<br />
ajaxStart()、ajaxSend()、ajaxSuccess()、ajaxError()、ajaxComplete()、ajaxStop()<br />
可以到<a href="http://docs.jquery.com/Ajax" target="_blank">docs</a>看</p>
<div class="title">8.5 Putting it all together</div>
<p>是一個綜合練習的例子</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.7 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch-7/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch-7/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 12:03:52 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=316</guid>
		<description><![CDATA[ch.7 Extending jQuery with custom plugins .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 7.1 Why extend? 使用自訂擴充的plugin可以讓程式及設計有一致性 而且建立重複使用的設計有很多優點 繼承進而擴充了jQuery裡原本就存在的功能更是可以讓事情變得更簡單 7.2 The jQuery plugin authoring guidelines 要建立自訂擴充的plugin需要一定的規範及規則 以確保可以與其他plugin甚至是其他js lib正常地運作 Extending jQuery包含了像是Utility functions或是Methods兩種形式 7.2.1 Naming files and functions 為了避免plugin的檔名與原本已經在使用或是其他人建立的檔名重複 這邊提了三點建議 1.以jquery為開頭(可以避免與不是以jQuery為基礎的其他js檔重複) 2.接著可以寫這個plugin的名字 3.最後以.js結尾 以書中的例子來說 如果要寫一個名為Fred的plugin 其檔名可以命名為jquery.fred.js &#8230; <a href="http://blog.hsin.tw/2009/jquery-in-action-ch-7/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ch.7 Extending jQuery with custom plugins<br />
<span id="more-316"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">7.1 Why extend?</div>
<p>使用自訂擴充的plugin可以讓程式及設計有一致性<br />
而且建立重複使用的設計有很多優點<br />
繼承進而擴充了jQuery裡原本就存在的功能更是可以讓事情變得更簡單</p>
<div class="title">7.2 The jQuery plugin authoring guidelines</div>
<p>要建立自訂擴充的plugin需要一定的規範及規則<br />
以確保可以與其他plugin甚至是其他js lib正常地運作<br />
Extending jQuery包含了像是Utility functions或是Methods兩種形式</p>
<div class="subtitle">7.2.1 Naming files and functions</div>
<p>為了避免plugin的檔名與原本已經在使用或是其他人建立的檔名重複<br />
這邊提了三點建議<br />
1.以jquery為開頭(可以避免與不是以jQuery為基礎的其他js檔重複)<br />
2.接著可以寫這個plugin的名字<br />
3.最後以.js結尾<br />
以書中的例子來說<br />
如果要寫一個名為Fred的plugin<br />
其檔名可以命名為<b>jquery.fred.js</b></p>
<p>另一個有用的方法 可以上<a href="http://docs.jquery.com/Plugins">jQuery收集plugin的地方</a>找找看<br />
如果看到相同的名字就可以避免重複囉</p>
<p>同樣的避免function名字與別人重複到<br />
也是一樣的方法</p>
<div class="subtitle">7.2.2 Beware the $</div>
<pre class="brush: jscript; title: ; notranslate">
jQuery('#myitem').show();
</pre>
<p>如果是自己在寫jQuery的script時<br />
常常會使用$來代替jQuery的寫法<br />
但是在寫plugin時<br />
則是可以使用jQuery來寫<br />
以避免不確定性(例如同頁面有使用prototype.js)囉<br />
或是如前一章6.2所提的</p>
<pre class="brush: jscript; title: ; notranslate">
(function($){
//
// 在這裡使用$
//
})(jQuery);
</pre>
<p>寫在這裡面時就可以用$囉</p>
<div class="subtitle">7.2.3 Taming complex parameter lists</div>
<p>在使用plugin時可能會需要傳入不同的參數來運用<br />
但是有時只需要用預設值就好了</p>
<pre class="brush: jscript; title: ; notranslate">
//例如有一個function有7個參數
function complex(p1,p2,p3,p4,p5,p6,p7) {/* ... */}
//
//但有時只需要填入p1或是p7的值來使用
complex(valueA,null,null,null,null,null,valueB);
//
//甚或是這樣
complex(valueA,null,valueC,valueD,null,null,valueB);
</pre>
<p>這樣會造成傳入及讀取參數的複雜度<br />
所以可以使用下面的方法來取代</p>
<pre class="brush: jscript; title: ; notranslate">
complex(valueA, {
  p3: valueC,
  p4: valueD,
  p7: valueB
});
</pre>
<p>將一定要傳入的參數如同之前一樣的設定置放<br />
而把其他有時候可以省略的參數合併放在一個object中<br />
這樣便不用在意是第幾個參數省略<br />
或是傳入了多少個參數了</p>
<p>在plugin裡要使用參數的時候<br />
可以利用6.3.6講到的$.extend()</p>
<pre class="brush: jscript; title: ; notranslate">
function complex(p1,options){
  var settings = $.extend({
    option1: defaultValue1,
    option2: defaultValue2,
    option3: defaultValue3,
    option4: defaultValue4,
    option5: defaultValue5,
    option6: defaultValue6
  },options||{});
  //其他script
}
</pre>
<p>因為$.extend()裡排在後面的object會把前面的object中有相同的property值蓋過去<br />
所以如果有填入參數 就會使用填入的參數<br />
不然就是使用預設的參數<br />
而有一點要注意的是<b>||{}</b>這個地方<br />
當完全沒有填入參數時<br />
就都使用plugin中的預設值</p>
<div class="title">7.3 Writing custom utility functions</div>
<pre class="brush: jscript; title: ; notranslate">
(function($){
//
// 在這裡使用$
//
})(jQuery);
</pre>
<p>就如同7.2.2講的<br />
如果在plugin中有大量使用到jQuery自己本身的method<br />
可以使用上面這樣的方法<br />
就可以在裡面使用$ 而不受到干擾</p>
<div class="subtitle">7.3.1 Creating a data manipulation utility function</div>
<div class="subtitle">7.3.2 Writing a date formatter</div>
<p>這兩小節各別有一個Utility functions類型的自訂擴充練習</p>
<div class="title">7.4 Adding new wrapper methods</div>
<p>要建立wrapper methods是使用<b>$.fn</b><br />
下面是一個簡單的例子</p>
<pre class="brush: jscript; title: ; notranslate">
(function($){
  $.fn.makeItBlue = function() {
    return this.css('color','blue');
  }
})(jQuery);
</pre>
<p>通常來說 除非是特殊需要<br />
否則return的值仍是該wrapped set<br />
這樣才能繼續在chain中使用這組elements</p>
<div class="subtitle">7.4.1 Applying multiple operations in a wrapper method</div>
<div class="subtitle">7.4.2 Retaining state within a wrapper method</div>
<p>這兩小節各別有一個wrapper method類型的自訂擴充練習</p>
<pre class="brush: jscript; title: ; notranslate">
(function($){
  //將settings定義在這裡 才能讓其他的methods(如下面的showPhoto)使用到
  var settings;
  //主要的plugin
  $.fn.photomatic = function(callerSettings) {
    //如同7.2.3所講的參數用法一樣
    settings = $.extend({
      photoElement: '#photomaticPhoto',
      lastControl: null
    }, callerSettings || {});
    //plugin所執行的功能
    settings.thumbnails = this.filter('img');
    settings.thumbnails.click(function(){ showPhoto(this.index); });
    //如果有需要 可以給一個初始值
    showPhoto(0);
    //返回同樣的wrapped set
    return this;
  };
  //將重複性的功能另外寫一個method
  var showPhoto = function(index) {
    settings.photoElement
      .attr('src',settings.transformer(settings.thumbnails[index].src));
    settings.current = index;
  };
})(jQuery);
</pre>
<p>在7.4.2中 講解的例子架構大概是上面這樣(有刪掉部份的東西)</p>
<p><!--<br />
-本章小節-<br />
自己寫plugin我還沒嘗試過<br />
下次來踹踹<br />
(有結跟沒結一樣...)<br />
--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.6 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch-6/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch-6/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 12:11:36 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=304</guid>
		<description><![CDATA[ch.6 jQuery utility functions .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 這章會介紹除了操作elements外的utility functions 6.1 Using the jQuery flags 這節要介紹三個jQuery flags $.browser $.boxModel $.styleFloat 6.1.1 Detecting the user agent (jQuery1.3已經不建議使用$.browser，而有新增一個新的物件$.support) 檢測使用者所用的瀏覽器 一開始是先介紹使用判斷method的方法 而這個可能發生的問題是 method可以使用 但是裡面帶的參數因為不同的瀏覽器而有不同的意義 所以jQuery提供了一個辨識瀏覽器的方法 $.browser 會有下面幾個值 $.browser.msie $.browser.mozilla $.browser.safari $.browser.opera $.browser.version 前面四個返回的是boolean值 是將瀏覽器歸類到四大類 &#8230; <a href="http://blog.hsin.tw/2009/jquery-in-action-ch-6/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ch.6 jQuery utility functions<br />
<span id="more-304"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<p>這章會介紹除了操作elements外的utility functions</p>
<div class="title">6.1 Using the jQuery flags</div>
<p>這節要介紹三個jQuery flags<br />
$.browser<br />
$.boxModel<br />
$.styleFloat</p>
<div class="subtitle">6.1.1 Detecting the user agent</div>
<div style="color:#cc0000;">(jQuery1.3已經不建議使用$.browser，而有新增一個新的物件<a href="http://docs.jquery.com/Utilities/jQuery.support" target="_blank">$.support</a>)</div>
<p>檢測使用者所用的瀏覽器<br />
一開始是先介紹使用判斷method的方法</p>
<pre class="brush: jscript; title: ; notranslate">
if (element.attachEvent) {
  element.attachEvent('onclick',someHandler);
}
else if (element.addEventListener) {
  element.addEventListener('click',someHandler);
}
else {
  throw new Error('event handling not supported');
}
</pre>
<p>而這個可能發生的問題是 method可以使用<br />
但是裡面帶的參數因為不同的瀏覽器而有不同的意義<br />
所以jQuery提供了一個辨識瀏覽器的方法</p>
<div class="method">$.browser</div>
<pre class="brush: jscript; title: ; notranslate">
if($.browser.msie){
	alert('這是IE瀏覽器');
}
</pre>
<p>會有下面幾個值<br />
$.browser.msie<br />
$.browser.mozilla<br />
$.browser.safari<br />
$.browser.opera<br />
$.browser.version<br />
前面四個返回的是boolean值<br />
是將瀏覽器歸類到四大類<br />
如果為該類即返回true<br />
其餘會是false<br />
而有些瀏覽器因為版本不同 也可能會有差異 所以$.browser.version是使用的版本</p>
<p>建議是method方法也無法判別了才使用$.browser</p>
<div class="subtitle">6.1.2 Determining the box model</div>
<div style="color:#cc0000;">(jQuery1.3已經不建議使用$.boxModel，而有新增一個新的物件<a href="http://docs.jquery.com/Utilities/jQuery.support" target="_blank">$.support</a>)</div>
<div class="method">$.boxModel</div>
<p>$.boxModel返回一個boolean值<br />
當是使用W3C standard box model時返回true<br />
而使用IE box model(或是說traditional box model)時返回false<br />
這個需要用到的時機<br />
書中提到的是關於width跟height的解釋<br />
使用W3C standard box model時<br />
計算width跟height不會包含padding跟border的pixels<br />
而IE box model則會包含<br />
所以可能會造成elements的大小在不同瀏覽器看起來會不太一樣</p>
<div class="subtitle">6.1.3 Detecting the correct float style to use</div>
<div class="method">$.styleFloat</div>
<p>在不同的瀏覽器對於float有不同的名字<br />
在IE是styleFloat 其他的則是cssFloat<br />
所以使用$.styleFloat就不用擔心這個問題了</p>
<pre class="brush: jscript; title: ; notranslate">
element.style[$.styleFloat] = 'left';
</pre>
<p>不過通常使用css(&#8216;float&#8217;)就可以了<br />
$.styleFloat主要是給plugins或是extensions製作的人使用</p>
<div class="title">6.2 Using other libraries with jQuery</div>
<div class="method">$.noConflict()</div>
<p>在Ch1有稍微提到<br />
如果在同個頁面上要使用其他的javascript library<br />
可以使用$.noConflict()來避免衝突</p>
<pre class="brush: jscript; title: ; notranslate">
var $j = jQuery.noConflict();
</pre>
<p>這樣就可以使用$j來代替jQuery或是$了</p>
<p>或是可以使用下面這樣</p>
<pre class="brush: jscript; title: ; notranslate">
//要注意有帶參數$喔
(function($) { /* function body here */ })(jQuery);
//或是下面這個ready function
jQuery(function($){alert('$ = '+ $);});
</pre>
<p>在裡面就還是可以使用$來操作囉</p>
<div class="title">6.3 Manipulating JavaScript objects and collections</div>
<div class="subtitle">6.3.1 Trimming strings</div>
<div class="method">$.trim(value)</div>
<pre class="brush: jscript; title: ; notranslate">
$('#someField').val($.trim($('#someField').val()));
</pre>
<p>就像PHP中trim()的函式<br />
將字串前後的空白都消除掉<br />
在表單驗證中很常用到</p>
<div class="subtitle">6.3.2 Iterating through properties and collections</div>
<div class="method">$.each(container,callback)</div>
<p>對一個array或object中的值依序作處理</p>
<pre class="brush: jscript; title: ; notranslate">
var anArray = ['one','two','three'];
$.each(anArray,function(n,value) {
  //do something here
});
var anObject = {one:1, two:2, three:3};
$.each(anObject,function(name,value) {
  //do something here
});
</pre>
<p>container是要處理的array或是object<br />
callback是作處理的function<br />
這個function會有兩個參數 第一個是index 第二個是value</p>
<div class="subtitle">6.3.3 Filtering arrays</div>
<div class="method">$.grep(array,callback,invert)</div>
<p>以某個條件過濾一個array以生成另一個新的array </p>
<pre class="brush: jscript; title: ; notranslate">
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
var newarr = $.grep(arr, function(n, i){
					      return (n &gt; 5);
					    });
//新生成的newarr會是 [9, 8, 6, 9, 7, 8, 6, 9]
</pre>
<p>第一個參數array很明顯的就是要處理的array<br />
第二個參數callback是作處理的function 會有兩個參數 第一個是value 第二個是index<br />
第三個參數invert是個boolean值<br />
如果省略invert或是填寫false時 當callback返回值為true的話 就會將這個值放進新生成的array中<br />
如果invert填入true 則當callback返回值為false才會將這個值放進新生成的array中</p>
<pre class="brush: jscript; title: ; notranslate">
var bigNumbers = $.grep(originalArray,'a&gt;100');
//這時jQuery會自己建立一個function
function(a,i){return a&gt;100;}
//而a就是value ,i就是index
</pre>
<p>如上所示 callback也可以簡寫為一個string</p>
<div class="subtitle">6.3.4 Translating arrays</div>
<div class="method">$.map(array,callback)</div>
<p>對一個array作處理並生成為一個新array<br />
第一個參數array是要處理的array<br />
第二個參數callback是作處理的function 會有兩個參數 第一個是value 第二個是index</p>
<pre class="brush: jscript; title: ; notranslate">
//將array中的每個值都+1
var oneBased = $.map([0,1,2,3,4],function(value){return value+1;});
//callback如同$.grep()一樣 也是可以寫成一個string
var oneBased = $.map([0,1,2,3,4],'a+1');
</pre>
<p>而有一點要注意的是<br />
如果callback返回值為null或是undefined<br />
則這個值就不會被放進新array中<br />
所以新的array元素個數是有可能比原本的array少</p>
<pre class="brush: jscript; title: ; notranslate">
var characters = $.map(
  ['that','other thing'],
  function(value){return value.split('');}
);
//characters會是['t','h','a','t','o','t','h','e','r',' ','t','h','i','n','g']
</pre>
<p>如上所示 另一個可以提的是<br />
如果callback處理值完之後 回傳的是一個array<br />
則會將這些所有回傳的array都和在同一個新的array中</p>
<div class="subtitle">6.3.5 More fun with JavaScript arrays</div>
<div class="method">$.inArray(value,array)</div>
<p>判斷一個array中有沒有某個值</p>
<pre class="brush: jscript; title: ; notranslate">
var index = $.inArray(2,[1,2,3,4,5]);
//會返回1
</pre>
<p>第一個參數value是要判斷的值<br />
當第二個參數array中遇到第一個值為value的時候 會返回其index<br />
找不到的時候則會返回-1</p>
<div class="method">$.makeArray(object)</div>
<pre class="brush: jscript; title: ; notranslate">
var images = document.getElementsByTagName(&quot;img&quot;);
//這樣是一個NodeList
</pre>
<p>將一個array-like object(像是一個NodeList)轉換成array</p>
<div class="method">$.unique(array)</div>
<p>將array中相同的值剔除掉</p>
<div class="subtitle">6.3.6 Extending objects</div>
<div class="method">$.extend(target,source1,source2, &#8230; sourceN)</div>
<p>將數個object合併<br />
下面是一個簡單的例子</p>
<pre class="brush: jscript; title: ; notranslate">
var target =  { a: 1, b: 2, c: 3 };
var source1 = { c: 4, d: 5, e: 6 };
var source2 = { e: 7, f: 8, g: 9 };
$.extend(target,source1,source2);
</pre>
<p>如果沒有返回給一個新的object<br />
則是會合併在第一個參數target<br />
而這個例子中 target會變為{a: 1, b: 2, c: 4, d: 5, e: 7, f: 8, g: 9}<br />
有一點要注意的是<br />
如果objects中有相同的property 則後面的object的會蓋過前面的<br />
(這個例子就是source1的c:4會蓋過target的c:4，source2的e:7會蓋過source1的e:6)</p>
<div class="title">6.4 Dynamically loading scripts</div>
<div class="method">$.getScript(url,callback)</div>
<p>依據條件或是情況下再讀取其他的外部script 而不是在頁面load時就讀取script<br />
第一個參數url是要讀取的script的路徑<br />
第二個參數是讀取script完成後會執行的function</p>
<p><!--[本章小結]<br />
我以前比較少用到utility functions的東西<br />
所以這章講的東西大多都是第一次見到<br />
有些東西看起來<br />
用了應該是可以省很多力氣的~<br />
但是還是要多想多練習才知道哪裡需要用或是用得到--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.5 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch5/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch5/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 11:50:49 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=297</guid>
		<description><![CDATA[ch.5 Sprucing up with animations and effects .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 5.1 Showing and hiding elements 要簡單地顯示或隱藏elements 是使用show()以及hide()這兩個方法 這裡還有提到一點就是 如果頁面上某個element要預設成隱藏 書裡推薦的是在頁面load完後再使用hide()將他隱藏 會比直接在style裡加display:none;好 5.1.1 Implementing a collapsible list 這個小節利用一個巢狀列表 以顯示或是隱藏裡面的資訊來練習show()及hide() 5.1.2 Toggling the display state of elements 還有一個可以切換顯示或是隱藏elements的方法 toggle() 當elements是隱藏的時候 使用toggle()會將他顯示 相反也是一樣 &#8230; <a href="http://blog.hsin.tw/2009/jquery-in-action-ch5/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ch.5 Sprucing up with animations and effects<br />
<span id="more-297"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">5.1 Showing and hiding elements</div>
<p>要簡單地顯示或隱藏elements 是使用<b>show()</b>以及<b>hide()</b>這兩個方法</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myimg&quot;).hide();
$(&quot;#myimg&quot;).show();
</pre>
<p>這裡還有提到一點就是<br />
如果頁面上某個element要預設成隱藏<br />
書裡推薦的是在頁面load完後再使用hide()將他隱藏<br />
會比直接在style裡加display:none;好</p>
<div class="subtitle">5.1.1 Implementing a collapsible list</div>
<p>這個小節利用一個巢狀列表 以顯示或是隱藏裡面的資訊來練習show()及hide()</p>
<div class="subtitle">5.1.2 Toggling the display state of elements</div>
<p>還有一個可以切換顯示或是隱藏elements的方法 <b>toggle()</b></p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myimg&quot;).toggle();
</pre>
<p>當elements是隱藏的時候 使用toggle()會將他顯示 相反也是一樣</p>
<div class="title">5.2 Animating the display state of elements</div>
<p>這節是要介紹比較不突兀的顯示或隱藏elements的方法<br />
利用一些effect來讓這個動作比較平滑</p>
<div class="subtitle">5.2.1 Showing and hiding elements gradually</div>
<div class="method">hide(speed,callback)</div>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myimg&quot;).show('fast');
$(&quot;#myimg&quot;).hide(2000);
</pre>
<p>第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast)<br />
如果省略的話 則是會像上節講的一樣直接隱藏<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="method">show(speed,callback)</div>
<div class="method">toggle(speed,callback)</div>
<p>同樣的 show()跟toggle()的用法也是一樣<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast)<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.2 Fading elements into and out of existence</div>
<p>另一種顯示或隱藏的方法是改變elements的透明度直到完全透明或是完全顯示<br />
<b>fadeIn()</b>跟<b>fadeOut()</b></p>
<div class="method">fadeOut(speed,callback)</div>
<div class="method">fadeIn(speed,callback)</div>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myimg&quot;).fadeOut('fast');
</pre>
<p>(與show()、hide()、toggle()的參數用法一樣)<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<p>另一個方法<b>fadeTo()</b>則是可以調整elements的透明度</p>
<div class="method">fadeTo(speed,opacity,callback)</div>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myimg&quot;).fadeTo('fast',0.5);
</pre>
<p>第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數opacity是透明度 他的範圍可以填入0.0 ~ 1.0<br />
第三個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.3 Sliding elements up and down</div>
<p>還有另一種顯示或隱藏的方法是將elements慢慢向上收回或是慢慢向下展開<br />
<b>slideDown()</b>跟<b>slideUp()</b>及切換的<b>slideToggle()</b></p>
<div class="method">slideDown(speed,callback)</div>
<div class="method">slideUp(speed,callback)</div>
<div class="method">slideToggle(speed,callback)</div>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myimg&quot;).slideDown(1000);
$(&quot;#myimg&quot;).slideToggle('slow');
</pre>
<p>(與show()、hide()、toggle()的參數用法一樣)<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.4 Stopping animations</div>
<div class="method">stop()</div>
<p>當要停止某個elements的動作時 要使用stop()</p>
<div class="title">5.3 Creating custom animations</div>
<p>jQuery提供了一個方法<b>animate()</b> 可以讓我們自己設計想要elements作的動作</p>
<div class="method" style="width:300px;">animate(properties,duration,easing,callback)</div>
<div class="method">animate(properties,options)</div>
<pre class="brush: jscript; title: ; notranslate">
$('#animateMe').animate(
	{opacity:0,top:0}
  ,'slow'
  ,function(){ $(this).hide(); }
);
</pre>
<p>properties是填入一個object 而這個object要包含所有最後要達到css stlye<br />
(例如elements的寬度要達到600px 之類的)<br />
duration可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
easing是漸變的方式 有兩種內建的方式linear(線性)、swing(搖擺)<br />
callback是擺一個function 當這個動作完成時會執行<br />
options是填入一個object 而這個object則是可以填入上面講過的duration、easing跟complete(也就是上面說的callback)<br />
還有另一個可以填入的是queue 如果設定為false 則這個動作會立即被執行(也就是如果後面也跟著另一個animate() 這個動作會同時執行)<br />
<b>[update]</b><br />
如果要設定顏色的漸變 還要再裝<a href="http://plugins.jquery.com/project/color" target="_blank">plugin</a></p>
<div class="subtitle">5.3.1 A custom scale animation</div>
<p>先介紹一個改變尺寸的例子</p>
<pre class="brush: jscript; title: ; notranslate">
$('.animateMe').each(function(){
	$(this).animate(
		{
			width: $(this).width() * 2,
			height: $(this).height() * 2
		},
		2000
	);
});
</pre>
<p>將class=animateMe的elements在2秒(2000毫秒)的時間內將長寬都各別變大為兩倍</p>
<div class="subtitle">5.3.2 A custom drop animation</div>
<p>介紹一個drop的例子</p>
<pre class="brush: jscript; title: ; notranslate">
$('.animateMe').each(function(){
	$(this)
		.css('position','relative')
		.animate(
			{
				opacity: 0,
				top: $(window).height() - $(this).height() - $(this).position().top
			},
			'slow',
			function(){ $(this).hide(); });
});
</pre>
<p>要先將elements的position設定為relative(因為這樣才能動)<br />
改變class=animateMe的elements的透明度及高度<br />
最後會被移到畫面的底部 並且透明度會變0(也就是完全透明)<br />
然後再將elements隱藏起來</p>
<p>有一點可以提的是<br />
如果將opacity:0改成opacity:"hide"<br />
這個動作最後完成時會直接將elements隱藏<br />
同時也不需要最後的callback的function</p>
<div class="subtitle">5.3.3 A custom puff animation</div>
<p>一個擴散並消失的例子<br />
將前兩小節的功能結合在一起</p>
<pre class="brush: jscript; title: ; notranslate">
$('.animateMe').each(function(){
	var position = $(this).position();
	$(this)
		.css({position:'absolute',top:position.top,
					left:position.left})
		.animate(
			{
        opacity: 'hide',
        width: $(this).width() * 5,
        height: $(this).height() * 5,
        top: position.top - ($(this).height() * 5 / 2),
        left: position.left - ($(this).width() * 5 / 2)
      },
      'normal');
});
</pre>
<p>因為在擴散的過程中 elements的位置會向右下方長大<br />
所以同時也要改變位置 讓看起來的位置像沒有變一樣(真繞舌)<br />
首先要改變position為absolute 並給定目前的top跟left<br />
然後最終要到達的狀態是<br />
opacity就跟前一小節講的一樣 hide的意思就是最後會隱藏起來<br />
寬度跟高度則是變為原來的五倍<br />
top跟left則是要計算成會讓elements的中心點像是沒有變一樣(也就是向四方擴散)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.4 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch4/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch4/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 11:08:02 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=272</guid>
		<description><![CDATA[ch4 Events are where it happens! .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 4.1 Understanding the browser event models 4.1.1 The DOM Level 0 Event Model 4.1.2 The DOM Level 2 Event Model 4.1.3 The Internet Explorer Event Model 解釋了DOM中event操作的方式 以及IE自己獨到的model 那就是這樣了 繼續讀下去 絕對不是我翻不出來XD &#8230; <a href="http://blog.hsin.tw/2009/jquery-in-action-ch4/">繼續閱讀 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ch4 Events are where it happens!<br />
<span id="more-272"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">4.1 Understanding the browser event models</div>
<p>4.1.1 The DOM Level 0 Event Model<br />
4.1.2 The DOM Level 2 Event Model<br />
4.1.3 The Internet Explorer Event Model<br />
解釋了DOM中event操作的方式<br />
以及IE自己<del datetime="2009-06-10T09:08:13+00:00">獨到</del>的model<br />
那就是這樣了 繼續讀下去<br />
<del datetime="2009-06-10T09:08:13+00:00">絕對不是我翻不出來XD</del></p>
<div class="title">4.2 The jQuery Event Model</div>
<p>jQuery提供了統一的event操作方式</p>
<div class="subtitle">4.2.1 Binding event handlers using jQuery</div>
<p>jQuery要對element綁定event是使用bind()</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;img&quot;).bind('click',function(event){alert('Hi there!');});
</pre>
<p>當按下&lt;img>時 會觸發參數中的函式</p>
<div class="method">bind(eventType,data,listener)</div>
<p>eventType是event的類型(click、focus這些)<br />
data是帶給listener的參數 可以省略<br />
listener是觸發後執行的函式 如果第二個參數data省略的話 這就會變成第二個參數</p>
<p>而對於常用的event jQuery也提供了各自的方法<br />
例如click event 如下</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;img&quot;).click(function(){alert('Hi there!');});
</pre>
<p>按下圖片時會alert<br />
其他可以看<a href="http://docs.jquery.com/Events" target="_blank">官網</a></p>
<p>另一個跟bind()很像的是one()</p>
<div class="method">one(eventType,data,listener)</div>
<p>用法跟bind()一樣<br />
但是當這個函式被觸發一次之後 就會被自動地移除掉</p>
<div class="subtitle">4.2.2 Removing event handlers</div>
<p>而要移除的話是用unbind()</p>
<div class="method">unbind(eventType,listener)</div>
<p>如果兩個參數都省略的話 就是移除掉這個element所有的event<br />
有寫eventType的話 是看要移除哪個event<br />
listener則是移除掉bind()所建立的函式</p>
<div class="subtitle">4.2.3 Inspecting the Event instance</div>
<p>jQuery在event觸發後的函式中<br />
也有可以觀察頁面上的方法<br />
如要檢查有沒有按下ctrl鍵、alt鍵或是任何的數字字母鍵<br />
以及滑鼠目前的座標等等<br />
可是我找不到官網文件哪裡有寫 ._.</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;img&quot;).keypress(function(e){alert(e.keyCode);});
</pre>
<p>判斷按下了哪個鍵(該鍵的keyCode)</p>
<div class="subtitle">4.2.4 Affecting the event propagation</div>
<p>event的stopPropagation()<br />
是阻止這個event往父節點的方向越往外觸發event<br />
preventDefault()<br />
則是停止這個event預設的任何動作<br />
(這兩個應該是這樣吧 總覺得好像解釋的不太對= =a js真是博大精深XD)</p>
<div class="subtitle">4.2.5 Triggering event handlers</div>
<div class="method">trigger(eventType)</div>
<p>觸發element的event</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;form:first&quot;).trigger(&quot;submit&quot;);
</pre>
<p>像是可以submit而不用按按鍵</p>
<div class="method">eventName()</div>
<p>jQuery同樣的也提供了多個簡便的使用方法<br />
如click()、focus()、blur()<br />
可以像使用trigger()一樣的觸發特定的event</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;input&quot;).click();
</pre>
<p>按下&lt;input>時會觸發click event(可以先用bind()綁定click event)</p>
<div class="subtitle">4.2.6 Other event-related commands</div>
<p>另外兩個跟操作event有關的method</p>
<div class="method">toggle(listenerOdd,listenerEven)</div>
<p>交互觸發不同的listener<br />
下面是一個簡單的例子 顯示或隱藏一個id=say的element</p>
<pre class="brush: jscript; title: ; notranslate">
$('#btn').toggle(
	function(event){
		$(&quot;#say&quot;).show();
	},
	function(event){
		$(&quot;#say&quot;).hide();
	}
);
</pre>
<p>按第一下會顯示 按第二下會隱藏 依序循環</p>
<div class="method">hover(overListener,outListener)</div>
<p>另一個常用的event是當滑鼠移入跟移出element時要觸發的event<br />
移入時是overListener<br />
移出時則是outListener</p>
<pre class="brush: jscript; title: ; notranslate">
$('#myimg').hover(reportover,reportout);
</pre>
<p>有一點要注意的是<br />
element裡面如果有child elements時 是不會造成移出的效果<br />
而是要移出該element才會有</p>
<div class="title">4.3 Putting events (and more) to work</div>
<p>這節是運用前面所學到的知識作一個綜合運用<br />
一個點菜菜單<br />
其中有一個用法可以看一下</p>
<pre class="brush: jscript; title: ; notranslate">
$(':checkbox').click(function(){
	$('div',$(this).parents('div:first'))
	.css('display','block');
});
</pre>
<p>這個element <b>$(&#8216;div&#8217;,$(this).parents(&#8216;div:first&#8217;))</b> 指的是<br />
往this的parents(也就是從父層開始往外推出去)找第一個遇到的div<br />
而這個找到的div中的div為返回的elements<br />
(很繞舌XD)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

