JQuery學習筆記(2)

//---------------------------- 第四章 JQuery中的事件和動畫 -------------------------------
css


·加載DOM
html

$(window).load() 等價於 window.onload 事件
ajax


$(document).ready() 至關於window.onload事件,但有些區別:
json

  (1)執行時機:
數組

  window.onload 是在網頁中全部元素(包括元素的全部關聯文件)徹底加載後才執行
瀏覽器

 $(document).ready() 是在DOM徹底就緒時就能夠被調用,此時,並不意味着這些元素關係的文件都已經下載完畢
服務器


  (2)屢次使用:能夠在同一個頁面註冊多個$(document).ready()事件
app

  (3)簡寫方式:能夠縮寫成 $(function(){ })  或  $().ready()
ide

  

·事件綁定
函數

當文檔裝載完成後,能夠經過bind()方法,爲特定的元素進行事件的綁定,可重複屢次使用

  bind( type, [data, ] fn );

  type:指事件的類型: 

    blur(失去焦點)、focus(得到焦點)

    load(加載完成)、unload(銷燬完成)

    resize(調整元素大小)、scroll(滾動元素)

    click(單擊元素事件)、dbclick(雙擊元素事件)

    mousedown(按下鼠標)、mouseup(鬆開鼠標)

    mousemove(鼠標移過)、mouseover(鼠標移入)、mouseout(鼠標移出)

    mouseenter(鼠標進入)、mouseleave(鼠標離開)

    change(值改變)、select(下拉框索引改變)、submit(提交按鈕)

    keydown(鍵盤按下)、keyup(鍵盤松開)、keypress(鍵盤單擊)

    error(異常)

  data:指事件傳遞的屬性值,event.data 額外傳遞給對象事件的值

  fn:指綁定的處理函數,在此函數體內,$(this)指攜帶相應行爲的DOM元素

·合併事件

hover(enter,leave):鼠標移入執行enter、移出事件執行leave

$("#myDiv").hover( function(){

    $(this).css("border", "1px solid black");0

}, function(){

    $(this).css("border", "none");

});


toggle(fn1,fn2,...fnN):鼠標每點擊一次,執行一個函數,直到最後一個後重復

$("#myDiv").toggle( function(){

    $(this).css("border", "1px solid black");0

}, function(){

    $(this).css("border", "none");

});


·事件冒泡

下面的例子,BODY元素下有DIV元素,DIV元素下有SPAN元素,分別將三種元素都註冊click事件。

那麼,click事件會按照DOM的層次結構,像水泡同樣不斷向上直到頂端,因此稱之爲事件冒泡。

<body><div><span>我是SPAN我怕誰</span></div></body>

$("span").bind("click", function(){ alert('span click'); });

$("div").bind("click", function(){ alert('div click'); });

$("body").bind("click", function(){ alert('body click'); });


·阻止冒泡

解決這個問題的辦法是:在SPAN執行完click事件後,中止事件冒泡。

$("span").bind("click", function(event){

    alert('span click');

    event.stopPropagation(); //中止冒泡

});


·阻止默認行爲

提交按鈕在提交前作相應的邏輯判斷,當不知足時

$("#btnSubmit").bind("click", function(event){

    event.preventDefault(); //阻止默認行爲 至關於return false;

});


·事件對象的屬性

$("#myDiv").bind("click", function(event){ });

event.type() //返回:click

event.target() //獲取當前元素

event.relatedTarget() //引起事件的元素

event.pageX()/event.pageY() //獲取鼠標相對於頁面的X和Y座標

event.which() //在單擊事件中獲取到對應的按鍵 鼠標左中右分別是123

event.metaKey() //獲取操做中的相關功能鍵(ctrl/alt/shift)


·移除事件

$("#myDiv").bind("click", fn1 = function(){

    alert("function1");

}).bind("click", fn2 = function(){

    alert("function2");

}).bind("click", fn3 = function(){

    alert("function3");

});

$("#myDiv").unbind(); //移除id爲myDiv的元素的全部事件

$("#myDiv").unbind("click"); //移除id爲myDiv的元素的全部click事件

$("#myDiv").unbind("click",fn1); //移除id爲myDiv的元素的名稱爲fn1的click事件


·一次性事件:綁定的事件執行一次後自動移除

$("#myDiv").one("click", [data], function(){

    alert("function1");

});


·觸發事件

$("#btn").trigger("click", [data]); //代碼方式觸發click事件

$("#btn").click(); //另外一種簡寫方式


·事件命名空間

$("#myDiv").bind("click.hello", function(){

    alert("function1");

});

$("#myDiv").bind("click", function(){

    alert("function1");

})

$("div").unbind("click"); //兩個事件都被移除

$("div").unbind(".hello"); //只移除第一個

$("div").unbind("click!"); //只移除第二個(注意感嘆號,指沒有名字空間的)


·JQuery中的動畫

$("div").hide(); //隱藏全部DIV元素,至關於sytle="display:none"

$("div").show(); //顯示全部DIV元素


$("div").hide(1000); //一秒內隱藏全部DIV元素,其它參數還有:slow(600) normal(400) fast(200)

$("div").show(1000); //一秒內顯示全部DIV元素


$("div").fadeOut(); //下降元素的不透明度,直至消失(支持速度參數,不會改變寬高)

$("div").fadeIn(); //升高元素的不透明度,直至顯示


$("div").slideUp(); //由下至上收縮元素,直至消失(支持速度參數)

$("div").slideDown(); //由上至下展開元素,直至顯示


·自定義動畫animate

$(elem).animate(params, speed, callback);

params:樣式屬性及值的映射 {protected:"value", protected:"value"}

speed: 速度參數

callback: 動畫完成後執行函數,可選


$("#myDiv").animate({left:"500px"}, 2000); //兩秒內ID爲myDiv的元素移至左邊距500px的位置

$("#myDiv").animate({left:"+=500px"}, 2000); //同上,支持累加、累減

$("#myDiv").animate({top:"200px", left:"+=500px"}, 2000); //同上,多重動畫,同時執行


$("#myDiv").animate({opacity:"0.5"}, 1000) //先變成50%透明

           .animate({top:"500px"}, 500) //移至離頂端500px

          .animate({left:"500px"}, 500) //移至離左邊500px

           .fadeOut(1000); //顯示出來 (四個動做爲隊列,一步步執行)


$("#myDiv").stop([cleanQuene] [,gotuEnd]); //中止動畫,參數爲boolean


$("#myDiv").is(":animate") //判斷元素是否在執行動畫


·其它動畫

$("#myDiv").toggle(); //顯示與隱藏元素

$("#myDiv").slideToggle(); //展開與收縮元素

$("#myDiv").fadeTo(1000, 0.2); //一秒內將元素透明度調整到20%


//-------------------- 第五章 JQuery對錶單、表格的操做及更多應用 ------------------------


·單選文本框應用(得到焦點時,加了個特殊的樣式,失去焦點時還原,兼容全部瀏覽器)

$(":input").focus(function(){ this.addClass("inputFocus"); })

           .blur(function(){ this.removeClass("inputFocus"); });


·多行文本框的應用(放大、縮小多行文本框的高度,限制最大500px,兼容全部瀏覽器)

var $txt = $("#textArea");

$(".bigger").click(function(){

    if( $txt.height() < 500) $txt.height( $txt.height() + 50 );

    //if( $txt.height() < 500) $txt.animate({height:"+=50"}, 500 );

});

  1. $(".smaller").click(function(){

  2.     if( $txt.height() > 100) $txt.height( $txt.height() - 50 );

  3.     //if( $txt.height() < 500) $txt.animate({height:"-=50"}, 500 );

  4. });


  5. ·複選框的應用(實現全選、全不選、反選)

  6. $("#btnCheckedAll").click(function(){ //全選

  7.     $("[name=items]:checkbox").attr("checked", true);

  8. });

  9. $("#btnCheckedNone").click(function(){ //全不選

  10.     $("[name=items]:checkbox").attr("checked", false);

  11. });

  12. $("#btnCheckedRev").click(function(){ //反選

  13.     $("[name=items]:checkbox").each(function(){

  14.         $(this).attr("checked", !$(this).attr("checked"));

  15.         //this.checked = !this.checked;

  16.     }

  17. });


  18. ·下拉框的應用(將一個下拉列表的選中項搬至另外一個下拉列表)

  19. $("#btnAdd").click(function(){ //將選中選項搬過去

  20.     $("#mySelect1 option:selected").appendTo("#mySelect2");

  21. });

  22. $("#btnAddAll").click(function(){ //將所有選項搬過去

  23.     $("#mySelect1 option").appendTo("#mySelect2");

  24. });

  25. $("#mySelect1").dblclick(function()[ //雙擊項搬過去

  26.     $("#mySelect1 option:selected").appendTo("#mySelect2");

  27. }


  28. ·表單驗證

  29. <form>

  30.     <div>

  31.         <label>用戶名:</label>

  32.         <input type="text" id="txtUid" class="required" value="" />

  33.     </div>

  34. </form>

  35. $("form :input.required").each(function(){ //往每一個class有required樣式的input元素後面添加*號

  36.     $(this).parent().append( $("<span class='star'>*</span>") );

  37. });

  38. $("form :input.required").blur(function(){ //失去焦點時驗證域

  39.     if( this.value == "" ){

  40.         $(this).parent().append( $("<span class='error'>必填字段</span>") );

  41.     }

  42.     else{

  43.         $(this).parent().append( $("<span class='success'>驗證正確</span>") );

  44.         $(this).parent().find(".error").remove();

  45.     }

  46. }).keyup(function(){ //用戶每點一個鍵觸發

  47.     $(this).triggerHandler("blur");

  48. }).focus(function(){ //控制有焦點時觸發

  49.     $(this).triggerHandler("blur");

  50. });

  51. $("#btnSubmit").click(function(){

  52.     $("form :input.required").trigger("blur"); //讓全部須要驗證的域失去焦點

  53.     var errNum = $("form .error").length;

  54.     if( errNum ){

  55.         alert("有驗證字段失敗,請從新填寫");

  56.         return false;

  57.     }

  58. });


  59. ·表格應用

  60. $("tr:odd").addClass("oddTr"); //給奇數行添加oddTr樣式

  61. $("tr:even").addClass("evenTr"); //給偶數行添加evenTr樣式


  62. $("tr:contains('王五')").addClass("highlightTr"); //查找包含「王五」的行,添加highlightTr樣式


  63. $("tr").click(function(){

  64.     $(this).addClass("selectedTr") //給當前行添加選中樣式

  65.            .siblings().removeClass("selectedTr") //反選移除選中樣式

  66.            .end() //結束,返回$(this),不然則是反選的行

  67.            .find(':radio").attr("checked",true); //在當前行查找單選框,選中它

  68. });

  69. //-------------------- 第六章 JQuery與Ajax的應用 ------------------------


  70. ·load( url [,data] [,callback] )方法

  71. url:要請求的頁面的地址

  72. data:要發送的相關參數

  73. callback:回調函數


  74. $("#myDiv").load("hello.html"); //向myDiv元素加載hello.html的內容

  75. $("#myDiv").load("hello.html .myClass"); //篩選,只加載hello.html中myClass樣式的內容


  76. $("#myDiv").load("hello.html", function(){} ); //沒參數的,使用GET方式

  77. $("#myDiv").load("hello.html", {id:'123', name:'dier'}, function(){} ); //有參數的,使用POST方式


  78. $("#myDiv").load("hello.html", function(responseText, textStatus, XMLHttpRequest){ //回調函數

  79.     //responseText : 請求返回的內容

  80.     //textStatus : 請求狀態 success error notmodified timeout

  81.     //XMLHttpRequest : Ajax對象

  82. });


  83. ·$.get( url [,data] [,callback] [,type])和$.post( url [,data] [,callback] [,type])方法

  84. url:要請求的頁面的地址

  85. data:要發送的相關參數

  86. callback:回調函數

  87. type:指定服務器返回內容的格式 xml html script json text _default


  88. $.get( "test.aspx", {id:"123", name:"dier"}, function(data,textStatus){ //回調函數只有當狀態是success才觸發

  89.     //data : 請求返回的內容

  90.     //textStatus : 請求狀態 success error notmodified timeout

  91.     

  92.     //當data是HTML時,直接加載

  93.     $("#myDiv").html(data);

  94.     

  95.     //當data是XML時,可篩選 <user id="123" name="dier" age="27" />

  96.     var age = $(data).find("user").attr("age");

  97.     

  98.     //當data是JSON時,可直接點出屬性來 {id:"123", name:"dier", age:"27"}

  99.     var age = data.age;

  100. });


  101. ·getScript(url [,callback])方法

  102. $(function(){ //動態加載JS腳本

  103.     $.getScript("test.js");

  104.     

  105.     $.getScript("test.js", function(){ //回調函數

  106.         //do something..

  107.     });

  108. });


  109. ·getJSON(url [,callback])方法

  110. $(function(){ //動態加載JS腳本

  111.     $.getJSON("test.js");

  112.     

  113.     $.getJSON("test.js", function(data){ //回調函數

  114.         //do something..

  115.         //data : 返回的數據

  116.         $.each( data, function(index, item){ //遍歷,至關於foreach

  117.             //index : 索引

  118.             //item : 當前項內容

  119.             //return false; 退出循環

  120.         });

  121.     });

  122. });


  123. ·ajax(options)方法

  124. url : 請求的地址

  125. type : 請求的方式 GET POST 默認爲GET

  126. timeout : 請求超時時間(單位:毫秒)

  127. data : 請求時發送的參數(String,Object)

  128. dataType : 預期返回的數據類型 xml html script json jsonp text

  129. bdforeSend : 發送請求前觸發事件,若是return false則取消發送 function(XmlHttpRequest){}

  130. complete : 請求完成後觸發事件,無論成功與否 function(XmlHttpRequest, textStatus){}

  131. success : 請求完成而且成功時觸發事件 function(data, textStatus){}

  132. error : 請求完成而且失敗時觸發事件 function(XmlHttpRequest, textStatus, errorThrown){}

  133. global : 是否爲全局請求,默認爲true,可以使用AjaxStart、AjaxStop控制各類事件


  134. $.ajax({

  135.     url : "test.aspx",

  136.     type : "POST",

  137.     timeout : "3000",

  138.     data : {id:"123", name:"dier"},

  139.     dataType : "HTML",

  140.     success : function(data,textStatus){

  141.         $("#myDiv").html( data );

  142.     }

  143.     error : function(XmlHttpRequest, textStatus, errThrown){

  144.         $("#myDiv").html( "請求失敗:" + errThrown );

  145.     }

  146. });


  147. ·序列化字符串 serialize()

  148. $.get( "test.aspx", $("#form1").serialize(), function(data,textStatus){

  149.     //將form1整個表單中的全部域序列化成提交的參數,支持自動編碼

  150. });


  151. ·序列化數組 serializeArray()

  152. var arr = $(":checkbox, :radio").serializeArray();


  153. ·對象序列化 param()

  154. var obj = {id:"123", name:"dier", age:"27"};

  155. var kv = $.param(obj); //id=123&name=dier&age=27


  156. ·JQuery中的全局Ajax事件

  157. ajaxStart(callback) //請求開始時觸發

  158. ajaxStop(callback) //請求結束時觸發

  159. ajaxComplete(callback) //請求完成時觸發

  160. ajaxSuccess(callback) //請求成功時觸發

  161. ajaxError(callback) //請求失敗時觸發

  162. ajaxSend(callback) //請求發送前觸發


  163. $("#loading").ajaxStart(function(){ //當有AJAX請求時顯示,完成時隱藏

  164.         $(this).show();

  165.     }.ajaxStop(function(){

  166.         $(this).hide();

  167.     }

  168. );

相關文章
相關標籤/搜索