jQuery stopPropagation 和 stopImmediatePropagation 比較

近期在幫公司導入 Backbone.js 技術,把後台全面改寫成 Javascript MVC 架構,技術包含 jQuery + Backbone.js + Underscore.js + Mustache Template,這些技術我想可以寫另外一篇 Backbone.js 初體驗,這邊就先不多說了,在 Backbone.js 的 View 架構裡,可以任意 bind events,程式碼如下:

RT.View = Backbone.View.extend({
initialize: function() {   
    if (this.model) {
        this.model.bind("change", this.render, this);
    }
    if (this.collection) {
        this.collection.bind("all", this.render, this);
    }
},

events: { 
  'click .add': 'add',
  'click .edit': 'edit',
  'click .delete': 'delete_item',
  'click .delete_all': 'delete_all'
},

add: function(e) {

}, )};

上面程式碼可以看到,將 click 事件綁在不同 Class 上,但是問題來了,如果同時 new 兩個 RT.View 物件,當我觸發 click 事件時,就會發生兩次一樣的效果,該如何解決這問題呢,可以透過 jQuery 的 stopPropagationstopImmediatePropagation,這兩個其實很好區分,前者只會防止目前 Dom Tree 的上一層事件,後者則是會防止全部 Dom Tree 事件

[Read More]

PHP function 參數 default value

php-logo

2011.08.06 Update: 感謝 jaceju 指正筆誤 自己定義 PHP Function 的時候,假設該函式有1個參數,您可以傳入該參數或者是不傳,但是函式裡面如何判斷是否有傳入該參數呢?先看看底下例子:

function test($arg_1 = NULL)
{
    // 判斷 $arg_1 參數是否傳入
    $arg_1 = $arg_1 || 'test';
    echo $arg_1; 
}
你會發現上面結果會是

1,而不是 test,大家會懷疑為什麼這樣寫不行呢,那是因為 || 是 boolean operators,他只會 return true 或是 false,而不是回傳 string,如果想這這樣寫,大概可以用 javascript 或 perl 語言來寫,javascript 可以參考之前的文章 [Javascript] 在函數裡設定參數預設值,然而 PHP 的正確寫法要用 ?: 來取代

function test($arg_1 = NULL)
{
    // 判斷 $arg_1 參數是否傳入
    $arg_1 = (isset($arg_1)) ? $arg_1 : 'test';
    // 或者是
    $arg_1 = $arg_1 ? $arg_1 : 'test';
    echo $arg_1; 
}
請參考

Logical Operators

你不可不知的 JSON 基本介紹

還不知道 JSON 是什麼嘛?本篇教學會帶您瞭解 JSON 在網站上的應用,以及運作流程跟使用 PHPJavaScript 來處理 JSON。假如您現在的工作就是網站設計師,相信一定聽過 JSON,但是什麼是 JSON,它能夠做什麼,及您能透過它在網站上做到哪些事情呢?

透過本篇介紹您可以瞭解基本的 JSON,底下會列出本篇會提到的重點:

  • 什麼是 JSON
  • JSON 應用在哪些地方
  • 如何建立 JSON 字串
  • 一個簡單的 JSON 範例
  • JSON vs XML
  • 如何透過 PHP 及 JavaScript 使用 JSON

什麼是 JSON

JSON 是個以純文字為基底去儲存和傳送簡單結構資料,你可以透過特定的格式去儲存任何資料(字串,數字,陣列,物件),也可以透過物件或陣列來傳送較複雜的資料。一旦建立了您的 JSON 資料,就可以非常簡單的跟其他程式溝通或交換資料,因為 JSON 就只是個純文字格式。

JSON 的優點如下:

  • 相容性高
  • 格式容易瞭解,閱讀及修改方便
  • 支援許多資料格式 (number,string,booleans,nulls,array,associative array)
  • 許多程式都支援函式庫讀取或修改 JSON 資料
[Read More]

利用 jQuery 動態改變網站 CSS

繼前一篇所寫的『jQuery 偵測瀏覽器版本, 作業系統(OS detection)』,當我們遇到手機上網使用者,可以透過 javascript 來判斷目前使用者瀏覽器以及 OS,iPad user agent 如下:

Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 我們必須分析上面字串來判斷是否用手機上網,手機網頁跟PC網頁大小一定有所不同,透過底下兩個方法來改變瀏覽器的畫面

  • 自動導向手機網頁
  • 動態改變 CSS 兩個方法都不錯,如果決定使用前者,建議在 Server side 那邊做判斷,底下先列出 javascript, PHP, .htaccess 判斷檢查

The JavaScript

var isiPad = navigator.userAgent.match(/iPad/i) != null;

The PHP

$isiPad = (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad');

The .htaccess

RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.yourdomain.com [R=301]
如果您在前端做判斷,那就使用 jQuery 方式:
if(jQuery){
    jQuery("body").addClass("jq");
}
CSS 檔案:
.someClass{
    display:block;
}
.jq .someClass{
    display:none;
}
如果不用 jQuery 就使用底下寫法:
document.getElementsByTagName("body")[0].setAttribute("class", "js");