ラベル Webアプリ開発/JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル Webアプリ開発/JavaScript の投稿を表示しています。 すべての投稿を表示

IDの付加

ブラウザの「更新」ボタンが押されるなどで
同じリクエストが送られた場合を判別するためには
リクエストを送るときにIDを付加する。

JavaScriptの
Date.getTime()
で現在時刻を表す数字をとってきてIDにする方法は以下の通り。

1.URLにIDを付加する
<a href="javascript:location.href=encodedURL('requestURL','idname');">
リンク
</a>

2.フォームの隠し属性でIDを付加する
<form name="formname" action="requestURL"
onsubmit="setID(this.hiddenname);">
<input type="hidden" name="hiddenname" value="">
<input type="submit" value="go!!">



encodedURLとsetIDのソースは下記参照

//URLにIDを付加
function encodedURL(url,name){
//URLの#までの部分を取得
var indx=url.indexOf("#");
var encodedurl;
if(indx!=-1){
encodedurl = url.substring(0,indx);
}
else{
encodedurl = url;
}
//現在時刻をIDとして使用
var id =(new Date).getTime();
//IDをURLに付加
if(url.match(/\?/)){
encodedurl += "&"+name+"=";
}
else{
encodedurl += "?"+name+"=";
}
encodedurl +=id;
//#より右の部分を付加
if(indx != -1){
encodedurl += url.slice(indx);
}

return encodedurl;
}


//フォームのIDを設定
function setID(id){
id.value= (new Date).getTime();
}

「戻る」でページに戻れないようにする

<a href="http://google.co.jp">
google(戻ってこれる)
</a>

でリンク先に飛ぶとブラウザの「戻る」で戻ってこれるが、

<a href="javascript:location.replace('http://google.co.jp');">
google(戻ってこれない)
</a>

のようにlocation.replaceを使用すると戻ってこれなくなる。

サンプル
google(戻ってこれる)
google(戻ってこれない)

入力を制限する

chkinput.jsファイルをHTML(JSP)ファイルのあるフォルダに置き
<head>の中に

<head>
<script type="text/javascript" src="chkinput.js">
</script>
</head>

のように追加する。

そして、入力を数字だけに制限したいときには

<input type="text" onkeyup="restricttoN(this)">

のように書く。



------- chkinput.js -------

//入力を数字に制限
function restricttoN(str){
str.value=str.value.replace(/\D/g, "");
}
//入力を英数字に制限
function restricttoalphameric(str){
str.value=str.value.replace(/[^0-9a-zA-Z]/g,"");
}
//全角英数字を半角に変換
function chkCode1(id) {

work='';

for (lp=0;lp<id.value.length;lp++) {

unicode=id.value.charCodeAt(lp);

if ((0xff0f<unicode) && (unicode<0xff1a)) {

work+=String.fromCharCode(unicode-0xfee0);

} else if ((0xff20<unicode) && (unicode<0xff3b)) {

work+=String.fromCharCode(unicode-0xfee0);

} else if ((0xff40<unicode) && (unicode<0xff5b)) {

work+=String.fromCharCode(unicode-0xfee0);

} else {

work+=String.fromCharCode(unicode);

}

}

id.value=work; /* 半角処理のみ */

}

//半角英数字を全角に変換
function chkCode2(id) {

work='';

for (lp=0;lp<id.value.length;lp++) {

unicode=id.value.charCodeAt(lp);

if ((0xff0f-0xfee0<unicode) && (unicode<0xff1a-0xfee0)) {

work+=String.fromCharCode(unicode+0xfee0);

} else if ((0xff20-0xfee0<unicode) && (unicode<0xff3b-0xfee0)) {

work+=String.fromCharCode(unicode+0xfee0);

} else if ((0xff40-0xfee0<unicode) && (unicode<0xff5b-0xfee0)) {

work+=String.fromCharCode(unicode+0xfee0);

} else {

work+=String.fromCharCode(unicode);

}

}

id.value=work; /* 半角処理のみ */

}

数字以外の入力禁止

<script type="text/javascript">

<!--

function restricttoN(str){

str.value=str.value.replace(/\D/g, "");

}

//-->

</script>

<input type="text" onkeyup="restrictto(this);" >

正規表現による比較

str.match(/\w/) 数値一文字を表す
str.match(value) strと文字列を比較


正規表現について

  • *: 0回以上の繰り返し(最長マッチ。?をつけると最短)
  • +: 1回以上の繰り返し(最長マッチ。?をつけると最短)
  • {a}: a回マッチ
  • {a,}: a回以上マッチ(最長マッチ。?をつけると最短)
  • {a,b}: a回以上b回以下マッチ(最長マッチ。?をつけると最短)
  • ^abc: 先頭に位置指定
  • abc$: 末尾に位置指定


ひとつの文字や数字
. 改行文字を除く任意の1文字
c メタキャラではない1文字
[a-z0-9] [ ]の中の任意の1文字(小文字大文字は別として扱う)
[^a-z0-9] [ ]の中にない任意の1文字
\w アルファベット、数字又は下線
\W アルファベット、数字、下線以外
\d 数字
\D 数字以外[^0-9]と同じ
\s 空白文字(スペース、タブ、改行)
\S 空白文字以外
\n 改行
\r リターン(復帰)
\t タブ
\d バックスペース
\o 8進数の値
\x811 16進数の値
\cx 制御文字
数量子
? 直前の文字が0個または1個
* 直前の文字が0個以上
+ 直前の文字が1個以上
{a} 直前の文字がa個
{a,} 直前の文字がa個以上
{a,b} 直前の文字がa個以上b個以下
?? 直前の文字が0個または1個 ( 注1
*? 直前の文字が0個以上 ( 注1
+? 直前の文字が1個以上 ( 注1
{a}? 直前の文字がa個 ( 注1
{a,}? 直前の文字がa個以上 ( 注1
{a,b}? 直前の文字がa個以上b個以下 ( 注1
位置指定
^ 行頭
$ 行末
\b 単語の区切り
\B 単語の区切り以外
その他
\ 次のメタ文字をクォートする ( \. → "."自信を表わす)
() グループ化
特殊変数
\1、$1 はじめにマッチした項目
\2、$2 2番目にマッチした項目

英数字を半角にする

<type="text/javascript">

function chkCode(id) {

work='';

for (lp=0;lp<id.value.length;lp++) {

unicode=id.value.charCodeAt(lp);

if ((0xff0f<unicode) && (unicode<0xff1a)) {

work+=String.fromCharCode(unicode-0xfee0);

} else if ((0xff20<unicode) && (unicode<0xff3b)) {

work+=String.fromCharCode(unicode-0xfee0);

} else if ((0xff40<unicode) && (unicode<0xff5b)) {

work+=String.fromCharCode(unicode-0xfee0);

} else {

work+=String.fromCharCode(unicode);

}

}

id.value=work; /* 半角処理のみ */

//id.value=work.toUpperCase(); /* 大文字に統一する場合に使用 */

//id.value=work.toLowerCase(); /* 小文字に統一する場合に使用 */

}

</script>