看到這個題,我蒙了,因為那時候我不清除這個問題,想了半天沒想出來,後來到網上一查,在國外的某網站查到說setInterval和setTimeout之後的函數的範圍是全域的,也就是裡面的this指向的是全域對象. 這個問題可麻煩了,我經常要在迴圈函數裡用this來引用當前對象,也許你想到可以用閉包,不過實際情況並非如此簡單,對象執行個體多了之後,閉包也亂套了. 我的願望就是讓迴圈函數裡的this仍然指向當前內容相關的對象,無需傳參數,無需閉包(其實這也是閉包,只是形式上看著比較自然而已); 例如:
還好網上什麼都有,上網找了一個瀏覽器安全色性最佳的函數,經測試相容IE、FireFox、Chrome,並且不會有捲軸誤差問題,存檔下,以備後用 :) 複製代碼 代碼如下:function mousePos(e){ var x,y; var e = e||window.event; return {
先定義進度條顯示層: 複製代碼 代碼如下: <div><span class="intro">下載進度:</span> <div class="barborder"> <div class="bar" id="loadpercent"></div> </div> </div> 定義廣告層: 複製代碼 代碼如下: <div id="showAD"></div>
第1章 精華 JavaScript的特性中有一部分特性帶來的麻煩遠遠超出它們的價值。其中,一些特性是因為規範很不完善,從而可能導致可移植性的問題;一些特性會導致產生難以理解和修改的代碼;一些特性促使My Code風格過於複雜且易於出錯;還有一些特性就是設計錯誤。有時候語言的設計者也會犯錯。 大多數程式設計語言都有精華部分和雞肋部分。我發現如果只使用精華部分而避免使用雞肋的部分,我可以成為一個更好的程式員。畢竟,用糟糕的組件怎麼可能構建出好東西呢?
在有些傳遞頁面使用GB2312,而在接收頁面使用 UTF8,這樣接收到的參數就可能會與原來發生不一致。使用伺服器端的urlEncode函數編碼的URL,與使用用戶端javascript的 encodeURI函數編碼的URL,結果就不一樣。 javaScript中的編碼方法: escape() 方法: 採用ISO Latin字元集對指定的字串進行編碼。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都將被轉化成%xx格式的字元編碼
雖然不是很複雜的實現,但每次都要這樣就會很麻煩,所以我寫了一小段指令碼,用來自動產生這個輸出視窗。 代碼 複製代碼 代碼如下: window.Babu = {}; Babu.Debugging = {}; Babu.Debugging.writeLine = function(format, arg1, arg2) { var console = Babu.Debugging._getConsole(); if (console.get_visible()) { var msg =
基本問題很簡單。假設你的一個元素包含在另外一個元素中。 複製代碼 代碼如下: ----------------------------------- | element1 | | ------------------------- | | |element2 | | | ------------------------- | ----------------------------------- 這兩個元素都有onclick事件處理常式。如果使用者在element2上面單擊那麼在元素2和元素1
現在我們已經註冊了事件處理常式,對於事件我們還想更深入的瞭解。我們想知道事件發生時候的滑鼠位置,我們想知道使用者按下了哪些鍵。這些都是可能的,雖然這部分有很多煩人的瀏覽器安全色性問題。(這裡可以快速查看瀏覽器安全色性列表)。 要讀出事件的屬性,必須要先能訪問到事件。 瀏覽器安全色性 站在瀏覽器戰爭的角度看,Netscape實現了一個訪問模型(後來被W3C做借鑒)和很多的事件屬性,同時微軟也做了同樣的事情。當然這兩種模型是完全不相容的。但是就像我們再簡介裡面說的,如果 複製代碼 代碼如下: if
W3C和微軟都著力於發展自己的事件註冊模型來取代Netscape的傳統模型。雖然對於微軟的模型我不是很感冒,但是w3c的還是不錯的,除了這個滑鼠定位 的問題。不過現在只有小部分瀏覽器支援。 W3C W3C的DOM層面事件規範注意到了傳統模式的問題。他對於你想在一個元素上綁定多個事件提供了一個很好的解決辦法。
在最古老的JavaScript瀏覽器裡註冊事件只能通過內聯模式。自從DHTML從根本上改變了你操作頁面的方法,事件的註冊就必須有擴充性而且要有很強的適應性。所以就必須有相應的事件模型。Netscape在第三代瀏覽器中就開始了,IE在第四代瀏覽器開始。 因為Netscape 3就開始支援這種新的事件註冊模型,在瀏覽器戰爭前就是事實上的標準。所以微軟不得不也是最後一次為了網上那些數不清的使用了Netscape事件處理模型的頁面在相容性上做出了讓步。
這些古老的瀏覽器只支援一種註冊事件處理常式的方法,這個方法是Netscape發明的。因為Netscape先發制人,所以如果微軟也想做支援JavaScript事件的瀏覽器就得跟著Netscape走,所以這裡沒有相容性的問題。所以這種模式在任何支援JavaScript的瀏覽器都能運行---除了Mac上的IE3,他根本就不支援事件。 註冊事件處理常式 在內聯式的事件註冊模型中,事件處理常式就像是一個HTML元素的屬性,比如: <A HREF="somewhere.html"
在這裡提出的事件,當他們發生在一個確定的HTML元素上的時候,他們的名字能夠被大多數的瀏覽器所識別。也就是說,瀏覽器會尋找你為這個HTML元素所註冊的事件處理常式的指令碼,而且會被立即執行。 一開始只有為數很少的一些事件。這些事件在幾乎所有的JavaScript瀏覽器都能運行,即使是那些非常古老的。需要注意的是那些早期的事件只能工作在連結或者表單上,有時候也能運行在整個視窗上,但是其他的大多數HTML元素不行。 &
沒有event就沒有指令碼。可以看看任何有JavaScript代碼的網頁:幾乎所有的例子都有一個事件觸發了指令碼。原因非常簡單。JavaScript就是給你的頁面添加內部活動:使用者做一些事情然後頁面做出回應。 因此JavaScript就需要一個方法能夠檢測到使用者的動作然後才能知道什麼時候做出反應。這還需要知道那個函數會被執行,函數會做一些你認為的給你的網頁增色的動作。這些文字描述了如何去寫這樣的指令碼。雖然不容易,但是這是一個很讓人滿足的工作。
HTML 複製代碼 代碼如下: <input type="password" name="psw" id="loginpsw" onkeypress="submit1(event)"/> Javascript 複製代碼 代碼如下: function submit1(e){ var isie = (document.all) ? true : false;//判斷是IE核心還是Mozilla var key; if (isie) key = window.event.keyCode;
從那起,我已經對這些方法做了大量的研究,並且已經在很多場合使用他們。在很多任務中,他們被證明是非常有用的(特別關於結構的抽象 DOM 選取器)。 1、DOMElement.contains(DOMNode) 這個方法起先用在 IE ,用來確定 DOM Node 是否包含在另一個 DOM Element 中。 當嘗試最佳化 CSS 選取器遍曆(像:“#id1 #id2”),這個方法很有用。你可以通過 getElementById 得到元素,然後使用 .contains() 確定 #id1
code如下: 複製代碼 代碼如下: /*! *author:sohighthesky *blog:http://www.cnblogs.com/sohighthesky *date:2010-2-4 */ var zooming=function(e){ e=window.event ||e; var o=this,data=e.wheelDelta || e.detail*40,zoom,size; if(!+'\v1'){ zoom = parseInt(o.style.zoom) ||
轉換的規則如下: 如果其中一個運算元的類型為 Boolean ,那麼,首先將它轉換為數字類型,false 轉換為 0, true 將轉換為 1。 如果其中一個運算元的類型是字串,另外一個為數字類型,那麼,將字串轉換為數字進行比較。 如果其中一個運算元的類型是字串,另外一個為 object 類型,那麼,將調用對象的 toString 方法之後,比較字串。 如果其中一個運算元的類型是數字類型,另外一個為 object 類型,那麼,將對象轉換為數值後進行數字比較。 以下的規定了一些特殊的比較:
1. 判斷表單元素是否存在(一) 複製代碼 代碼如下: if("periodPerMonth" in document.theForm) { return true; } else{ return false; } 2. 判斷頁面元素是否存在 複製代碼 代碼如下: if(document.getElementById("XXX")) { //存在 } 3. 判斷表單元素是否存在(二) 複製代碼 代碼如下: if(document.theForm.periodPerMonth) { //存在
如題,本文將使用純粹的指令碼JavaScript實現漸層的彈出層,其想法也非常簡單:利用IFrame實現遮蓋,再藉助一個DIV用於展現彈出層的內容,最後再使用其內建函數setInterval()和clearInterval()實現漸層,原理非常簡單,只不過要注意對DOM對象/元素的精確控制。由於代碼比較簡單,在此就不再贅述。以下代碼在IE6+,FF3.5+測試通過。 指令碼Flyout.js: 複製代碼 代碼如下: // JScript File if (navigator.userAgent.
前天熬了大半宿發了一篇[一行代碼輕鬆搞定快捷留言功能],同時發布了V1.0beta版的快捷留言功能和原始碼,之所以是beta版,就是當時感覺雖然準系統有了,但是還不夠完善,特性也不一定合理,今天不知不覺又弄到了這個時候,這次對上一版做了很大改進: 首先,原來自動認可留言資訊的同時會自動推薦,大量的推薦數,直接影響了部落格園的推薦排名機制,所以後來在第一時間修改成了詢問是否要推薦的互動模式!