顯示具有 JavaScript 標籤的文章。 顯示所有文章
顯示具有 JavaScript 標籤的文章。 顯示所有文章

星期一, 八月 18, 2008

JavaScript的Ascii2Native

為了個人需求,需要用JavaScript做unicode escape轉換。

對岸的高手在 Native2Ascii的JavaScript实现 (便于平时使用) 有,但他寫的ascii2native明顯有Bug。

不才在下修改成:
function ascii2native() {
a = document.getElementById('ascii').value;
n = unescape(a.replace(/\\u/ig, "%u"));
document.getElementById('native').value = n;
}

星期四, 六月 19, 2008

It is better to be lucky than smart

剛才看Douglas Crockford's Wrrrld Wide Web裏這篇
The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language (中文版:JavaScript:從最受誤解的編程語言演變為最流行的語言
裏頭的結語 "It is better to be lucky than smart."實在是切中要點呀!拿來當做今日格言吧。

星期三, 六月 11, 2008

從frame/iframe頁面存取主頁

前幾天雅痞學弟說要跨 frame 設定CSS,我想這應該需要靠JavaScript才做得到。今天抽空稍微試了一下,果然很容易。
假設分為二個frame,在一個frame用
var document1 =parent.frames[0].document;
就可以輕鬆存取另一個頁面的dom物件。

今天忽然想到,若是iframe呢?查了一下w3c school,可以用contentDocument屬性,也就是
var document1 = document.getElementById('iframe1').contentDocument;
可惜IE不支援。接著就只好找非標準的寫法,有解。
簡單地說,利用contentWindow屬性,同樣能找到document物件。
var document1 = document.getElementById('iframe1').contentWindow;
contentWindow屬性算是非標準,但Firefox其實也支援。上文中的 window.frames[frame名].document 的方式,把 iframe 當 frame 看待,感覺上怪怪的,而且又是IE only,您就別用了。

參考:
contentWindow at mozilla
contentWindow Property at msdn (在下強烈建議別用document.all這種非標準的寫法呀...)

星期六, 四月 21, 2007

真的要這麼複雜嗎

昨天問MIS小姐新任務要用Web Form還是Windows Form,她毫不考慮就決定用Windows Form。原因是她的程式只需要對單一使用者,安裝不是問題,除錯與開發的時間絕對是Windows Form比較快,安全性也比較好。

  在下並不喜歡用Javascript,從1997年寫的Javascript到1999年變成不能用之後,對於Javascript 的相容性有種莫名的恐懼。當然2000年後 Javascript向前相容已經很好,但是debug的難度仍然非常高。最近火紅的AJAX開發很困難,就算用Ajax.asp.net都有一定的複雜度與限制。先不論省頻寬或浪費頻寬,AJAX其實很耗CPU資源,若是做拖拉或放大縮小等特效時連Core 2 Duo都不是很流暢。在下公司桌上那台用了快六年的P3 1G還沒換,連Rainbow Portal的menu都有點慢,根本不敢試Dojo Toolkit的圖形處理。

HTML並不是設計成程式化的開發環境,希望能有不同的application model,但看來是不太可能,我還馬上是去天瓏一趟,買本好書來看。

星期四, 四月 19, 2007

不懂JavaScript

看了MSDN上使用物件導向技術來建立進階 Web 應用程式,才知道自己完全不懂JavaScript。那位仁兄能提供好書嗎?

星期四, 十月 26, 2006

標準的DOM+JavaScript設定屬性

今天和Randy討論IE7相容性時,他提到設定style的不相容,我建議使用DOM 2+JavaScript Core,於是寫了一個範例來測試,最後DOM標準寫法在Sofari、IE6、IE7、Firefox都可以正常使用。

建議像我一樣不熟DOM模型的人,可以用Aptana這套免費好用的JavaScript IDE。

注意:今天發生一個陷阱,obj.style.width="100px"; 第一次我誤打成 obj.style.width="100px;", 多一個分號在Firefox居然可以執行,但其他Browser就認為錯誤,IE稱為"引數錯誤"。另外obj.style.width="0px"會錯,obj.style.width="0"才是正確的寫法,不可不注意。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
function click2(xyz){
var obj;
obj = document.getElementById(xyz);
obj.style.width = "100px";
obj.style.height = "20px";
obj.value = "屬性已設定";
}
-->

</script>
<form name="form1" method="post" action="">
<input type="text" id="t22" name="t22" value="" style="width: 50px; height: 50px;"/><input type="button" name="b12" id="b12" value="按我" onclick="javascript:click2('t22')"/>
</form>
</body>
</html>

IE特有的事件處理方式

最近看到某大軟體公司的asp程式,發現IE特有的事件處理方式。

宣告函數名稱: 控制項 id_事件() 就會在事件發生時觸發。限定在VBScript使用,JavaScript無效。

IE7在beta版時把這些非標準DHTML移除,但在正式版又重新支援,另一個例子像document.all(id);如果改寫,請記得改為document.getElementById(id),這是目前的DOM標準。

另外,在這次測試無意中發現Firefox的JavaScript 函數名稱會分大小寫,而IE不會。

以下為測試網頁原始碼:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>測試IE6、IE7與Firefox 2.0相容性</title>
</head>
<body>
測試OnChange事件,隨便填一個字後點到空白處或按Tab
<script language="vbscript" type="text/vbscript">
<!--
sub t1_onChange()
alert ("t1 OnChange VBScript 事件")
end sub
-->
</script>
<script language="JavaScript" type="text/javascript">
<!--
function t1_onChange()
{
alert("t1 OnChange JavaScript 事件");
}

function ClickMe()
{
var label1;
label1 = document.getElementById('t2');
label1.value= label1.value + "getElementById ";
label1 = document.all('t2'); // Firefox執行到這裏會錯
//Update: 現在Firefox會接受document.all,但會有警告,可打開錯誤主控台看
label1.value= label1.value + "document.all ";
}
-->
</script>

<form id="form1" name="myform" action="http://search.blogger.com/">

<input type="text" id="t1" name="t1" onChange="javascript:t1_onChange()" />
<input type="button" name="b1" id="b1" value="按我" onClick="javascript:ClickMe()" />
<input type="text" id="t2" name="t2" value="" />
</form>
</body>
</html>