2016年4月22日 星期五

程式進入點、衝突 (jQuery 1)

如果還沒安裝好jQuery,可參考這篇設定,為了省版面,以下就不把<script>寫出來了,HTML用「---」隔開

官網連結:load(load有兩種,描述有javascript的)、ready

jQuery1和2可以說是一樣的,最大的差別是jQuery2不支援6~8,官網有說

我還有找到中文版的jQuery,和官網簡直一模一樣,請參考這裡
這個網址的教學也有整套的,可以參考看看

※程式進入點

官網連結
可以看出,在1.8時,已將load和unload標記為過時了,但過時不代表移除,還是能用

$(window).load(function() {
    alert('two');
    $('img').css('border', '20px solid red');
});
    
window.onload = function(){
    alert('three');
    $('img').css('border', '20px solid yellow');
}
    
window.onload = function(){
    alert('four');
    $('img').css('border', '20px solid green');
}
    
$(function() {
    alert('zero');
    $('img').css('border', '20px solid blue');
});
    
$(document).ready(function() {
    alert('one');
    $('img').css('border', '20px solid lightblue');
});
--------------------
<img src="Koala.bmp">

※load和javascript的window.onload類似,
但window.onload寫很多個都只會執行最後一個,
load寫多都可以執行到,而先後順序,load比onload還快

※ready官網說有三種方法,但其中一種不建議使用,所以我只寫上面程式碼的zero和one
它是最先執行的(前面兩個必需等到圖片都載入才會執行),而且可以寫很多個,都不會有覆蓋的情形

※官網也說「$」可用「jQuery」代替,大小寫有差

※以上我用Chrome測比較明顯,圖片還沒出來時,會先執行zero-->one,img它已經抓到了(但屬性src還沒,所以圖片還沒顯示),旁邊的框從藍色變淺藍色
然後執行two-->four,旁邊的框從紅色變綠色

※使用IE11測試,一開始就有圖片了,然後它會全部alert完,直接將框框變成最後的顏色,中間的顏色都沒出現過

※總結就是jQuery的兩種方法都可以寫很多個,一樣的方法,先寫的先執行
ready不會等到圖片載入就開始執行了,所以是最先執行的
再來是load方法,最後是onload



※衝突

有可能使用其他的library,也會用到「$」,如「propotype.js」,只要有import的那一頁,就不能再用「$」了,因為propotype有用到,這就是在專案為什麼有時候可以用,有時候不能用的原因,使用以下的語法,可以自定符號,取代「$」

jQuery預設的「$」和「jQuery」是等價的,所以懶的設定可以直接用「jQuery」取代「$」
官網連結

※noConflict沒參數的設定

// A
jQuery.noConflict();
$( document ).ready(function() {
    alert('init');
});
    
// B
var Q = jQuery.noConflict();
Q( document ).ready(function() {
    alert('init');
});

※使用A的方式,一經設定(所以寫在ready後面還是可以),就只能寫「jQuery」開頭才有用,如上的寫法是抓不到jQuery的,而且不管有沒有加參數都是一樣的結果

※使用B的方式,取一個變數名(不一定一個字元),就可以拿它來代替「$」了


※noConflict有參數的設定

參數是boolean,表示要不要從全域範圍移除jQuery
我試的結果只對jQuery開頭的有作用


// C
jQuery.noConflict(true);
jQuery( document ).ready(function() {
    alert('init');
});
    
// D
var Q = jQuery.noConflict(true);
Q( document ).ready(function() {
    alert('init');
});

※使用C的方式,不管用「$」還是「jQuery」開頭,jQuery都沒有作用了
如果給false,jQuery開頭的可以執行

※使用D的方式(和B一樣),取一個變數名(不一定一個字元),就可以拿它來代替「$」了



※unload

$(window).unload(function() { 
    alert("離開了"); 
});

※我在IE 11試的結果,重整、在網址列打別的網址後按enter、按下一頁都會觸發;
但Chrome沒有作用

沒有留言:

張貼留言