Time of Update: 2018-12-07
在DHTML開發中,微軟在其DOM中為每個元素實現了一個fireEvent方法。我們知道HTML的事件onXXX可以由系統(IE環境)來管理和觸發,也可以直接執行事件的handler,比如onclick,如果被賦予事件處理函數,我們可以用element.onclick()來執行事件處理函數。那麼fireEvent用來幹嘛呢? 在MSDN中fireEvent的描述很簡單:Fires a specified event on the object. bFired =
Time of Update: 2018-12-07
剛才在51js看到有網友問,"1到100一百個數,怎麼用JS來隨機打亂它們的順序呢?"。他說的這個不就是洗牌問題嘛,想起原來自己在做一個撲克遊戲的時候設計過一個高效的洗牌演算法,n個自然數通過n次迴圈搞定(當時是54個,撲克嘛)。
Time of Update: 2018-12-07
在上次把TreeView的事件支援實現後,整個TreeView的主體也就完成了。但是由於在UI元素的管理上,使用了Script類對象和DOM對象間的環狀鏈表引用,所以還必須在頁面退出時作一些清理工作,也就是為每個類都實現一個Dispose方法。
Time of Update: 2018-12-07
在關於JavaScript繼承的一系列討論中,我詳細的介紹和比較了四種繼承方式,其中第四種"附加繼承法"是一種對重載支援的最好的方法。並且也在我的實際開發中廣泛的使用了,不過近來我發現在多層次的重載中,又出現了一個非常嚴重的bug。 我們使用原來重載一文中的那個grandpa、father & son的樣本: <html> <head>
Time of Update: 2018-12-07
在指令碼編程時使用with語句,可以大大的縮減使用多級對象引用程式碼的長度,這是JScript提供給我們的一個Syntax Sugar。當然不使用with,使用臨時變數也可以達到同樣的效果。不過建立變數時起名確實不是一件很遐意的事,就連MASM高版本中也提供了一個@@(以及@F和@B)來處理臨時標號的問題,看來大家都是比較懶得啦。
Time of Update: 2018-12-07
上次由於一個'\t'讓我鬱悶了半天,本以為自己已經在debug的時候很小心了,沒有想到今天又載了一會。錯誤非常之低級,而debug費力又還非常之大,真是讓人哭笑不得。所以乾脆在blog的隨筆裡專門開闢一個叫"Debug中的滑鐵盧"的分類,專門記錄Debug時一些stupid的小事。
Time of Update: 2018-12-07
函數是JavaScript中很重要的一個語言元素,並且提供了一個function關鍵字和內建對象Function,下面是其可能的用法和它們之間的關係。 使用方法一: var foo01 = function() //or fun01 = function() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typeof(foo01)); alert(foo01());
Time of Update: 2018-12-07
我在前段時間介紹過IE中JavaScript指令碼Memory Leak的問題,後來在幾位熱心網友的討論下,基本認可了記憶體泄露的事實和原理。在小規模的測試case下,本來都達到了基本避免IE中指令碼的ML問題。可是近來發現只以"仔細"來防止IE中指令碼ML似乎是非常困難的一件事情,難道開始的討論有錯誤嗎?
Time of Update: 2018-12-07
Time of Update: 2018-12-07
在整理項目裡面的代碼時,結果被一個失誤鬱悶了一下。 事情是這樣的,原來項目裡面有幾個頁面是*.htm格式的,後來為了統一管理資源方便,就把檔案改成了*.aspx的了。當然這樣做是沒有任何的問題,同時VS.NET也自動的添加上了相應的*.cs和*.resx檔案。於是一段動態指令碼也通過Page.RegisterStartupScript()方法,來註冊到頁面上去。可是問題就來了,運行頁面不能得到預期效果,察看aspx頁面產生的html代碼,居然沒有發現動態註冊上的代碼。
Time of Update: 2018-12-07
最近為了在web頁面上通過代碼動態顯示一個列表(DataList),由於顯示的item項比較複雜,所以使用了load模版的方法,建立一個usercontrol頁面(.ascx),按平時模版列的做法,在其html中加入<%# DataBinder.Eval(Container.DataItem, "displayname")
Time of Update: 2018-12-07
昨天說了一下TreeView控制項的資料結構和UI表現的設計。為了讓一個TreeView控制項有更好的實用性,對它的功能和外觀作一些必要的定製是非常有用的,今天就來說一下關於定製這個TreeView相關的一些設計。因為這些東西在一開始編碼後就會馬上被使用到,先確定好能省不少事。 目前設計了3個輔助TreeView的類,它們分別是: Class
Time of Update: 2018-12-07
在使用popup視窗構建Web菜單一文中,我曾比較的詳細的介紹了popup視窗的使用方法和一些注意事項。今天發現要判斷滑鼠是否移入一個popup視窗,還挺有些鬱悶,不過最後還算找到了一個解決辦法。
Time of Update: 2018-12-07
上次我介紹過,使用popup視窗來製作無限級菜單。由於當時對於JavaScript的瞭解比較有限,加之又把主要的精力都focus到popup視窗本身的一些問題上去了,所以關於菜單的設計中還是有很多不合理的地方。後來因為需要又作了一個TreeView控制項,不過由於需求變化大,被改得來結構相當的亂了,於是抽空重構一下,並把一些設計步驟記錄下來,歡迎大家討論並提意見。
Time of Update: 2018-12-07
- -Visual Stuido 2005整合了Unit Test功能後,建立和管理Unit Test變得比原來簡單多了,並且獨立項目的Unit Test模組和代碼不會再"殘留"於我們的dll中。不過VS 2005 Unit Test運行方法的原理和其他的Unit Test架構一樣,也是使用反射來實現的,這樣就會造成代碼中一些依賴於運行環境的參數擷取不到。 剛才做了一個方法的Unit
Time of Update: 2018-12-07
今天真是鬱悶,本來就挺忙的,因為明天boss要看一個milestone的示範,我和team裡的同事緊趕慢趕。本來看著就勝利在望了,可是下午吃飯回來調試的時候卻被弄宕機。不是機器宕了,使人宕了。
Time of Update: 2018-12-07
原來只是覺得IE解析HTML檔案的時候,需要知道其傳輸編碼,才能正確處理,而從來沒有在意過JavaScript檔案的編碼問題。結果今天發現同一頁面中的多個JavaScript檔案如果儲存編碼不同,也會有出錯的問題。這個一般怎麼會遇到呢? 原來寫的js檔案,從來沒有關心過他們的編碼問題。可是後來不知怎麼的,發現一些單獨都好使得檔案,被同時引用到一個頁面中時,就錯誤不斷,根本不能執行。Debug半天,原來是檔案編碼問題搞得鬼。 一般我們在中文OS中儲存文字檔,預設都是一GB231
Time of Update: 2018-12-07
上周在關於JavaScript物件導向編程的話題中,我講過怎麼'在JavaScript物件導向編程中使用重載'。雖然那個方法需要使用一個call函數來調用基類被重載的方法,看起來比較怪不說。不過更大的問題卻是那個方法只支援兩級繼承的基類方法調用,使用起來真是如食雞肋。 後來仔細研究了一下call函數的執行過程和原理,發現要實現"重載"一文中的任意層級類調用其直接基類方法是可以實現的。還記得上次那個樣本嗎?三個類:grandpa、father &
Time of Update: 2018-12-07
上次我說到要使用popup在web中建立無限級菜單,兩個要解決的問題是多個popup視窗共存和popup中的事件的處理。其中多個popup共存的問題我已經講了可以使用popup.document的parentWindow來再createPopup,這個就算搞定了,而第二個問題就有些讓人討厭了,為什麼呢?
Time of Update: 2018-12-07
菜單除了要它能顯示,還要它能執行動作才是最關鍵的地方。popup是個子視窗,雖然他沒有opener。我們有兩種辦法來在popup中執行指令碼,一是把script代碼寫到其document中,讓它運行,比如: