顯示具有 jQuery 標籤的文章。 顯示所有文章
顯示具有 jQuery 標籤的文章。 顯示所有文章

jQuery Plugin字型定義

設計jQuery UI Plugin時,在需要使用到外部css檔或style來定義UI style時,建議不要再css/style內直接使用定值的字型大小(如:12px、16px、18px等),定值會造成使用此元件的網頁,在排版過程中需適時的微調Plugin有提供的css或直接動js內的style設定,才能滿足網頁與元件字型的一致性。如果希望配合網頁設定的字型一起調整,建議font-size採用相對大小的方式來設計(如:large、small、smaller、x-small等),會有比較好的效果。

例如:
  • 原本font-size:12px  改為 font-size:small
  • 原本font-size:14px  改為 font-size:smaller
  • 原本font-size:16px  改為 font-size:medium
注意事項:使用相對字型(smaller/larger)大小是會受到CSS階層關係影響:
<div style='font-size:smaller'>
    smaller一次的字型
</div>
<div style='font-size:smaller'>
    <div style='font-size:smaller'>
        smaller兩次的字型
    </div>
</div>


jQuery控制dropdownlist

  • 設定選取的value值:

$("select#elem").val('0');

  • 清除設定的value值:

$("select#elem").val('');

  • 選擇第0筆項目

$("select#elem")[0].selectedIndex = 0;

javascript/jQuery 取消Button Click事件

$('#button_submit').click(function (e) {
    if ($('#txb_username').val() != ''
    && $('#txb_password').val()) {
        $('#button_submit').attr('disabled', true);
    }
    else {
        alert('Username/Password不允許為空值!');
        e.preventDefault()
    }
});


  • preventDefault是阻止預設行為的發生(如:onclick事件)
  • stopPropagation是會停止整個Event Tree往上繼續觸發
  • return false等於preventDefault與stopPropagation同時作用

不過在Google Chrome上面,return false不會有反應.


也可以使用下列語法直接取消事件泡:


window.event.returnValue = false;
window.event.cancelBubble = true;


控制元素show/hide/toggle

顯示元素 - show

$('#elementId').show();            // 立刻顯示
$('#elementId').show(2000);        // 動畫方式顯示,持續2000ms
$('#elementId').show('fast');      // 動畫方式顯示,持續200ms
$('#elementId').show('slow');      // 動畫方式顯示,持續600ms

隱藏元素 - hide

$('#elementId').hide();            // 立刻隱藏
$('#elementId').hide(2000);        // 動畫方式隱藏,持續2000ms
$('#elementId').hide('fast');      // 動畫方式隱藏,持續200ms
$('#elementId').hide('slow');      // 動畫方式隱藏,持續600ms

切換顯示/隱藏元素 - toggle

$('#elementId').toggle();          // 切換show/hide
$('#elementId').toggle(2000);      // 動畫方式切換show/hide,持續2000ms
$('#elementId').toggle('fast');    // 動畫方式切換show/hide,持續200ms
$('#elementId').toggle('slow');    // 動畫方式切換show/hide,持續600ms

檢查元素狀態

if($('#elementId').is(':visible')){
    // 狀態為顯示
}
else{
    // 狀態為隱藏
}

顯示狀態完成後呼叫 - callback

$('#elementId').show('fast',function(){
    // show complete
});
$('#elementId').hide('slow',function(){
    // hide complete
});
$('#elementId').toggle(2000,function(){
    // toggle complete
});

jQuery UI擴充顯示效果 - jquery.ui.effect

jquery 1.4.3新增 easing,官方寫的參數不大準確,以jquery UI為準.

需額外引用:
<script src="jquery.effects.core.js" type="text/javascript"></script>
<script src="jquery.effects.clip.js" type="text/javascript"></script>
<script src="jquery.effects.drop.js" type="text/javascript"></script>
如果要套用其他效果,則需另外再引用該效果之js.
$('#testDiv').toggle('clip',{}, 2000);  // 以clip效果切換show/hide
$('#testDiv').toggle('drop', {}, 2000); // 以drop效果切換show/hide
所有效果共有:
  • blind
  • bounce
  • clip
  • drop
  • explode
  • fold
  • highlight
  • puff
  • pulsate
  • scale
  • shake
  • size
  • slide
  • transfer
實際效果可以參考官方網站的DEMO

jQuery控制checkbox

判斷是否Checked:
var result=$(this).is(':checked');
設定Checked值:
$(this).attr('checked',true);  // 選取
$(this).attr('checked',false); // 取消

選擇器(Selector)

傳統JavaScript找出指定的Html Element困難

javascript coding過程中,首要取得指定的Html Element,以利後續的取值、控制、加工等等動作. 但傳統Element取得方式上, 只有getElementsByTagName/getElementById/getElementsByName三個function. 在只能依賴Tag Name/ Id/ Name三個因素去找出元件的情況下,或者取出所有Element後一一找出目標Element.

jQuery提供簡潔的Select方法.

jQuery在這找到指定的Html Element方式,提供非常豐富的選擇方式,可以在簡潔的語法上快速找到所需Element.不只加速javascript開發速度,而且也增加了code的可讀性.
// All Select - 取得所有Element
var allElement = $('*');
// ID Select - 取得符合id='MyId'的Element
var idElement = $('#MyId');
// Class Select - 取得符合class='MyClass'的Elmeent
var classElement = $('.MyClass');
// TagName Select - 取得TagName為table的Element
var tagElement = $('table');
// Children Select - 取得class='UlClass'之下,所有TagName為li的Child Elmeent.
var ulLiElements = $('.UlClass > li');
// Button Select - 取得tagName為button以及type='button'的所有Element
var buttonElements = $(':button');
// Image Select - 取得所有圖片Element
var imageElements = $(':image');
// File Select - 取得所有Input[Type=File] Element
var fileElements = $(':file');
// Password Select - 所有Input[Type=Password] Element
var passwordElements = $(':password');
// Input Select - 所有Input Element
var inputElements = $(':input');
// Radio Select - 所有Radio Element
var radioElements = $(':radio');
// Reset Select - 所有Input[Type=Rest] Element
var resetElements = $(':reset');
// Selected Select - 所有有Selected屬性之 Element
var selectedElements = $(':selected');
// Submit Select - 所有Input[Type=Submit] Element
var submitElements = $(':submit');
// Text Select - 所有Input[Type=Text] Element
var textElements = $(':text');
// Visible Select - 所有Visible Element
var visibleElements = $(':visible');
// Header Select - 所有(H1/H2/H3...) Element
var headerElements = $(':header');
// Hidden Select - 所有隱藏Element
var hiddenElements = $(':hidden');
// 複合條件: Class&Attribute Select - 取得class='MyClass'
// ,且name為'MyName'的所有Element
var myNames = $('.MyClass[name="MyName"]');
// 模糊比對: Class&Attribute Select - 取得class='MyClass',
// 且color包含'red'文字的Element
var myNames = $('.MyClass[color*="red"]');
// 模糊比對2: Class&Attribute Select - 取得class='MyClass'
// ,且lang開頭字串(完整單字)為'en'文字的Element.
// lang='en'(符合),lang='en-UK'(符合),lang='english'(不符合)
var myNames = $('.MyClass[lang|="en"]');
// No Children Select - 取得所有沒有Children的Element
var noChildreList = $(':empty');
// Enabled Element Select - 取得所有Enabled Element/Enabled的Input Element.
var allEnabledElement = $(':enabled');
var inputEnabledElement = $('#id > input:enabled');
// nTh Element Select - 取得第n筆資料的Element.
// 第一筆資料
var firstElement = $('div:first');
// 第3筆資料
var the2Element = $('div:eq(2)');
// 第4筆以後的資料
var gtElement = $('div:gt(3)');
// 第5筆以前的資料
var gtElement = $('div:gt(4)');
// 最後一筆資料
var lastElement = $('div:last');
// 偶數筆資料
var evenElement = $('div:even');
// 奇數筆資料
var evenElement = $('div:odd');
// 第一筆children資料
var lastChildElement = $('div:first-child');
// 最後一筆children資料
var lastChildElement = $('div:last-child');
// parent Select - 取得Parent Element資料
var parentElement = $('div:parent');
// 多屬性Select - 取得title有包含t字眼並且class=MyChildren的Element
var multiAttrElement = $('div[title*=t][class=MyChildren]');
// Multi Selector - 多個Selector一起Select,取得span/div所有element.
var multiSelectorElement = $('div[class=MyChildren],spn[class=MyChildren]');
// 順序性只取頭Select - 取得div class=MyChildren
//  ,並且該Element下一個Element為span且class=MyChildren的Element
var seqSelectElement = $('div[class=MyChildren] + span[class=MyChildren]');
// 順序性之取後續資料 Select - div class='Root'之後
//  ,所有div class='MyChildren'並且與Root同Parent Element皆取出.
var seqSameParentElement = $('div[class=Root] ~ span[class=MyChildren]');
// not() select - 取得class=MyChildren的Element並剃除tagName為span的Element.
var notElement = $('.MyChildren:not(span)');
// only-child select - 取得MyChildren Class為該Parent唯一Children之Element.
var onlyChildrenElement = $('.MyChildren:only-child');
// has select - 取得element內必須child有符合has內的Select條件.
var hasElement = $('.onlyOnChildren:has(.MyChildren)');

如何使用jQuery

引用一個js進入jQuery的世界

jQuery的使用只需要在網頁中引用jQuery.js檔即可,該檔案可以到jQuery官方網站下載,或者直接連結官方網站的js網址使用.
官方網站: http://jquery.com/
直接連結:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

jQuery的核心符號'$'

jQuery以$符號開頭使用核心功能,因此在jquery開發中,不管是呼叫jQuery的核心function或是使用第三方的plugin,都會是依賴$當開頭.

JavaScript的hello world

<html>
<head>
    <title>
        using javascript
    </title>
    <script type="text/javascript">
        function MyFunction() {
            alert('hello world!');
        }
    </script>
</head>
<body onload="MyFunction"> // 網頁完整讀取完畢後才執行.
</body>
</html>

jQuery的hello world

<html>
<head>
    <title>
        using jQuery
    </title>
    <!--載入jQuery.js -->
    <script src="jquery-1.5.1.min.js" type="text/javascript"></script>        
    <script type="text/javascript">
        $(function () { // 網頁完整讀取完畢後執行
            MyFunction();
        });
        $(function () { 
            // 網頁完整讀取完畢後執行,jQuery允許重複定義$(function(){});
            alert('hello world,again!');
        });
        // 顯示hello world!
        function MyFunction() {
            alert('hello world!');
        }
    </script>
</head>
<body>
</body>
</html>

說明:

$(function()({ });表示整個網頁讀取完畢後才開始執行,可以避免JavaScript在存取Html DOM的時候,因為尚未載入發生Exception,並且$(function(){});是允許多次定義,因此可以在方便閱讀位置多次使用,不需像傳統javascript只能定義一個onload事件.

Issue: jQuery UI DatePicker with jQuery UI CSS Framework bug(?)

jQuery UI DatePicker在使用CSS Framework的iframe下,預設會有一個div並未正確隱藏,造成mouseover事件時,DatePicker發生Exception.

1. 發生錯誤訊息的網頁

2. Script Exception
3. Trace code,instActive undefined.

解決方式:

將jQuery.ui.datepicker.js 112行:this.dpDiv = bindHover($('
'));
改為
this.dpDiv = bindHover($('
').hide());
預設隱藏則正常.

jQuery Plugin自製所需外框

  1. 無輸入參數
  2. 固定輸入參數
  3. 不固定參數
  4. 不固定參數+參數預設值
  5. 傳入Event控制
  6. 設定scopename避免名稱衝突

Framework Classes

Layout Helper
  • .ui-helper-hidden: 隱藏元素,Style{display:none}.
  • .ui-helper-hidden-accessible: 把元素的絕對位置設到無法閱讀處.
  • .ui-helper-reset: 重設元素的Style{ padding, margins, text-decoration, list-style }.
  • .ui-helper-clearfix: 設定給浮動元素之Parent元素,設定為inline-block
  • .ui-helper-zfix: 修正iframe元件覆蓋問題.

Widget Containers

  • .ui-widget: 定義元素為元件容器,如: Form、Window.
  • .ui-widget-header: 定義元素為元件容器標題.
  • .ui-widget-content: 定義元素為元件容器內容框.

Interaction States

  • .ui-state-default: 設定button處於一般狀態風格.
  • .ui-state-hover: 設定button處於Mouse Hover狀態風格.
  • .ui-state-focus: 設定button處於Foucs狀態風格.
  • .ui-state-active: 設定button處於Click/Active瞬間的狀態風格.

Interaction Cues

  • .ui-state-highlight: 設定元素處於Highlight狀態風格.
  • .ui-state-error: 設定元素處於錯誤狀態風格.
  • .ui-state-error-text: 設定錯誤文字顯示風格.
  • .ui-state-disabled: 設定元素處於disabled狀態風格.
  • .ui-priority-primary: 設定元素為首選button之風格.
  • .ui-priority-secondary: 設定元素為第二優先button之風格.

Icons - States and images

  • .ui-icon: 設定此元素為icon,實際圖形需依賴ui-icon-xxxx(173個圖形)相關class決定套用之圖形,
  • .ui-icon-xxxx: 參考ThemeRoller最末端圖形hint之class名稱,決定套用之圖形.

Misc Visuals - Corner Radius helpers

  • .ui-corner-tl: 元素之左上角為圓邊.
  • .ui-corner-tr: 元素之右上角為圓邊.
  • .ui-corner-bl: 元素之左下角為圓邊.
  • .ui-corner-br: 元素之右上角為圓邊.
  • .ui-corner-top: 元素之上方兩角為圓邊.
  • .ui-corner-bottom: 元素之下方兩角為圓邊.
  • .ui-corner-right: 元素之右方兩角為圓邊.
  • .ui-corner-left: 元素之左方兩角為圓邊.
  • .ui-corner-all: 元素之四角為圓邊.

Misc Visuals - Overlay & Shadow

  • .ui-widget-overlay: 定義該元素為全螢幕遮罩風格.
  • .ui-widget-shadow: 定義該元素具備陰影風格.
詳細位置 - sheauren的jquery紀錄

jQuery UI CSS Framework

jQuery UI CSS Framework是一套擴充性很強的CSS Styles, jQuery UI Release的元件都是利用這個CSS Framework來設計. 在此規範下,可以利用jQuery UI ThemeRoller網頁設計自己喜歡的配色風格,並且允許利用ThemeSwitcher技術在網頁上動態切換樣板.


優點:
  1. 直接套用jQuery UI既有26種樣板與自己設計於ThemeRoller設計樣板。
  2. 網站設計時,可利用ThemeSwitcher提供線上切換樣板功能,樣板預設直接引用官方網站,連Copy CSS/Img/JS回來都不需要。
缺點:
  1. Core CSS提供數量不多(Layout 5個、Widget3個、Interaction 10個、效果11個、Icon 173個). 自訂元件時,通常要額外定義其他CSS才滿足設計
  2. 內建Icon圖示很小(16x16扣掉外框實際只有10x10),使用上不是很方便,需要在客製化
整體來看,因為jQuery UI CSS Framework提供的功能十分簡單,核心也才兩個css file,要客製化難度相對降低的情況下,學習此Framework,在需要在調整即可.


詳細位置 - sheauren的jquery紀錄




自製jQuery Plugin - 9. jquery.urlparams

1. 功能: 取得網頁URL的參數
2. 風格: 沒有畫面
3. 依賴: 無
4. 用途: 取得網頁參數來做後續程式開發
5. 函式: 
    5.1 $.url.params: 參數(name),取得指定name的參數值
    5.2 $.url.getAllParams: 參數(無),取得所有參數值
6. 範例:
JQuery:
<script type="text/javascript" src="jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="jquery.urlparams.js"></script>
<script type="text/javascript">
    $(function () {
        var paramList = $.url.getAllParams();
        var data = "";
        for (key in paramList) {
            data += key + "=" + paramList[key] + "<br/>";
        }
        $('#allParams').html(data);
        $('#getParam').click(function () {
            $('#result').html($.url.params($('#name').val()));
        });
    });
</script>
7. 後續改善: 無,除非有bug
Demo - 取得QueryString所有參數與取得特定參數
allParams:
Name:


result:

自製jQuery Plugin - 8. jquery.ui.themeswitcher

1. 功能: 切換網頁jquery ui theme,由官方版本調整而來.
2. 風格: jQuery UI所有Theme
3. 依賴: jQuery.cookie.js
4. 用途: 切換jQuery UI Theme
5. 函式: themeswitch - 待補完
6. 範例:
<script type="text/javascript" src="jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>
<script type="text/javascript" src="jquery.ui.themeswitcher.js"></script>
<script type="text/javascript">
    $(function () {
        $('#changeTheme').themeswitcher({ webrootpath: '../' }); 
        // when theme location= ../css/theme , webrootpath=../
    });
</script>
7. 後續改善: 還在評估自動改變page的ifarme theme是否有必要性.
Demo - 切換jQuery UI CSS Theme
ui-widget
ui-widget-header

header hyperlink style
ui-widget-content

content hyperlink style


自製jQuery Plugin - 6. popPanel

1. 功能: 於指定物件位置開啟小視窗
2. 風格: jQuery UI CSS Framework
3. 依賴:jquery.random.js,jquery.GUID.js,jquery.getPostion.js
4. 用途: 在觸發事件元件開啟小視窗,在自行設計挑選資料(如:日期、時間、人員),在此僅提供空白div提供再加工.
5. 函式:
    5.1 popPanel,參數{
        width:指定視窗寬度,預設300
        height:指定視窗高度,預設400
        offset{x,y}:指定開啟時與該物件位移量{x,y}座標,預設{10,10}
        class:popPanel額外套用class,預設null
        title: popPanel標題,預設Pop Panel Window
        show:是否顯示,預設true(開啟)
        smartLocation:啟動自動偵測超過目前視窗時,往左或上顯示,預設true(開啟)
        closehide:關閉是否僅隱藏,預設true(開啟),否則關閉則刪除
        center:是否置中
        url:內嵌iframe之url
        urlclass:iframe class
        resizeable:是否允許縮放視窗
        postback:回傳資料呼叫之function
        onclose:關閉時,呼叫之function
    }
   5.2 popPanelReturnData(data): 傳遞參數給postback method.
6. 範例:
JQuery:

<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery.random.js"></script>
<script type="text/javascript" src="js/jquery.GUID.js"></script>
<script type="text/javascript" src="js/jquery.getPosition.js"></script>
<script type="text/javascript" src="js/jquery.ui.getPosition.js"></script>
<script type="text/javascript" src="js/jquery.ui.popPanel.js"></script>
<script type="text/javascript">
    $(function () {
        $('#button').click(function () {
            var panel = $(this).popPanel({'closehide':false,'resizeable':false});
        });
    });
</script>
7. 後續改善: 無,除非有bug

Demo - 產生GUID


自製jQuery Plugin - 5. getPosition

1. 功能:取得元件絕對位置(x,y).
2. 風格:沒有畫面.
3. 依賴:無.
4. 用途:便於在觸發事件元件開啟小視窗挑選(如:日期、時間、人員)資料.
5. 函式: getPosition,參數{無}.
6. 範例:
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.getPosition.js"></script>
<script type="text/javascript">
$(function () {
    $('#button1').click(function(){
        var position=$(this).getPosition();
        alert(position.x+','+position.y);
    });
    $('#div1').click(function(){
        var position=$(this).getPosition();
        alert(position.x+','+position.y);    
    });

});
</script>
7. 後續改善: 無,除非有bug.
Demo - 點擊取得元件座標位置


div1

自製jQuery Plugin - 4. GUID

1. 功能: 產生GUID..
2. 風格: 沒有畫面.
3. 依賴: jquery.random.js
4. 用途: 產生GUID.
5. 函式:
$(this).GUID()
6. 範例: 
JQuery:
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery.random.js"></script>
<script type="text/javascript" src="js/jquery.GUID.js"></script>
<script type="text/javascript">
    $(function () {
       $('#RunGuid').click(function(){
         $('#ResultGuid').val($(this).GUID());
       });
    });
</script>
7. 後續改善: 無
Demo - 產生GUID

結果:

自製jQuery Plugin - 3. random

1. 功能: 取得整數亂數、字串型態整數亂數、十六進制亂數
2. 風格: 無
3. 依賴: 無
4. 用途: 產生隨機整數、亂數取名或產生GUID使用。
5. 函式:
    5.1 random: 取得亂數整數,參數:length -最大位數,1<length<9,預設5.
    5.2 randomString: 取得亂數字串,參數{length - 最大位數,不足自動補0,1<length<9,預設5}.
    5.3 randomHex: 取得16進制亂數,參數{length - 最大位數,不足自動補0,l1<length<9,預設5}.
6. 範例:
<script src="http://code.jquery.com/jquery-1.6.2.min.js" type="text/javascript">
<script type="text/javascript" src="js/jquery.random.js"></script>
<script type="text/javascript">
    $(function () {
        $('.RunRandom').click(function () {
            $('.ResultRandom').val($(this).random());
        });
        $('.RunRandomString').click(function () {
            $('.ResultRandom').val($(this).randomString());
        });
        $('.RunRandomHex').click(function () {
            $('.ResultRandom').val($(this).randomHex());
        });
    });
</script>
7. 後續改善: 無
Demo - 按下按鈕產生亂數
結果:
結果:
結果:

橫式廣告