都道府県穴埋めゲーム

以下は、いくつもある検索フォームの中のテキストボックスの一つです。
ここに、次のエラーチェックを仕込みたいのですが。

(1) 17で始まる8桁数字以外はアラートを出す。NULLもダメ。
(2) 半角数字以外が入力されたときは、フォーカスが離れた時アラートを表示NULLはOK。
(3) ここに示していないその他のフォームを含め、一個でも上記エラーがあったら
  検索ボタン押下時にアラートを出し、POSTを許可しない。

いろいろエラーになったり、(1) ができてなかったりで、すみませんが
完璧にするためのアドバイスいただけないでしょうか。IE6オンリーで十分です。

<html>
<head>
<script type="text/javascript">
function NullCheck() {
if ( document.query.numberform.value=="" ) {
alert( "必ず17で始まる半角数字8桁で指定してください。\n例:17910031" );
return 1;
}
return false;
}
function NumbCheck() {
var str = document.query.numberform.value;
if( str.match( /[^0-9]+/ ) ) {
alert("不正な値がみつかりました。");
return 1;
}
return 0;
}
/* 全部チェック */
function AllCheck() {
var check = 0;
check += NullCheck01();
check += nmck09();
if( check > 0 ) {
return false;
}
return check;
}
</script>
</head>
<body>
<form method="post" action="list.php" target="list" id="query" name="query">
<input value="17000000" size="10" type="text" name="numberform" onblur="NumbCheck();NullCheck();">から
<input type="submit" name="exec" value="検索" onclick="return AllCheck();">
</form>
</body>
</html>

A 回答 (2件)

とりあえずこんな感じですか?



<script language="javascript">
function checkForm(num){
var n=document.getElementById("numberform");
if(num=="bler" && n.value.length==0){
return false;
}
if( n.value.length!=8 || n.value.substr(0,2)!="17"){
alert( "必ず17で始まる半角数字8桁で指定してください。\n例:17910031" );
n.focus();
return false;
}
if( n.value.match( /[^0-9]+/ ) ) {
alert("不正な値がみつかりました。");
n.focus();
return false;
}
return true;
}
</script>
<form method="post" action="list.php" target="list" id="query" name="query" onSubmit="return checkForm('all');">
<input value="17000000" size="10" type="text" name="numberform" onblur="checkForm('bler')">から
<input type="submit" name="exec" value="検索">
</form>

この回答への補足

すみません、ご提示いただいたものを以下のようにアレンジしてみたのですが
「必ず17で始まる・・」のalertが無限ループしてしまいます。
何が誤ってますでしょうか・・・

<html>
<head>
<script type="text/javascript">
function nmck09(num1) {
var n=document.getElementById("more");
if(num1=="bler1" && n.value.length==0){
return 1;
}
if( n.value.length!=8 || n.value.substr(0,2)!="17"){
alert( "必ず17で始まる半角数字8桁で指定してください。\n例:17910031" );
n.focus();
return 1;
}
if( n.value.match( /[^0-9]+/ ) ) {
alert("不正な値がみつかりました。");
n.focus();
return 1;
}
return true;
}

function nmck10(num2) {
var n=document.getElementById("less");
if(num2=="bler2" && n.value.length==0){
return 1;
}
if( n.value.length!=8 || n.value.substr(0,2)!="17"){
alert( "必ず17で始まる半角数字8桁で指定してください。\n例:17910031" );
n.focus();
return 1;
}
if( n.value.match( /[^0-9]+/ ) ) {
alert("不正な値がみつかりました。");
n.focus();
return 1;
}
return true;
}

// Submit時に全部チェック
function AllCheck() {
var check = 0;
check += nmck09();
check += nmck10();
if( check > 0 ) {
return false;
}
return check;
}
</script>
</head>
<body>
<form method="post" action="list.php" target="list" id="query" name="query">
<input value="" size="10" type="text" name="more" onblur="nmck09();">から
<input value="" size="10" type="text" name="less" onblur="nmck10();">まで
<input type="submit" name="exec" value="検索" onclick="return AllCheck();">
</form>
</body>
</html>

補足日時:2005/09/20 11:05
    • good
    • 0
この回答へのお礼

yambejpさん、いつもお世話になっております。
御礼遅くなってすみませんでした。
質問の仕方が悪く、まずはお詫びもうしあげます。

さて、ご教示のスクリプトをためさせていただきましたが、
実にいい感じに動作します。

本番環境にも組み込んでみて、また要望などが
あったら追加質問させてください。

たぶん完璧だと思われますので、その際は締め切らせていただきます。

以上、取り急ぎ御礼まで

お礼日時:2005/09/20 10:17

もう少し具体的に何に困っているのか書くと回答が得られやすいと思います。



>(1) 17で始まる8桁数字以外はアラートを出す
17だけ外に固定表示させておけば、あとの6桁をチェックするだけで良さそうなのですが・・・
    • good
    • 0
この回答へのお礼

レスありがとうございました。
御礼遅くなってすみません。

まったくおっしゃるとおりで、なるほどと思いました。今回のケースについては、#1さんのスクリプトを
使わせていただこうと思います。

お礼日時:2005/09/20 10:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報