2008年10月31日 星期五

用jQuery寫AJAX例子

javascript:
function insert_data(pno,id){
var answer = confirm(txt);
if (answer){
var b = "#button"+id; //button的id
$.ajax({
beforeSend: function(){ //ajax發送前做
$(b).attr('disabled',true);
},
type:"POST", //ajax用POST的方式
url:"test.php", //url
async: false,
data:"no="+pno, //傳到url的值
success: function(msg){ //ajax成功時做
if (msg == ""){         
msg = "更新資料完成!";
}else{
msg = unescape(msg); //把utf-8轉成big5
}
alert(msg);
},
error: function(){ //ajax失敗時做
alert("修改資料發生錯誤,請再試一次!");
},
complete: function(){ //ajax完成時做
$(b).attr('disabled',false);
}
});
}
}

Html:
<input type="button" name="button1" id="button1>" value="更新" onclick="insert_data('123'1);">

PHP:
$no = $_POST["no"];
echo iconv("big5","utf-8","編號為:".$no); //big5轉utf-8

javascrip中文轉碼可參考:http://werdna1222coldcodes.blogspot.com/2008/12/javascriptescape-encodeuri.html

讓網頁的欄位也能使用上、下、左、右鍵來控制

javascript:
function change_field(evt, id, id_name){
 var d = "#"+id_name+(id+1); //下一個欄位
 var u = "#"+id_name+(id-1); //上一個欄位
 var r = "#txt"+id; //右邊欄位
 var l = "#txt_r"+id; //左邊欄位
 var charCode = (evt.which) ? evt.which : event.keyCode

 if (charCode == 40){ //向下鍵
  $(d).focus();
 }else if (charCode == 38){ //向上鍵
  $(u).focus();
 }else if (charCode == 37){ //向左鍵
  $(l).focus();
 }else if (charCode == 39){ //向右鍵
  $(r).focus();
 }
}

Html:
欄位的排列需有規則,欄位給id,用id來控制
<input type="text" name="txt1" id="txt1" onkeydown="change_field(event, 1,'txt')">
<input type="text" name="txt_r1" id="txt_r1" onkeydown="change_field(event, 2,'txt')">


<input type="text" name="txt2" id="txt2" onkeydown="change_field(event, 3,'txt')">
<input type="text" name="txt_r2" id="txt_r2" onkeydown="change_field(event, 1,'txt')">


<input type="text" name="txt3" id="txt3" onkeydown="change_field(event, 2,'txt')">
<input type="text" name="txt_r3" id="txt_r3" onkeydown="change_field(event, 3,'txt')">

2008年10月30日 星期四

另開視窗為全螢幕

javascript:
function open_w(no){
window.open("test.php?flag=f&no="+no,"Wopen2","fullscreen=yes,location=no,toolbar=no,
memubar=no,status=no,directories=no,resizable=yes,scrollbars=yes");
}

HTML:
<input type="button" name="buttons" id="buttons}>" value="更新" onclick="open_w('123')">

2008年10月22日 星期三

讓某個欄位獲得焦點、反白

(1)javascript
焦點
document.getElementById('field1').focus();

反白
document.getElementById('field1').select();

(2)jQuery
//當class為link_column且此欄位focus時,把此欄位反白
$(document).ready(function(){
 $(".link_column").focus(function() {
  $(this).select();
 });
});

//欄位內容反白
function click_data(txt_id){
 $(txt_id).focus(); //焦點
}

<input class="link_column" type="text" name="txt1" id='txt1' onclick="click_data('txt1');>

防止Sql injection和XSS injection

傳入string,傳回string
function checksql($str) {
 $str = @htmlspecialchars($str);

 //過濾單引號成為全形單引號
 $str = str_replace("'","’",$str);

 //過濾雙引號成為全形雙引號
 $str = str_replace('"',"”",$str);
 
 return $str;
}

字串轉成浮點數或整數

將字串轉成浮點數並傳回值:
 parseFloat(字串)

將字串轉成基底的整數並傳回值:
 parseInt(字串,基底)
 基底是指幾進位:如十進位、十六進位…
 parseInt('010',10)

Mouse Over 的效果

Script:
$(document).ready(function(){
 //當id為tdata,tr的id開頭不等於line,當滑鼠移到時加入class,離開時移除class
 $("#tdata tr:not([id^='line'])").hover(
  function () {$(this).addClass("class_01");},
  function () {$(this).removeClass("class_01");}
 );
});

Html:
<table border="1" id="tdata">
 <tr id="line" class="class_02">
  <td>欄位</td>
 </tr>
 <tr>
  <td>資料</td>
 </tr>
</table>

table 基偶列不同顏色

Script:
$(document).ready(function(){
//當id為tdata,tr的id開頭不等於line的加入class
$("#tdata tr:not([id^='line']):even").addClass('class_03');
$("#tdata tr:not([id^='line']):odd").addClass('class_04');

//或id的開頭為tdata,tr的id開頭不等於line的加入class
$("[id^='tdata'] tr:not([id^='line']):even").addClass('td_blue_03');
$("[id^='tdata'] tr:not([id^='line']):odd").addClass('td_green_04');

//或
$("#tdata tr:even").addClass('table_even');
$("#tdata tr:odd").addClass('table_odd');
});

Html:
<table border="1" id="tdata">
<tr id="line" class="class_02">
<td>欄位</td>
</tr>
<tr>
<td>資料</td>
</tr>
</table>

2008年10月20日 星期一

只能填數字和小數點

javascript:
function check_keyPress(e){
 if ($.browser.msie){ //ie
  keycode = event.keyCode;
 }else{ //其它
  keycode = e.which;
 }
 if ((keycode > 57 || keycode < 48) && (keycode != 46) && (keycode != 13)) {
  return false;
 }
}

html:
<input type="text" name="text1" value="" size="5" onkeypress="return check_keyPress(event)">

判斷按下的是鍵盤的哪個鍵

javascript:
function check_keyPress(e){
(1)
 if ($.browser.msie){ //ie
  keycode = event.keyCode;
 }else{ //其它
  keycode = e.which;
 }
 alert(keycode);
 PS.發現無法判斷上、下、左、右鍵

(2)
 var keycode = (e.which) ? e.which : event.keyCode
}



html:
<input type="text" name="text1" value="" size="5" onkeypress="check_keyPress(event)">

判斷瀏灠器是否為IE

if ($.browser.msie){ //ie
  alert("Yes");
}else{ //其它
  alert("No");
}

欄位只能填數字-for IE

<input type="text" name="numberin" size="5" value="" id="numberin" onKeyPress="with(window.event)return(keyCode>47&&keyCode<58)">

2008年10月2日 星期四

Table 中的 TH

TD、TH是欄的意思,每行中若有一個TD、一個TH則會有兩欄。
因為TD和TH其實是同樣的東西,只是TH會將此格中的文字置中且加粗。

2008年10月1日 星期三

HTML的META

瀏覽器或是搜尋引勤擎經由 HTTP 協定,讀取 HTML 檔案時會先對其中有意義的 META 做判讀並執行。META 用於網頁的<head>與</head>中。
META 的內容有兩種:name和http-equiv。name內容主要用於描述網頁,以便於查詢引擎機器人尋找、分類。
  1. <meta name="Generator" content="“>
    用以說明生成工具(如Microsoft FrontPage 4.0)等
  2. <meta name=“keywords" content="“>
    向查詢引擎說明網頁的關鍵詞
  3. <meta name=“description" content="“>
    告訴查詢引擎你的網站台的主要內容
  4. <meta name=“Author” content=““>
    告訴查詢引擎網站的作者
  5. <meta name="Robots" content="all|none|index|noindex|follow|nofollow“>
    設定為all:檔案將被檢索,且頁面上的連結可以被查詢
    設定為none:檔案將不被檢索,且頁面上的連結不可以被查詢
    設定為index:檔案將被檢索
    設定為follow:頁面上的連結可以被查詢
    設定為noindex:檔案將不被檢索,但頁面上的連結可以被查詢
    設定為nofollow:檔案將不被檢索,頁面上的連結可以被查詢

php refresh網頁重讀及網頁導向

header("refresh:5;url=http://www.google.com");

php導到「HTTP 404 - 找不到檔案」的錯誤訊息

header("HTTP/1.0 404 Not Found");
exit;

強迫不要使用cache

欲讓使用者每次都能得到最新的資料,強迫不要使用快取(cache)
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

php寫下載excel

可以用Pear套件,下面是比較簡單的方式...

<input type="button" name="B1" value="下載EXCEL" onclick="location.href=download.xls">

\t:指Tab鍵(換欄位)
\n:指換行
$txtFile = "欄位A\t欄位B\t欄位C\t欄位D\n";
while ($row = mssql_fetch_array($result)){
 $txtFile .= "'$row['id']\n"; //在值的前面加上單引號變成字串
}
//開啟EXCEL檔
//若檔案存在,則刪除檔案
if (file_exists("/localhost/download.xls")){
 unlink("/localhost/download.xls");
}
if (!$file = fopen("/localhost/download.xls","w+")){
 echo 開啟文字檔失敗
 exit;
}
fputs($file,$txtFile); //把資料寫入檔案
fclose($file);

PS.若內容四個空格,會被當成tab鍵,所以…需把它替換掉
str_replace(' ',"",$result[$tab])

javascript 截取字串

String.substr(s,e) :從指定的位置(s)取指定長度(e)的字串。
String.substring(s,e) :從指定的位置(s)到指定的位置(e)的字串。
起始位置從0開始

code = 'abcdefghi'
function checkData(){
 //計算字串的長度
 var i = document.getElementById('code').value.length;
 alert(i); // 9
 //從指定位置2,到指定位置4的字串
 var j = document.getElementById('code').value.substring(2,4);
 alert(j); // cd
 //從指定位置2,截取長度4的字串
 var k = document.getElementById('code').value.substr(2,4);
 alert(k); // cdef
}