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

2011年3月24日

[JavaScript]window.location.href和window.location.replace的區別

有3個jsp頁面(1.jsp, 2.jsp, 3.jsp),進系統默認的是1.jsp ,當我進入2.jsp的時候, 2.jsp裡面用window.location.replace("3.jsp");與用window.location.href("3.jsp");從用戶界面來看是沒有什麼區別的,但是當3.jsp頁面有一個「返回」按鈕,調用window.history.go(-1);wondow.history.back();方法的時候,一點這個返回按鈕就要返回2.jsp頁面的話,區別就出來了。

例子:1.html (放form,給user填資料,送出到2.jsp) ; 2.jsp (get user填的資料並處理完後,網頁轉向3.jsp) ; 3.jsp (剛剛2.jsp轉向的動作不同影響按"上一頁"的不一樣)

若是2.jsp 用window.location.replace("3.jsp") 那麼在3.jsp上按上一頁會變成1.jsp

若是2.jsp 用window.location.href("3.jsp") 那麼在3.jsp上按上一頁會變成2.jsp (沒錯~它又會再處理一次並且轉向3.jsp)


上一頁亦可用window.history.go(-1) ; window.history.back();

2010年12月14日

[PHP] 特殊XML解讀範例

今天遇到一個特別XML

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <row sid="1234" n="AAA" dt="20101214" />
</root>

解讀方式
$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->loadXML("以上那段XML字串");


$x = $doc->documentElement;
foreach($x->childNodes AS $item){
  //print $item->nodeName."=".$item->nodeValue."<BR>";
  foreach($item->attributes AS $row){
    print $row->name ."=". $row->value."<BR>"
  }
}

JavaScript方式(待.......)

2010年11月15日

[JavaScript] setInterval 和 setTimeout 的區別

JavaScript中有兩函式 setInterval 和 setTimeout 的作用很像,他們有一些區別如下

1. setInterval裡設定的程式只會被重複觸發,直到執行了clearInterval為止
2. setTimeout 裡設定的程式只會被觸發一次
3. setInterval 和 setTimeout都是利用時間去觸發某個動作的執行;並且下一行程式不會因為時間設定的長短而被延遲或影響
也就表示,當程式走到setInterval 或 setTimeout那行執行時,觸發就交給window物件去處理,其他程式會繼續執行不會被影響!
4. setInterval 和 setTimeout 在執行時都會產生timerID以便在某些狀況下需使用clearInterval 和 clearTimeout去取消那些觸發動作

clearInterval ( timeoutId );
setInterval & clearInterval用法
    wooYayIntervalId = setInterval ( "wooYay()", 1000 );
    clearInterval ( wooYayIntervalId );

setTimeout ( expression, timeout );
clearTimeout ( timeoutId );
setTimeout & clearTimeout 用法
    第一種:
      <input type="button" name="clickMe" value="Click me and wait!" onclick="setTimeout('alert(\'Surprise!\')', 5000)"/>
    第二種:
      alertTimerId = setTimeout ( "showAlert()", 3000 );
      clearTimeout ( alertTimerId )








setInterval ( expression, interval );

2010年11月12日

[JavaScript] parseInt字串轉換成整數


眾所周知,parseInt() 是用來把字串轉換成整數的函式,一般來說,只要是數字開頭的字串,都能夠轉換成功,例如 parseInt('123a') 的結果為 123,parseInt('12 34') 的結果為12。
關於 parseInt() 有個著名的情況,有些人稱為臭蟲,讓各位自己來評斷。
parseInt('01') 得出的結果是1,事實上,一直到 07 為止,都能得到預期結果,問題來了,parseInt('08') 和 parseInt('09') 這兩者運算的結果,都得到0,這是為什麼呢?
主要原因在於 parseInt() 這個函式,本身可以傳遞兩個參數,語法是:


parseInt(string, radix)


第一個參數 string 當然是要轉換為數字的字串,第二個參數 radix 則是要用二進位、還是八進位或十六進位,又或是最熟悉的十進位來解譯這個字串呢?
也就是說,如果 parseInt('FF',16),代表以 16 進位方式來解析FF這個字串,當然得到的結果就是 255 了,同理,parseInt('FF',10) 以 10 進位來解析FF這個字串,根本就不是數字,所以得到的結果會是 NaN。
但大多數人不會特別指定第二個參數,這時 JavaScript 就自動判斷第一個傳遞的參數是否為某種數字型式。
在 JavaScript 眼中,以 0x 開頭的字串,都視為十六進位字串,如果單單是0開頭,第二個字母不是 x,則視為八進位或二進位字串,十六進位使用的字母計有 0-9,A-F,而八進位使用的字母則為 0-7,所以,當發生parseInt('08') 又未指定以何種數值型態解析時,JavaScript 以 0 為起頭,接下來的字母又不是 x,那一定是八進位了,但是,八進位裡,怎麼可能有 8 和 9 這兩個字母呢?所以,一定是不合法的字串,於是就傳回 0。
同理,parseInt('010') 回傳的值,也不是 10,而是 8,因為 parseInt() 認為 0 開頭,接下來的字母不是 x,而是 1,就以二進位來解析 010 這個字串,所以一切問題都在於以 0 開頭,所造成的誤會。
最好的解決辦法,就是別偷懶,把第二個參數也加進去,例如 parseInt('08',10)、parseInt('010',10),那就萬無一失了!


資料來源(2008/6/3):http://audi.tw/Blog/JavaScript/javascript.parseInt.asp