2010年9月30日 星期四

IE & FF 之CSS 注意地方

1.內插定位圖
<img src="pix.gif" class="nobrimg" width="30" height="1" border="0">
.nobrimg {display:block;height:1px;margin:0 0 0 0;padding:0;border:0;}



2.最小高度
{height:auto !important;height:350px; min-height:350px;}

3.圖文對齊顯示
vertical-align:middle; 
?? NO!NO! NO!
正卻解答:img{margin:0 3px -3px 0;}

2010年9月19日 星期日

MySQL CREATE VIEW

CREATE VIEW pay_stat as  SELECT left(pay_status,10) as PP ,SUM( IF( payfor ='現場繳費', `final_cost`, 0 ) ) AS 現場繳費 ,SUM( IF( payfor ='刷卡', `final_cost`, 0 ) ) AS 刷卡 ,SUM( IF( payfor ='超商代碼', `final_cost`, 0 ) ) AS 超商代碼,SUM( IF( payfor ='虛擬帳號', `final_cost`, 0 ) ) AS 虛擬帳號 FROM `class_student` WHERE pay_status !='' group by  PP  order by pay_status ASC

2010年6月28日 星期一

THICKBox 大補帖

thickbox非常強大,有些工具必須自己在改寫
參考http://blogs.digitss.com/technology/hacking-jquery-thickbox/comment-page-1/#comments

1.重複呼叫thickbox
//第1種
var jThickboxNewLink;
function tb_remove_open(reloadLink){
jThickboxReloadLink = reloadLink;
tb_remove();
setTimeout("jThickboxNewLink();",500);
return false;
}
//第2種 不用下class="thickbox"
function tb_open_new(jThickboxNewLink){
tb_show(null,jThickboxNewLink,null);
}


// 改寫tb_remove()
function tb_remove(parent_func_callback) {
$("#TB_imageOff").unbind("click");
$
("#TB_closeWindowButton").unbind("click");
$
("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
$
("#TB_load").remove();
if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
$("body","html").css({height: "auto", width: "auto"});
$
("html").css("overflow","");
}
if(parent_func_callback != undefined)
eval("window."+parent_func_callback);
document.
onkeydown = "";
document.
onkeyup = "";
return false;
}

實際用法:
1.<a href="#" onclick="tb_open_new('window_one.html?TB_iframe=true&height=400&width=400&modal=true')">Open Thickbox without href attribute</a>
2.<input type="button" value="Close & Open - Window Two" onclick="self.parent.tb_open_new('window_two.html?TB_iframe=true&height=400&width=500&modal=true')" />
<input type="button" value="Close" onclick="self.parent.tb_remove();" />

3.<input type="button" value="Close & Call Parent/Main Window function" onclick="self.parent.tb_remove('show_code();');" />



還有自訂javascript方式

<script type="text/javascript">
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g, "");
 }
    //wFORMS.functionName_formValidation = "doPostBack";
    function doPostBack(idForm,urlLoginDB,targetDiv,e) {
   if(!e) e = window.event;   
   
    if(wFORMS.behaviors['validation'].run(e)) {   
    // validation ok       
     //alert('good');

    var multiuser  = true;
    
         if(document.getElementById('multi_username_4').value.trim() != '') multiuser = confirm("此表單報名總數為 6 人!\n將收取6人費用?");
    else if(document.getElementById('multi_username_3').value.trim() != '') multiuser = confirm("此表單報名總數為 5 人!\n將收取5人費用?");
    else if(document.getElementById('multi_username_2').value.trim() != '') multiuser = confirm("此表單報名總數為 4 人!\n將收取4人費用?");
    else if(document.getElementById('multi_username_1').value.trim() != '') multiuser = confirm("此表單報名總數為 3 人!\n將收取3人費用?");
    else if(document.getElementById('multi_username_0').value.trim() != '') multiuser = confirm("此表單報名總數為 2 人!\n將收取2人費用?");

     
     if(multiuser) sendFormData(idForm,urlLoginDB,targetDiv);
    } else {
     return wFORMS.helpers.preventEvent(e);
    }

    }
  </script>


/////////////////////////////////////////////////////////

  1. Overwrite the default form validation handler with yours:
    wf.functionName_formValidation = "myCustomValidation";
  2. Implement your custom function:
    function myCustomValidation (evt) {
    // evt is the onsubmit event.

       // call the wForms default validation routine
       if(wf.formValidation(evt)) {

           // do your stuff..

       } else
        // will prevent the form from being submitted.
        return wf.utilities.XBrowserPreventEventDefault(evt);
    }

2010年5月26日 星期三

window onload 的幾種寫法


window.onload=function(){
 call_block();
}

ASP.NET如何輸出刷新父窗口腳本語句
1.  this.response.write("<script>opener.location.reload();</script>"); 


2.  this.response.write("<script>opener.window.location.href = opener.window.location.href;</script>");  

3.  Response.Write("<script language=javascript>opener.window.navigate(''你要刷新的頁.asp'');</script>")




//如何刷新包含該框架的頁面用   
<script language=JavaScript>
  parent.location.reload();
</script>  

//子窗口刷新父窗口
<script language=JavaScript>
   self.opener.location.reload();
</script>

( 或 <a href="javascript:opener.location.reload()">刷新</a>   )

//如何刷新另一個框架的頁面用   
<script language=JavaScript>
  parent.另一FrameID.location.reload();
</script>


<body onload="opener.location.reload()">
開窗時刷新
<body onUnload="opener.location.reload()">
關閉時刷新

<script language="javascript">
window.opener.document.location.reload()
</script>

如果直接把新動作附在 window.onload 的話,是會把前一個 window.onload 的動作給蓋掉的




所以建議這樣做






var oldOnload = window.onload || function () {};

window.onload = function () {
oldOnload();
// Do What Tou Want..
}



把舊的 window.onload 設定成一個變數,
然後在新的 window.onload 裡呼叫它

2010年5月23日 星期日

FORM裡的預設值

  1. <form name="update_data" action="update_data.php">   
  2. 暱名:<input type="text" name="nick" value="<?=$nick?>">   
  3. 興趣:   
  4. <input type="checkbox" name="ints[]" value="動畫">動畫   
  5. <input type="checkbox" name="ints[]" value="閱讀">閱讀   
  6. <input type="checkbox" name="ints[]" value="電影">電影   
  7. <input type="checkbox" name="ints[]" value="漫畫">漫畫   
  8. <input type="checkbox" name="ints[]" value="籃球">籃球   
  9. <input type="checkbox" name="ints[]" value="健走">健走   
  10. <input type="submit" value="送出修改">   
  11. </form>   
  12. <script>   
  13. var checkvalue = "<?=$ints?>";   
  14. var theform = document.update_data.elements;   
  15. for(i=0;i<theform.length;i++) {   
  16.   //迴圈檢查型別為checkbox且名稱為ints[]的項目,是否有興趣值符合   
  17.   if(theform[i].type == "checkbox" && theform[i].name.indexOf('ints[]')!= "-1" && checkvalue.indexOf(theform[i].value)!=-1){   
  18.     theform[i].checked = true;   
  19.   }   
  20. }   
  21. </script>  


舊式寫法

  1. <form name="update_data" action="update_data.php">   
  2. 暱名:<input type="text" name="nick" value="<?=$nick?>">   
  3. 興趣:   
  4. <input type="checkbox" name="ints[]" value="動畫" <?php if(strpos($ints,'動畫')!==false) echo 'checked'?>>動畫   
  5. <input type="checkbox" name="ints[]" value="閱讀" <?php if(strpos($ints,'閱讀')!==false) echo 'checked'?>>閱讀   
  6. <input type="checkbox" name="ints[]" value="電影" <?php if(strpos($ints,'電影')!==false) echo 'checked'?>>電影   
  7. <input type="checkbox" name="ints[]" value="漫畫" <?php if(strpos($ints,'漫畫')!==false) echo 'checked'?>>漫畫   
  8. <input type="checkbox" name="ints[]" value="籃球" <?php if(strpos($ints,'籃球')!==false) echo 'checked'?>>籃球   
  9. <input type="checkbox" name="ints[]" value="健走" <?php if(strpos($ints,'健走')!==false) echo 'checked'?>>健走   
  10. <input type="submit" value="送出修改">   
  11. </form>  

 

  1. <?php $test = 'B'; ?>   
  2. <form name="test1">   
  3. <select name="test2">   
  4. <option value="A">A</option>   
  5. <option value="B">B</option>   
  6. <option value="C">C</option>   
  7. </select>   
  8. </form>   
  9. <script>document.test1.test2.value = '<?=$test?>';</script>  

沒注意到的Select 功能

optgroup 沒用過,下次試試看!!

multiple 多選!!
 
<form name='sel'>
<select name='stars' multiple style='width:180px'
  onchange='alert( this.selectedIndex )'>
<optgroup label='牛排'>
<option>三分熟
<option>七分熟
</optgroup>
<optgroup label='雞排'>
<option >大塊
<option >小塊
</optgroup>
</select>
</form>由http://goodlucky.pixnet.net/blog/post/27026120 看到好的範例

 1判斷select選項中 是否存在Value="paraValue"Item

 2select選項中 加入一個Item

 3select選項中 刪除一個Item

 4刪除select中選中的項

 5修改select選項中 value="paraValue"text"paraText"

 6設置selecttext="paraText"的第一個Item為選中

 7設置selectvalue="paraValue"Item為選中

 8得到select的當前選中項的value

 9得到select的當前選中項的text

10得到select的當前選中項的Index

11清空select的項

  

 

js 代碼

// 1.判斷select選項中是否存在Value="paraValue"Item

function jsSelectIsExitItem(objSelect, objItemValue) {

var isExit = false;

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].value == objItemValue) {

isExit = true;

break;

}

}

return isExit;

}

 

// 2.select選項中加入一個Item

function jsAddItemToSelect(objSelect, objItemText, objItemValue) {

//判斷是否存在

if (jsSelectIsExitItem(objSelect, objItemValue)) {

alert("ItemValue值已經存在");

} else {

var varItem = new Option(objItemText, objItemValue); 

objSelect.options.add(varItem);

alert("成功加入");

}

}

 

// 3.select選項中刪除一個Item

function jsRemoveItemFromSelect(objSelect, objItemValue) {

//判斷是否存在

if (jsSelectIsExitItem(objSelect, objItemValue)) {

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].value == objItemValue) {

objSelect.options.remove(i);

break;

}

}

alert("成功刪除");

} else {

alert("select中 不存在該項");

}

}

 

 

// 4.刪除select中選中的項

function jsRemoveSelectedItemFromSelect(objSelect) {

var length = objSelect.options.length - 1;

for(var i = length; i >= 0; i--){

if(objSelect[i].selected == true){

objSelect.options[i] = null;

}

}

} 

 

// 5.修改select選項中 value="paraValue"text"paraText"

function jsUpdateItemToSelect(objSelect, objItemText, objItemValue) {

//判斷是否存在

if (jsSelectIsExitItem(objSelect, objItemValue)) {

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].value == objItemValue) {

objSelect.options[i].text = objItemText;

break;

}

}

alert("成功修改");

} else {

alert("select中 不存在該項");

}

}

 

// 6.設置selecttext="paraText"的第一個Item為選中

function jsSelectItemByValue(objSelect, objItemText) {

//判斷是否存在

var isExit = false;

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].text == objItemText) {

objSelect.options[i].selected = true;

isExit = true;

break;

}

} 

//Show出結果

if (isExit) {

alert("成功選中");

} else {

alert("select中 不存在該項");

}

}

 

// 7.設置selectvalue="paraValue"Item為選中

document.all.objSelect.value = objItemValue;

 

// 8.得到select的當前選中項的value

var currSelectValue = document.all.objSelect.value;

 

// 9.得到select的當前選中項的text

var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;

 

// 10.得到select的當前選中項的Index

var currSelectIndex = document.all.objSelect.selectedIndex;

 

// 11.清空select的項

document.all.objSelect.options.length = 0;

2010年5月20日 星期四

FORM下停止/啟用enter觸發submit

不讓Enter起作用:
在要輸入的text中加入

<input type=”text” onKeyPress=”return FormEnterKey(event)”>

然後

<script language="JavaScript">

function FormEnterKey(e)
{
     var key;     
     if(window.event)
          key = window.event.keyCode; 
     else
          key = e.which;  

     return (key != 13);
}

</script>

讓Enter作用

<form> TEXT: <input name=text1 type=text onKeyPress="return SubmitEnter(this,event)"><BR> <input TYPE=submit value="登入"> </form>










<SCRIPT TYPE="text/javascript"> <!-- function SubmitEnter(myform,e) { var keycode; if (window.event) keycode = window.event.keyCode; else if (e) keycode = e.which; else return true; if (keycode == 13) { myform.form.submit(); return false; } else return true; } //--> </SCRIPT>


2010年5月15日 星期六

加入CODE的高亮度顯示

這是一套由 Google 所推出Google Code Prettify

可以由此下載http://google-code-prettify.googlecode.com/files/prettify-small-5-Jul-2008.zip

或是由GOOGLE載入
<script type="text/javascript" src="http://jsgears.googlecode.com/svn/trunk/prettify.min/prettify.js"></script>


要載入的東西
<link href="prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="prettify.js"></script>

使用上
<pre class=prettyprint>
中間為程式碼,須先經由htmlspecialchars轉換
</pre>

最後在 body 內加上
<body onload="prettyPrint()">

若是不能在body onload 
<script type="text/javascript">
var oldonload = window.onload;
if (typeof window.onload != 'function') {
  window.onload = prettyPrint;
}
else {
  window.onload = function() {
    oldonload();
    prettyPrint();
  }
}
</script>

2010年5月11日 星期二

ULTRA EDIT 的正規搜尋

Regular Expressions in UltraEdit
UltraEdit SymbolUNIX SymbolFunction
%^Matches/anchors the beginning of line.
$$Matches/anchors the end of line.
?.Matches any single character except a newline character. Does not match repeated newlines.
* Matches any number of occurrences of any character except newline.
++Matches one or more of the preceding character/expression. At least one occurrence of the character must be found. Does not match repeated newlines.
++*Matches the preceding character/expression zero or more times. Does not match repeated newlines.
^\Indicates the next character has a special meaning. "n" on its own matches the character "n". "^n" (UE expressions) or "\n" (UNIX expressions) matches a linefeed or newline character. See examples below.
[ ][ ]Matches any single character or range in the brackets.
[~xyz][^xyz]A negative character set. Matches any characters NOT between brackets.
^b\fMatches a page break/form feed character.
^p\pMatches a newline (CR/LF) (paragraph) (DOS Files).
^r\rMatches a newline (CR Only) (paragraph) (MAC Files).
^n\nMatches a newline (LF Only) (paragraph) (UNIX Files).
^t\tMatches a tab character.
[0-9]\dMatches a digit character.
[~0-9]\DMatches a non-digit character.
[ ^t^b]\sMatches any white space including space, tab, form feed, etc., but not newline.
[~ ^t^b]\SMatches any non-white space character but not newline.
 \vMatches a vertical tab character.
[a-z_]\wMatches any word character including underscore.
[~a-z_]\WMatches any non-word character.
^{A^}^{B^}(A|B)Matches expression A OR B.
^\Overrides the following regular expression character.
^(...^)(...)Brackets or tags an expression to use in the replace command. A regular expression may have up to 9 tagged expressions, numbered according to their order in the regular expression.
^1\1Numerical reference to tagged expressions. Text matched with tagged expressions may be used in Replace commands with this format.
Note: ^ refers to the character '^' NOT Control Key + value.

2010年3月24日 星期三

XML 產生與解析

解析XML (RSS)
header('Content-Type: text/html; charset=utf-8');
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "RSS":
case "CHANNEL":
case "ITEM":
echo '-- '.$element_name .' --<br />';
break;
default:
echo '<span style="color:blue">'.$element_name .':</span>';
break;
}
}
 
//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "<br />";
}
//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}
 
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
 
//Open XML file
//$fp=fopen("http://www.beclass.com/backend.php","r");
$fp=fopen("http://udn.com/udnrss/mainland.xml",'r');
//$fp=fopen("test.xml",'r');
 
//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//Free the XML parser
xml_parser_free($parser);
 
http://www.phpclasses.org/browse/package/2552.html

rss reader 存在 office 123 rss 目錄

2010年3月23日 星期二

CSS 小技巧

連結邊的小框框,我們可以透過以下的CSS語法來隱藏它:

a{
outline: none; /* for Firefox */
hlbr:expression(this.onFocus=this.blur()); /* for IE */
}


在 HTML 中顯示特殊字碼 (Times字型)
http://cowwu.myweb.hinet.net/note/text/930421a.htm 

span寬度有效
span {display:-moz-inline-box; display:inline-block;width:120px;}
搭配的宣告
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

DIV(IE下可用)
display:-moz-inline-stack ;display:inline-block ;*display:inline ;zoom:1 ;


<html xmlns="http://www.w3.org/1999/xhtml" >

CSS:
text-align:justify; text-justify:inter-ideograph;

效果很棒!!
IE OK,其他沒測試!!

IMG 排序置中 style="filter:fliph;vertical-align:middle;"

加入刪除線:

style="text-decoration: line-through;" 

And an example:

this text is struck through


在IE中修正<BR>失效的問題:
br {letter-spacing:normal;}
ㄚ原來是定義了 letter-spacing 產生的誤判!!

連續的中文字不換行並將多餘的字隱藏

<style type="text/css">
<!--
#nobr{
width:150px;
white-space:nowrap;
word-break:keep-all;
overflow:hidden;
}
-->
</style>


沒有加CSS STYLE 的原樣:

入冬以來最強一波冷氣團,今天一整天,氣溫就像溜滑梯,淡水白天已經出現14.1度的低溫,氣象局預估的最低溫12度,可能會在今晚到明天清晨出現,中南部低溫也有16、17度,日夜溫差還可能差到10度。白天到晚上,氣溫溜滑梯,晚上到20號清晨還可能下探12度,不只台北冷,中南部入夜前測到低溫,也只有16、17度,但日夜溫差可能差到10度以上。冬泳避寒,也是一招,氣象局預估,氣溫要到週六才會回暖,冷天氣還得再撐幾天。



加了左右對齊的CSS:
入冬以來最強一波冷氣團,今天一整天,氣溫就像溜滑梯,淡水白天已經出現14.1度的低溫,氣象局預估的最低溫12度,可能會在今晚到明天清晨出現,中南部低溫也有16、17度,日夜溫差還可能差到10度。白天到晚上,氣溫溜滑梯,晚上到20號清晨還可能下探12度,不只台北冷,中南部入夜前測到低溫,也只有16、17度,但日夜溫差可能差到10度以上。冬泳避寒,也是一招,氣象局預估,氣溫要到週六才會回暖,冷天氣還得再撐幾天。

2010年1月19日 星期二

透過 jQuery 來做javascript除錯

這個需求透過jQuery的error(fn):

$(window).error(function(msg, url, line){
jQuery.post("/js_error_log.ashx", { msg: msg, url: url, line: line });
});

cookie設定httponly 防止 XSS攻擊

在php.ini中(PHP5.2以上版本已支持HttpOnly參數的設置)

  session.cookie_httponly =TRUE
  -----------------------------------------------------
  設置其值為1或者TRUE,來開啟全局的Cookie的HttpOnly屬性
  -----------------------------------------------------

或者

<?php

  ini_set("session.cookie_httponly", 1);
  // or
  session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
  ?>
  -----------------------------------------------------
  Cookie操作函數setcookie函數和setrawcookie函數也專門添加了第7個參數來做為HttpOnly的選項,開啟方法為:
  -------------------------------------------------------
  setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
  setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
  -------------------------------------------------------
  對於PHP5.1以前版本以及PHP4版本的話,則需要通過header函數來變通下了:
  -------------------------------------------------------------
  <?php
  header("Set-Cookie: hidden=value; httpOnly");
  ?>