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

2010年4月20日 星期二

javascript的showModalDialog與window.open造成session遺失的問題

Session掉了有很多種可能,

不過如果程式裡面有用到javascript進行開窗的動作,

那就很有可能是因為混著用showModalDialog跟window.open導致session遺失。

簡單來講,就是

ShowModalDialog之後,不能用window.open來開窗,否則新視窗裡面無法讀取Session

簡單的例子,混著用這兩種開窗:

open 代表 window.open
modal 代表 window.showModalDialog


Y = session 還在
N = session 不見了

連續開窗使用方式 Session是否仍然存在
open/open/open Y/Y/Y
modal/modal/modal Y/Y/Y
open/modal/open Y/Y/N
modal/open/modal Y/N/N
open/modal/modal Y/Y/Y


2009年11月24日 星期二

IE點選視窗的X時觸發某一事件

=====HTML部分========

加上一個LinkButton




=======JAVASCRIPT========
function onBeforeUnload()
{
__doPostBack('LinkButton1','');
}

=================================
LinkButton1_Click寫進資料庫之類的程式

2009年8月17日 星期一

取固定長度的顯示字串

///
/// 取固定長度的顯示字串
///

/// 原始字串
/// 最大長度
///
public string ShowString(string strOri, int iMax)
{
string strResult;
int n;

strResult = "";
n = 0;

for (int i = 0; i < strOri.Length; i++)
{
char ch = strOri[i];

if (ch >= 'a' && ch <= 'z')
{
n += 1;
}
else if (ch >= 'A' && ch <= 'Z')
{
n += 2;
}
else
n += 3;

if (n >= (iMax - 2) * 3)
break;

strResult += strOri[i];
}

if (strResult.Length < strOri.Length)
strResult += "...";
return strResult;

}

2008年7月28日 星期一

JavaScript 取用 ASP.Net 2.0 的 RadioButtonList 與 CheckBoxList

function getRadioButtonList(){
var radioObj = document.getElementById("<%=RadioButtonList1.ClientID %>");
var radioList = radioObj.getElementsByTagName('input');

for(var i = 0; i < radioList.length; i++)
{
if(radioList[i].checked)
{
alert(radioList[i].value);
}
}
}

function getCheckBoxList(){
var cboxObj = document.getElementById("<%=CheckBoxList1.ClientID %>");
var cboxList = cboxObj.getElementsByTagName('input');
var lbList = cboxObj.getElementsByTagName('label');

for(var i = 0; i < cboxList.length; i++)
{
if(cboxList[i].checked)
{
alert(lbList[i].innerText);
}
}
}

2008年7月24日 星期四

Javascript處理數字國字

var stmp = "";
function nst(t)
{
if(t.value==stmp) return;//如果等於上次輸入則返回
var ms = t.value.replace(/[^\d\.]/g,"").replace(/(\.\d{2}).+$/,"$1").replace(/^0+([1-9])/,"$1").replace(/^0+$/,"0");
//replace(/[^\d\.]/g,"")去掉輸入當中不是數字和.的字元
//replace(/(\.\d{2}).+$/,"$1")
//匹配從字元開始的第一個.後面的所有字元,由於沒有使用g標記,
//所以只匹配開始第一次 然後用小數點和後兩位進行替換以確定數值最後的格式正確 高.
//replace(/^0+([1-9])/,"$1") 匹配以多個0開頭的數值替換為去掉0後的數值做為數字的第一位 也是匹配開始的一次.
//replace(/^0+$/,"0") 匹配以0開始和結束的多個0為一個0 也就是0000000 輸入->轉換成一個0
//以下確定輸入的為過濾後的合法數位
//alert(ms);
var txt = ms.split(".");
//alert(txt[0]);
//如果ms值不小數點存在則txt[0]=小數點前的值否則等於ms
//regexp:/\d{4}(,|$)/ 匹配四位元數位和,的集合或者四位元數位和字元結尾的集合
while(/\d{4}(,|$)/.test(txt[0]))//如果為txt[0]=4123
txt[0] = txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2");
//txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2")是將txt[0]進行替換後再賦給它
//regexp:/(\d)(\d{3}(,|$))/ 將四個數字份為兩組第一個數字為第一位,後三位和其他結尾為每二位
//並替換成 第一位,第二位 注意 ,的使用很好. 也就是將4123先替換成4,123
//由於此運算式默認採用貪婪匹配所以從數值後向前匹配再通過迴圈進行再匹配替換從而可以將
//12345678分成你想要的123,456,78 樓主彩用(,|$)很精典,因為它略去了第二次匹配時的,問題
t.value = stmp = txt[0]+(txt.length>1?"."+txt[1]:"");
//最終賦值到輸入框中
//如果有小數點則加上並購成最終數位否則顯示替換後的txt[0]
bbb.value = number2num1(ms-0);
//將ms轉換為數位送到number2num1去轉換
}

function number2num1(strg)
{
var number = Math.round(strg*100)/100;
//先進行小數位數轉換也就是四捨五入由於上面已限定了小數位可不用
number = number.toString(10).split('.');//轉換成十進位字元並用小數點隔開
var a = number[0];//取小數點前的值如果有小數點則取它前面的否則取這個數值
if (a.length > 12)//判斷是否超過了計算範圍
return "數值超出範圍!支持的最大數值為 999999999999.99";//退出
var e = "零壹貳參肆伍陸柒捌玖";
var num1 = "";
var len = a.length-1;
for (var i=0 ; i<=len; i++)//按單個數位逐個進行遍歷
num1 += e.charAt(parseInt(a.charAt(i))) + [["圓","萬","億"][Math.floor((len-i)/4)],"拾","佰","仟"][(len-i)%4];
//e.charAt(parseInt(a.charAt(i)))將所選數字對應到相應的大寫陣列下標並取出大寫值
//[["圓","萬","億"][Math.floor((len-i)/4)],"拾","佰","仟"][(len-i)%4]
// ["圓","萬","億"][Math.floor((len-i)/4)]如果小於4位元顯示 "圓"
// 如果大於4位元小於8位元則顯示 "萬"
// 如果大於8位元則顯示 "億"
//由上面得到一個新陣列 -> 如果小於4位元顯示 ["圓","拾","佰","仟"]
// 如果大於4位元小於8位元則顯示 ["萬","拾","佰","仟"]
// 如果大於8位元則顯示 ["億","拾","佰","仟"]
// [(len-i)%4] 得到相應的所屬下標 分別得到 "圓","萬","億","拾","佰","仟
//下面處理小數點後的數值
if(number.length==2 && number[1]!="")
{
var a = number[1];//得到.後數值
for (var i=0 ; i num1 += e.charAt(parseInt(a.charAt(i))) + ["角","分"];
}
//以上完成後再進行正則過濾掉一些重複字元
num1 = num1.replace(/零佰|零拾|零仟|零角/g,"零");//全域替換零
num1 = num1.replace(/零{2,}/g,"零");//替換2個以上零為一個零
num1 = num1.replace(/零(?=圓|萬|億)/g,"");//替換零圓,零萬,零億,中的零為空
num1 = num1.replace(/億萬/,"億");//替換億萬為億隻替換第一次
num1 = num1.replace(/^圓零?/,"");//替換字串中開始的圓零為空此匹配為非貪婪匹配.適用於.57轉換時
//如果要最終數值不為空並且該串結尾不為"分"結尾則加一個"整字"
if(num1!="" && !/分$/.test(num1))
num1 += "整";
return num1;
}


數字金額:

國字金額:

Javascript處理金額格式

function cc(s){
if(/[^0-9\.]/.test(s)) return "invalid value";
s=s.replace(/^(\d*)$/,"$1.");
s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1");
s=s.replace(".",",");
var re=/(\d)(\d{3},)/;
while(re.test(s))
s=s.replace(re,"$1,$2");
s=s.replace(/,(\d\d)$/,".$1");
return "$" + s.replace(/^\./,"0.")
}
加錢符號:

2008年1月16日 星期三

GetTip使用說明


GetTip使用說明
 效果參閱下圖


1. 先將此三個(App_Data、bin、js)資料夾都放入專案中
2. 參考bin資料夾下的3個.dll檔案(EngageCommon.dll、EngageUtil.dll、ScriptUtil.dll)
3. 在需被引用的頁面嵌入GetTip.aspx的程式

4. 在要引用的元件上設定onMouseOver的屬性
(ImageButton)fvResult.FindControl("imbtIsDulHelp")).Attributes.Add("onMouseOver", "doShowTip(event, this, 'A03')");
5. 於App_Data下設定顯示的字樣(如下)

1. aaaaaaaaaaa
2. bbbbbbbbbbb
3. ccccccccccc

2007年12月2日 星期日

判斷 CheckBox 是否被選取

function doOutput()
{
var obj=document.getElementsByName("checkbox");
var len = obj.length;
var checked = false;

for (i = 0; i < len; i++)
{
if (obj[i].checked == true)
{
checked = true;
break;
}
}
alert(checked);
};