var文字と数字の判断



0   名前: さんりゅう : 2007/09/11(火) 23:13  ID:lLtNdhUS sub-zH
2つのテキストボックスに'yyyymmdd'の形で日付を打ち込んでもらい、
2つの日付の差が1年を超えたら、
エラーメッセージを出すプログラムを組みたいのですがうまくいきません。
変数をNumber形をしていしたのですがJavascriptにはvar形しかないそうで。。
テキストボックスに入力された値をNumberとして受け取る方法、
もしくは、その他の方法で日付の差を得られる方法を教えてくださいm(_ _)m

var from = document.from.value ;
var to = document.to.value ;
var check = from + 10000;
if(check < to){alert("検索期間は1年以内で入力してください");}



fromとtoはテキストボックス

例)
fromに20050101(2005年1月1日)
toに20070101(2007年1月1日)
と入力されている時、

var check = from + 10000;
の部分でcheckに20060101が代入される形にしたいが。
10000が文字列として認識され、文字列結合される
(checkの中身に"2005010110000"が代入される)

1   名前: NullPo : 2007/09/11(火) 23:13  ID:Gi4nGlfX sub-.G
var from = document.from.value ;
var to = document.to.value ;
var check = to - from;
if(check > 10000){alert("検索期間は1年以内で入力してください");}

2   名前: 元帥 : 2007/09/11(火) 23:13  [URL]  ID:U29FViXT sub-bK
> 変数をNumber形をしていしたのですがJavascriptにはvar形しかないそうで。。
JavaScriptにもはあります。
ただ、変数宣言(var)の際に指定する必要はないってだけで、代入された値によって自動判別されます。
テキストボックスは当然ながら文字列ですよ。

parseInt について調べれば幸せになれるかもしれません。

# toに古い日付が入力されたら、どうするのだろう、と思ってみたり…。

3   名前: 匿名 : 2007/09/11(火) 23:13  ID:k58nPpF. sub-Cz
本題とは無関係なのでスルーしようと思ったが、やはり気になる。

> var from = document.from.value ;
> var to = document.to.value ;

何だこれ。こんな超特殊な条件下のみで通用する省略形ではなく、非省略形で書いてみてくれないか。
// JavaScript 2.0
var from:Integer = Integer (document.forms.item (0).elements.namedItem ('from').value);

4   名前: NullPo : 2007/09/11(火) 23:13  ID:Gi4nGlfX sub-.G
>>3
あれ、普通に動いたけどな。
想像で書き足してみたよ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">

window.onload = function() {
  document.from = document.getElementById("from");
  document.to = document.getElementById("to");
}

function check() {
  var from = document.from.value ;
  var to = document.to.value ;
  var check = to - from;
  if(check > 10000){alert("検索期間は1年以内で入力してください");}
}

</script>
<title>non-title</title>
</head>
<body>

<div>
<input type="text" id="from" value="">
<input type="text" id="to" value="">
<input type="button" value="check" onclick="check()">
</div>

</body>
</html>

5   名前: 匿名 : 2007/09/11(火) 23:13  ID:k58nPpF. sub-Cz
ちょっと脱線だが、

>>4
IE のややこしいルールとの互換性による(だから『超特殊な条件下』と書いた)。
http://msdn2.microsoft.com/en-us/library/ms533023.aspx#Event_Handler_Scopin
<form action="#">
  <p><input name="test1"></p>
  <p>
    <!-- IE:OK, Fx:OK, Op:OK, Sa:OK -->
    <input type="button" value="BUTTON" onclick="alert (test1); ">
    
    <!-- IE:OK, Fx:OK, Op:NG, Sa:NG -->
    <input type="button" value="BUTTON" onclick="alert (document.test1); ">
  </p>
</form>
<form action="#">
  <p><input name="test1"></p>
</form>

<p>
  <!-- IE:NG, Fx:NG, Op:NG, Sa:NG -->
  <input type="button" value="BUTTON" onclick="alert (test1); ">
  
  <!-- IE:NG, Fx:NG, Op:NG, Sa:NG -->
  <input type="button" value="BUTTON" onclick="alert (document.test1); ">
</p>

IE only:
<script type="text/javascript" for="button" event="click()">
alert (test1);           // [object]
alert (document.test1);  // undefined
</script>

<form action="#">
  <p><input name="test1"></p>
  <p><input type="button" value="BUTTON" id="button"></p>
</form>
<p><input type="button" value="BUTTON" id="button"></p>

<form action="#">
  <p><input name="test1"></p>
  
  <script type="text/javascript" for="button" event="click()">
alert (test1);           // Error
alert (document.test1);  // undefined
  </script>
</form>

こんなルールを覚えるくらいなら、非省略形の方がずっとマシだと思う。

6   名前: NullPo : 2007/09/11(火) 23:13  ID:Gi4nGlfX sub-.G
>>5
あなたが予測したコードはわかったけれど、>>0のコードからはそう記述したことが読み取れない。
> var from = document.from.value ;
> var to = document.to.value ;
この記述がどんな場合でも必ず省略形であることを示さなければ、超特殊な条件下でしか動作しないとは言えないのではあるまいか。

で、その反証が>>4のコードのつもり。

7   名前: 匿名 : 2007/09/11(火) 23:13  ID:k58nPpF. sub-Cz
>>6
>>4 は「document のプロパティとして、フォームコントロールへのショートカットを独自に作成する」という意味で、>>5 以上に特殊な「省略形」と言える。暗黙の同意を得られるような周知されたテクニックでもない。

スレ主の説明なしに、こんな超特殊ケースを考慮に入れる必要を感じない。むしろ、スレ主が IE/Fx による特殊ルールを理解しないまま使っている可能性の方が高いと判断し、>>3、>>5 を書いた。

この議論が示すように、こういう基礎 API レベルで意思疎通ができないのでは話にならない。だから私は常々「省略形を使うな」「標準オブジェクトを拡張するな」と主張している(標準オブジェクトを拡張するのは、それが周知されている場合と、それが外部に影響を与えない方法が存在する場合と、逆にそれによって全ての動作が「ならされる」場合に限る)。

8   名前: 匿名 : 2007/09/11(火) 23:13  ID:k58nPpF. sub-Cz
ついでに言えば、>>4 はメモリリークしうるので、IE6 が消滅するまであと数年は避けるべき。

9   名前: NullPo : 2007/09/11(火) 23:13  ID:Gi4nGlfX sub-.G
>>7
documentオブジェクトのプロパティを拡張すると省略形になるだなんて、初めて知った。
その理屈だと変数に格納したら何もかも省略形になってしまう。

自分の主張を根拠とした批判は適切ではないと思う。

>>8
>>4のコードだけならならないと思う。
拡張したときは適切に変更したらいいのではないか。

10   名前: NullPo : 2007/09/11(火) 23:13  ID:Gi4nGlfX sub-.G
>>7
http://www.tagindex.com/cgi-lib/bbs/patio.cgi?mode=view2&f=146&no=210

11   名前: さんりゅう : 2007/09/11(火) 23:13  ID:msIyeY7k sub-6m
返信遅れてすいませんm(_ _)m

回答ありがとうございます、
解決出来ました。
マイナス思いつかなかった…


ソースは解りやすいよう疑問箇所だけに、
省略して書いたつもりだったんだけど。。
脱線させてしまったみたいで@@;

とりあえず、
ありがとうございましたm(_ _)m

一覧へ戻る