- PR -

【HELP】JavaScriptのオブジェクトの一致を判断する方法

投稿者投稿内容
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-11 18:21
るぱんです。

無知で申し訳ないのですが、掲題の方法を探しております。
宜しくお願いします。

Formは一つだけ使用しています。

コード:
test(form){

}
<table>
<tr>
<td>
<input type="text" name="a" value="" onblur="test(this.form)">        ・・・・(1)
<input type="hidden" name="a1" value="">                              ・・・・(2)
<input type="hidden" name="b1" value="1">                             ・・・・(3)
</td>
</tr>
<tr>
<td>
<input type="text" name="a" value="" onblur="test(this.form)">        ・・・・(1)'
<input type="hidden" name="a2" value="">                              ・・・・(2)'
<input type="hidden" name="b2" value="1">                             ・・・・(3)'
</td>
</tr>
※(1)と(1)'が同じ名前なのは、method="POST"指定で配列で受け取りたいからです。


やりたいこと
1.(1)のテキストボックスに値「1」を入力
2.test()関数の中で(2)のヒドゥンに(1)の値を入力
3.test()関数の中で(3)の値を見て一致していたら関数内部でfalseを取得したい。
4.falseであれば、alertを出したい。

考察:
test()の内部で
1.form.elements.lengthで全体のエレメントの数を取得し、
2.forでループさせてオブジェクトが一致しているかどうかを判断
3.一致していたら、Object.nameを参照し、
4.「a1」から「1」を取得し、
5.「b1」を「b」と「1」を合成し、オブジェクトを一意で取得
6.「a1」と「b1」のvalueを比較し、trueかfalseの判断をしたい

・・・ここで行き詰る。
どうやってObjectが一致するのかを判断するべきであろうか・・・?

「==」
でできるんでしょうか?
nameとvalueだと間違える事も考えうるので思案に暮れています。

お知恵を拝借の程、宜しくお願い致します。
そもそもの作り方がおかしい場合でも容赦なくご指摘願います。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-02-11 19:25
ちょっと意味が分かっていないかもしれません、すみません。。
"a"というフィールドの入力値が"1"だから、"a1"(フィールド名+入力値)という
フィールドに値を入れ、"b1"というフィールドと比較するということでしょうか?
下記のようなコードではいかがでしょうか?
コード:

function test(form){
var i;
var val = form.a[0].value;
for(i=0;i<form.elements.length){
if(form.elements[i].name=="a" + val){
form.elements[i].value = val;
break;
}
}
for(i=0;i<form.elements.length){
if(form.elements[i].name=="b" + val){
if(form.elements[i].value == val){
return false;
}
}
}
}



[ メッセージ編集済み 編集者: taro 編集日時 2005-02-11 19:30 ]
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-12 00:23
引用:

taroさんの書き込み (2005-02-11 19:25) より:
ちょっと意味が分かっていないかもしれません、すみません。。
"a"というフィールドの入力値が"1"だから、"a1"(フィールド名+入力値)という
フィールドに値を入れ、"b1"というフィールドと比較するということでしょうか?
下記のようなコードではいかがでしょうか?


わかりにくくて申し訳ないです。

フィールド3個
a
a1
b1
とあって、
aに入る値は1だけじゃないんです。

a1とb1の中身も可変長のDBのVARCHAR2に格納するデータが入る予定です。
データとオブジェクト名に関係性は一切ありません。

なので困っているのです。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2005-02-12 02:07
引用:

るぱんさんの書き込み (2005-02-11 18:21) より:
るぱんです。

4.「a1」から「1」を取得し、
5.「b1」を「b」と「1」を合成し、オブジェクトを一意で取得
6.「a1」と「b1」のvalueを比較し、trueかfalseの判断をしたい



分かりにくい理由は
  • "「」"が複数の使い方をされている
     ⇒「フィールドの意味」と「値の意味」の両方で使われているため
      "「b」"がフィールド(「b1」または「b2」の誤記)なのか
      値(b)なのかが分かりません。
      そうなってくると、他のところもどうなのかなと思ってしまう。
      同じ記号は、別の意味で使わないほうが無難ですね。
  • 4.の「1」と5.の「1」が同じなのかが分かりにくい
     ⇒4.で取得した値が値(1)だから5.の合成元が「1」となっているのか
      それとは関係なく、固定で「1」なのかが分からない。
      「b」も「1」も固定だとさすがに5.の意味がないと思うので、
      4.で取得した値(1)を5.で使っていると思っています。
      ただ、それならフィールド(b3)、フィールド(b4)、…があるのかなと思いたく
      なりますが、提示された情報を見るとそうでもなさそうだし。。。

ではないでしょうか?


ついでに言うと
引用:

aに入るは1だけじゃないんです。

a1とb1の中身も可変長のDBのVARCHAR2に格納するデータが入る予定です。
データとオブジェクト名に関係性は一切ありません。


の『値』と『データ』は同じ意味でしょうか?
同じ意味なら同じ言葉にしておいたほうが誤解が少ないと思います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-12 02:53
値の一致を調べる方法、というよりもオブジェクトやその値の取得方法のコツを知りたいのではないでしょうか。
formにちゃんと名前がつけてあれば hidden フィールドとかにも簡単にアクセスできます。
また、値の比較、オブジェクトの一致はご認識の通り == で判定できます。
やりたいことそのままかどうかはわかりませんが、以下のコードは参考にならないでしょうか。
コード:
<Script language="JavaScript">
function test(theValue){
document.theForm.a1.value=theValue;
  if(document.theForm.a1.value == document.theForm.b1.value){
  alert("a1とb1は一致します");
  }
}
</Script>
<form name="theForm">
  <input type="text" name="a" value="" onblur="test(this.value)">        ・・・・(1)<br>
  hidden:<input type="hidden" name="a1" value="">                              ・・・・(2)<br>
  hidden:<input type="hidden" name="b1" value="1">                             ・・・・(3)
</form>


JavaScript をごちゃごちゃいじるときはこんなツールを使うと楽です。
・そば
http://yusuke.homeip.net/soba/
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2005-02-12 04:13
主題から外れてしまって非常に申し訳ないのですが。。。

この掲示板に限らず、最近、意思疎通が原因で問題が出てくることが多い気がしていて、何とか意識のずれが少なくできないものかと悩んでいる次第であります。

ネタにして申し訳ないのですが
引用:

るぱんさんの書き込み (2005-02-12 00:23) より:
引用:

taroさんの書き込み (2005-02-11 19:25) より:
ちょっと意味が分かっていないかもしれません、すみません。。
"a"というフィールドの入力値が"1"だから、"a1"(フィールド名+入力値)という
フィールドに値を入れ、"b1"というフィールドと比較するということでしょうか?
下記のようなコードではいかがでしょうか?


わかりにくくて申し訳ないです。

フィールド3個
a
a1
b1
とあって、
aに入る値は1だけじゃないんです。

a1とb1の中身も可変長のDBのVARCHAR2に格納するデータが入る予定です。
データとオブジェクト名に関係性は一切ありません。

なので困っているのです。


私は多分taroさんはaに入る値は1だけとは思っていないと思います。
どこにも1だけと書いていないですし、コード例も1だけを想定しているように見えないからです。
多分、『"a"というフィールドの入力値が"1"だから』というところでそう思われたのではないかと想像していますが、私の理解ではこれはあくまで例として挙げられているものと思っています。

例えば、以下の表現だとどうだったでしょう?
引用:

例えば"a"というフィールドの入力値が"1"の場合、"a1"(フィールド名+入力値)というフィールドに値を入れ、"b1"というフィールドと比較するということでしょうか?もし、"a"というフィールドの入力値が"2"であれば、"a2"というフィールドを使うということでよいでしょうか?
下記のようなコードではいかがでしょうか?


これなら上の誤解が起きにくいと思っているのですが、どうですかね?

日本語は難しいですね。

[ メッセージ編集済み 編集者: ふうた 編集日時 2005-02-12 04:20 ]
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-12 05:06
引用:

ふうたさんの書き込み (2005-02-12 04:13) より:
例えば、以下の表現だとどうだったでしょう?
引用:

例えば"a"というフィールドの入力値が"1"の場合、"a1"(フィールド名+入力値)というフィールドに値を入れ、"b1"というフィールドと比較するということでしょうか?もし、"a"というフィールドの入力値が"2"であれば、"a2"というフィールドを使うということでよいでしょうか?
下記のようなコードではいかがでしょうか?


これなら上の誤解が起きにくいと思っているのですが、どうですかね?

日本語は難しいですね。


申し訳ないのですが、違います。
やろうとしていることは非常に複雑です。

引用:

改良版:
コード:

test(form){

}
<table>
<tr>
<td>
<input type="text" name="a" value="" onblur="test(this.form)"> ・・・・(1)
<input type="hidden" name="a1" value=""> ・・・・(2)
<input type="hidden" name="b1" value="aiueo"> ・・・・(3)
</td>
</tr>
<tr>
<td>
<input type="text" name="a" value="" onblur="test(this.form)"> ・・・・(1)'
<input type="hidden" name="a2" value=""> ・・・・(2)'
<input type="hidden" name="b2" value=""> ・・・・(3)'
</td>
</tr>
※(1)と(1)'が同じ名前なのは、method="POST"指定で配列で受け取りたいからです。
※レコードはMAX1000件




最終的な話
【a1】と【b1】同じ数字を持つhiddenにはどちらかにしか値が入らないようにしたい。
var tempA = "a";
var tempB = "b";
はJavaScript内部で宣言できる。
が、呼ばれたonblurを持つINPUTBOXの次の、「数字を持ったINPUTBOX」の数字は
呼ばれてみないとわからない。
(1)に入力されたら(2)を取得したいのです。
(1)'に入力されたら(2)'を取得したいのです。


そのために・・・
(1)の【a】のテキストボックスにデータ【かきくけこ】が入力された時に、
1.入力された【a】のすぐ後ろにあるhidden【a1】の【value属性】に【かきくけこ】を代入する
2.【a1】と言うhiddenの【name属性】から、【1】と言う数字を取得する
3.【b】と言う文字列とくっつけて文字列【b1】を合成する
4.一意に【b1】を取得する
5.【a1】と言うhiddenの内容と【b1】hiddenの内容は必ずどちらか一方だけが
値を持てる様にしたい。

以上の内容が結果的にできるのであれば、
Objectの一致をしなくても済む方法があるのであればかまいません。

これで御理解頂けましたでしょうか?
【a1】とかの【1】はレコード番号を表し、上から何行目を表すものです。

[ メッセージ編集済み 編集者: るぱん 編集日時 2005-02-12 05:10 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2005-02-12 05:14
立て続けにすみません。
このままだと、ただのうるさい人に見られかねないので。。。

コード:
<html>
  <head>
  <title>test</title>
  </head>
  <body>

<Script language="JavaScript">
function test(theValue){
document.theForm.a1.value=theValue.a[0].value;
document.theForm.a[1].value=theValue.a[0].value;
document.theForm.a3.value=document.theForm.a[0].value+1;
  if(document.theForm.a1.value == document.theForm.b1.value){
  alert("a1とb1は一致します");
  }
}
</Script>
<form name="theForm">
<table>
<tr><td>
<input type="text" name="a" value="" onblur="test(this.form)">
<input type="hidden" name="a1" value=""> 
<input type="hidden" name="b1" value="1"> 
</td></tr>
<tr><td>
<input type="text" name="a" value="" readonly>
</td></tr>
<tr><td>
<input type="text" name="a3" value="" readonly>
</td></tr>
</table>
</form>
</body>
</html>


で試してみれば面白いかと思います。

直接の答えじゃないから、これでもやっぱり、うるさい人疑惑は拭えないですかね?

インギさん>
さっそく、そば1.1を試してみました。いいですね。

スキルアップ/キャリアアップ(JOB@IT)