Time of Update: 2017-01-19
真是五個很quick的小提示: 只在<form>元素上使用submit事件 如果要在form中綁定事件處理常式時,應該只在<form>元素上綁定submit事件,而不是給提交按鈕綁定click事件。 March:這個方式固然很好,但是,公司開發時使用了Web Flow,一個頁面就一個大form,而裡面可能有若干個提交按鈕,所以不得不把部分事件處理常式綁定在了提交按鈕的click事件上。 可點擊的都應該是連結
Time of Update: 2017-01-19
事件流 JavaScript 的事件是以一種流的形式存在的,一個事件會有多個元素同時響應。有時候這不是我們 想要的,我們只需要某個特定的元素響應我們的綁定事件就可以了。 事件分類 捕獲型事件(非IE)、冒泡型事件(所有瀏覽器都支援) 捕獲型事件是自上而下的,而冒泡型事件是自下而上的。下面我用一個圖來直觀表示: 冒泡型事件我們在工作中可能會比較多遇到,但捕獲型事件怎樣才會執行到呢,如果我們想要在非 IE 瀏覽器中 要建立捕獲型事件,只需將 addEventListener
Time of Update: 2017-01-19
1.首先我們來瞭解幾個概念,“事件”,“事件流”,“事件名稱”,“事件處理函數/事件監聽函數,也許是“老生常談”,知道的朋友可以越過。 事件: 事件是使用者自身或瀏覽器進行的特定行為。如:使用者點擊 也就是常用的click事件 事件流:多個事件 按一定順序觸發 形成了事件流 事件名稱:如上面所講的click就是事件名 事件處理函數/事件監聽函數(Dom的叫法)就是 事件觸發後的處理函數,如obj.onclick=fn;函數fn就是事件處理函數 2.下面我們來瞭解一下曆史,事件是dom的一部分
Time of Update: 2017-01-19
函數式編程簡介 說到函數式編程,人們的第一印象往往是其學院派,晦澀難懂,大概只有那些蓬頭散發,不修邊幅,甚至有些神經質的大學教授們才會用的編程方式。這可能在曆史上的某個階段的確如此,但是近來函數式編程已經在實際應用中發揮著巨大作用了,而更有越來越多的語言不斷的加入諸如 閉包,匿名函數等的支援,從某種程度上來講,函數式編程正在逐步“同化”命令式編程。 函數式編程思想的源頭可以追溯到 20 世紀 30 年代,數學家阿隆左 . 丘奇在進行一項關於問題的可計算性的研究,也就是後來的 lambda 演算。
Time of Update: 2017-01-19
我的答案是,超過兩個 else 的 if ,或者是超過兩個 case 的 switch 。可是在代碼中大量使用 if else 和 switch case 是很正常的事情吧?錯!絕大多數分支超過兩個的 if else 和 switch case 都不應該以寫入程式碼( hard-coded )的形式出現。 複雜分支從何而來
Time of Update: 2017-01-19
Notify & Capture 要實現 notify 和 capture 就太容易了,我們只需要把 capture 傳入的 handler 都儲存下來,然後在 notify 裡面找到匹配的 handler 就可以了。 複製代碼 代碼如下: var filterHandlerBundles = []; Dispatch.capture = function(pattern, handler) { var filter = createFilter(pattern);
Time of Update: 2017-01-19
1、簡單形式的封裝調用 複製代碼 代碼如下: var userName = function() { return "jeff wong" } (); alert(userName); 上面的代碼確實簡單,我們可以逐步分解成下面的寫法: 複製代碼 代碼如下: var anonymousFunc = function() { return "jeff wong" }; //匿名函數 var name = anonymousFunc(); //執行該函數 返回人名 alert(name); 2、
Time of Update: 2017-01-19
複製代碼 代碼如下: var obj = new Object(); obj.triggerOnce = function(fn) { //控制讓函數只觸發一次 return function() { try { fn.apply(this, arguments); } catch (e) { var txt = "There was an error on this page.\n\n"; txt += "Error message: " + e.message + "\n\n"; txt +
Time of Update: 2017-01-19
A 事件流(event flow ) 事件模型分為兩種:冒泡型事件、捕獲型事件。 冒泡型(dubbed bubbling )事件:指事件按照從最精確的對象到最不精確的對象的順序逐一觸發。 捕獲型(event capturing )事件:它與冒泡型事件相反,指事件按照從最不精確的對象到最精確的對象的順序逐一觸發。 捕獲型事件也被稱作自頂向下(DOM層次)的事件模型。 由於IE 瀏覽器不支援捕獲型事件,因此並沒有被廣泛應用。 B 事件監聽 i > 通用監聽方法 樣本一: 複製代碼 代碼如下:
Time of Update: 2017-01-19
這裡使用原生的javascript,用物件導向的方式建立一個容易維護使用方便的滑動菜單,調用方式如下: 複製代碼 代碼如下: var $sliding = document.getElementById("silding"); var s1 = new Sliding(); s1.commands = $sliding.getElementsByTagName("dt"); s1.panels = $sliding.getElementsByTagName("dd"); ;
Time of Update: 2017-01-19
在瀏覽器中,我們一旦把節點添加到document.body(或者其他節點)中,頁面就會更新並反映出這個變化,對於少量的更新,一條條迴圈插入也會運行很好,也是我們常用的方法。代碼如下: 複製代碼 代碼如下: for(var i=0;i<5;i++){ var op = document.createElement("span"); var oText = document.createTextNode(i); op.appendChild(oText);
Time of Update: 2017-01-19
下面我就個人觀點猜測一下,並行運算將會怎樣支援前端javascript的. 1 不太可能的進化 顯示線程的支援 如果在Javascript中支援顯示線程,那麼可能是一種災難,目前的瀏覽器解析Javascript並執行都是在瀏覽器的ui線程中工作的. 比如你可以在Javascript中運行while(true),這時瀏覽器介面就會停止回應.或者通過我之前的文章(編譯Javascript引擎,為JavaScript提供睡眠功能:http://www.cnblogs.com/ioriwellings/
Time of Update: 2017-01-19
代碼如下: 複製代碼 代碼如下: function write(msg){ for(var i = 0; i < arguments.length; i ++){ document.write(arguments[i] + '<br />'); } } //關於 '&&' test1 = 1 && 2 && 3 && 4; test2 = '0' && 2 && 3 && 4; test3 = 1 && 2 && 0 && 4; test4 = 2 && 'i' &&
Time of Update: 2017-01-19
以下是代碼: 複製代碼 代碼如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"
Time of Update: 2017-01-19
這是一個比較特殊的屬性,Javascript中的繼承一般都依賴這屬性實現。 在Javascript中,一切都是對象,字串是對象,數組是對象,變數是對象,函數也是對象,所以才會允許['a','b','c'].push('d');這樣的操作存在。類本身也是一個對象,也可以定義屬性和方法: 複製代碼 代碼如下: function Test(){}; Test.str = 'str'; Test.fun = function(){return 'fun';}; var r1 = Test.str; //
Time of Update: 2017-01-19
A 三位一體的頁面 網頁的結構層(Structure )由HTML 或XHTML 建立; 網頁的表現層(Presentation )由CSS 來建立; 網頁的行為層(Behavior )由Javascript 和DOM 所完成; 其實,網頁的表現層和行為層總是存在的,即使使用者沒有去定義。因為網頁瀏覽器會把自身預設的樣式和事件載入到網頁的結構層上。 B 使用className 屬性 Javascript 還可以通過className 屬性靈活的更改一個標籤元素的CSS
Time of Update: 2017-01-19
在JavaScript中全域變數經常會引起命名衝突,甚至有時侯重寫變數也不是按照你想像中的順序來的,可以看看下面的例子:複製代碼 代碼如下:var sayHello = function() { return 'Hello var';};function sayHello(name) { return 'Hello function';};sayHello();最終的輸出為複製代碼 代碼如下:> "Hello var"為什麼會這樣,根據 StackOverFlow
Time of Update: 2017-01-19
caller : functionName.caller 返回調用者。 看看下面的函數,大家可以複製到VS中執行下 複製代碼 代碼如下: function caller() { if (caller.caller) { alert(caller.caller.toString()); } else { alert("函數直接執行"); } } function handleCaller() { caller(); } handleCaller(); caller();
Time of Update: 2017-01-19
今天遇到了這個問題: 複製代碼 代碼如下: //虛擬碼 for (var i=0; i<n; i++) { addEvent(obj[i], "click", func(i)); } 結果出現了問題,所有的dom都被註冊了 i=n 的時候的事件,查了一些資料,說是在迴圈過程過this被改變,註冊過的事件也被隨之改變,找到了一種解決方案; 複製代碼 代碼如下: for (var i=0; i<n; i++) { (function (i){addEvent(obj[i],
Time of Update: 2017-01-19
複製代碼 代碼如下: <SCRIPT LANGUAGE="JavaScript"> <!-- function Sleep(obj,iMinSecond) { if (window.eventList==null) window.eventList=new Array(); var ind=-1; for (var i=0;i<window.eventList.length;i++) { if (window.eventList[i]==null) {