- PR -

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

投稿者投稿内容
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-12 05:22
引用:

インギさんの書き込み (2005-02-12 02:53) より:
コード:
<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>




御指導ありがとうございます。
項目【a】から項目【a1】を取得する際に、
form.elements.lengthを使用してループさせつつ、【a】を取得しようかと考えてました。
プロトタイプを作ったのですが、煮詰まっています。
コード:
※このコードはエラーが出ます。
<html>
<head>
<title></title>
</head>
<script>
function test(form){
//alert(form.elements.length);
boolean bl_temp;
bl_temp = false;
var tempValue ;
var object;
var name = "";
var name1 = "";
var index = "";
    for(i = 0; i < form.elements.length; i++){
        if(bl_temp == true){
            name = form.elements[i].name;
            form.elements[i].value = tempValue;
            object = form.elements[i];
            index = name.replace(name,"");
            bl_temp = false;
            continue;
        }
        if(object == form.elements[i]){
            bl_temp = true;
            name1 = form.elements[i].name;
            tempValue = form.elements[i].value;
        }
    }
var next = "b" + index;
    if(form.element(next).value == form.element(name).value){
        alert("a");
    }
    
}
</script>
<body>
<form name="alpha">
<table border="0">
<tr>
<td>
<input type="text" name="a" onblur="test(this.form)"></input>
<input type="text" name="a1" value=""></input>
<input type="text" name="b1" value="aiueo"></input>
</td>
</tr>
<tr>
<td>
<input type="text" name="a" onblur="test(this.form)"></input>
<input type="text" name="a2" value=""></input>
<input type="text" name="b2" value="aiueo"></input>
</td>
</tr>
<tr>
<td>
<input type="text" name="a" onblur="test(this.form)"></input>
<input type="text" name="a3" value=""></input>
<input type="text" name="b3" value="aiueo"></input>
</td>
</tr>
<tr>
<td>
<input type="text" name="a" onblur="test(this.form)"></input>
<input type="text" name="a4" value=""></input>
<input type="text" name="b4" value="aiueo"></input>
</td>
</tr>
</table>
</form>
</body>
</html>


_________________
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-12 06:42
さて、こんなのは参考になるでしょうか。
idのネーミングルールを工夫すればオブジェクトの取得が楽になるかも、という考えです。
コード:

<Script language="JavaScript">
function test(theValue){
alert(document.getElementById(theValue.id+"Hidden").value);
}
</Script>
<form name="theForm">
<input type="text" name="a" value="" onblur="test(this)" id="firstOne"><br>
<input type="hidden" name="a1" value="foo" id="firstOneHidden"><br>
<br>
<input type="text" name="a" value="" onblur="test(this)" id="secondOne"><br>
<input type="hidden" name="a1" value="bar" id="secondOneHidden"><br>
</form>



ふうたさん:
「そば」お試し頂きありがとうございます。まだまだ改良の余地はありますがご活用頂ければ幸いです。


[ メッセージ編集済み 編集者: インギ 編集日時 2005-02-12 06:51 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2005-02-12 06:51
また、叱られるかもしれませんが、以下の質問に(心の中でよいので)Yes/Noでお答えいただければと思います。(掲示板上でご回答いただけると本当はありがたいのですが。)
  1. 聞くまでもないと思いますが、正しい答えを早く得たいですよね?
  2. (1の答えがYesの場合)そのためにお互いに思っていることを相手に正しく伝える必要がありますよね?
  3. (2の答えがYesの場合)そのために文章を正しく書く/相手の文章を正しく理解する必要がありますよね?
  4. (1または2の答えがNoの場合)原因を教えていただくことはできますか?
  5. (1または2の答えがNoの場合)対処法を教えていただくことはできますか?
  6. 逆に聞きますが、(今回の件に限らず)正しい答えを早く得られていると思いますか?
  7. (6の答えがNoの場合)その原因は回答者に回答能力がないからだけと思いますか?
  8. お互いに思っていることが相手に正しく伝わっていると思いますか?
  9. (8の答えがNoの場合)お互いの文章を見直す必要があると思いますよね?
  10. (9の答えがNoの場合)では、どうしたらよいか教えていただくことはできますか?
  11. (9の答えがYesの場合)文章を見直すために私が2005-02-12 04:13に提起した議論は無意味でしょうか?
  12. (11の答えがYesの場合)では、このままでよいと思いますか?
  13. (12の答えがNoの場合)では、どうしたらよいか教えていただくことはできますか?
  14. 下記の『違いますか』は、『これなら上の誤解が起きにくいと思っているのですが、どうですかね?』の答えがNoということでしょうか?
    引用:

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

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

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


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

    日本語は難しいですね。


    申し訳ないのですが、違います。





以上です。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-02-12 09:57
複雑すぎて外しまくるかもしれませんが・・・

とりあえず、
コード:
<input type="text" name="a[]">


こういう風にしないと、サーバ側では配列として受け取ってくれなかったような気がします。
あと、Objectが一致しているかどうかを == で調べられないなら、uniqueIDの一致を調べるという方法もあります(IE限定)

※「複雑すぎる」問題は、簡単な問題に切り分けるようにした方が、切り分ける過程で問題が解ける事もあるし、回答者への負担も軽くなります。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-12 10:34
引用:

ふうたさんの書き込み (2005-02-12 06:51) より:
また、叱られるかもしれませんが、以下の質問に(心の中でよいので)Yes/Noでお答えいただければと思います。(掲示板上でご回答いただけると本当はありがたいのですが。)
  1. 聞くまでもないと思いますが、正しい答えを早く得たいですよね?
  2. (1の答えがYesの場合)そのためにお互いに思っていることを相手に正しく伝える必要がありますよね?
  3. (2の答えがYesの場合)そのために文章を正しく書く/相手の文章を正しく理解する必要がありますよね?
  4. (1または2の答えがNoの場合)原因を教えていただくことはできますか?
  5. (1または2の答えがNoの場合)対処法を教えていただくことはできますか?
  6. 逆に聞きますが、(今回の件に限らず)正しい答えを早く得られていると思いますか?
  7. (6の答えがNoの場合)その原因は回答者に回答能力がないからだけと思いますか?
  8. お互いに思っていることが相手に正しく伝わっていると思いますか?
  9. (8の答えがNoの場合)お互いの文章を見直す必要があると思いますよね?
  10. (9の答えがNoの場合)では、どうしたらよいか教えていただくことはできますか?
  11. (9の答えがYesの場合)文章を見直すために私が2005-02-12 04:13に提起した議論は無意味でしょうか?
  12. (11の答えがYesの場合)では、このままでよいと思いますか?
  13. (12の答えがNoの場合)では、どうしたらよいか教えていただくことはできますか?
  14. 下記の『違いますか』は、『これなら上の誤解が起きにくいと思っているのですが、どうですかね?』の答えがNoということでしょうか?
    引用:

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

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

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


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

    日本語は難しいですね。


    申し訳ないのですが、違います。





以上です。



感情的になられたのでしたら申し訳ないです。
結論から申し上げます。
14でyesにたどり着きました。
その対処法として、
僕がした質問の本質とかけはなれるのであれば引いて頂ける様お願い致します。

先に僕が「違う」と申し上げたのは、
僕が提示した仕様と食い違っているのです。

質問しておきながら大変な失礼に当たるのですが、何卒お願い致します。
それにはそれなりに理由があります。

引用:

ふうたさんの書き込み (投稿日時: 2005-02-12 02:07) より:
主題から外れてしまって非常に申し訳ないのですが。。。

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

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


1.この議題は主題から外れています。
2.この議題に関して、僕は問題提起はしていません。
3.ネタにされている。←コレはコレで大変無礼と感じました。
4.「意識のずれ」を今現在僕は意識していません。
引用:

ふうたさんの書き込み (投稿日時: 2005-02-12 04:13) より:
分かりにくい理由は

"「」"が複数の使い方をされている
 ⇒「フィールドの意味」と「値の意味」の両方で使われているため
  "「b」"がフィールド(「b1」または「b2」の誤記)なのか
  値(b)なのかが分かりません。
  そうなってくると、他のところもどうなのかなと思ってしまう。
  同じ記号は、別の意味で使わないほうが無難ですね。

4.の「1」と5.の「1」が同じなのかが分かりにくい
 ⇒4.で取得した値が値(1)だから5.の合成元が「1」となっているのか
  それとは関係なく、固定で「1」なのかが分からない。
  「b」も「1」も固定だとさすがに5.の意味がないと思うので、
  4.で取得した値(1)を5.で使っていると思っています。
  ただ、それならフィールド(b3)、フィールド(b4)、…があるのかなと思いたく
  なりますが、提示された情報を見るとそうでもなさそうだし。。。

ではないでしょうか?


5.「」は配列記号[]とは別物であると考えています。
6.わかりにくい仕様に対する使用の理解を前提とした質問をしているのではなく、評論されている。
7.上記の時点で「投稿日時: 2005-02-12 06:51」のような質問をされていたのであれば溝は埋まっていると考えています。

以上の理由によって、このスレでは申し訳ないのですが
このまま「仕様とはなんぞや」に
突っ込まれるのであれば引いて頂ける様お願い致します。

別のスレでしたら参加させて頂きます。

■以下質問に対する回答
1.no
2.yes
6.no
7.no
8.no
9.yes
11.条件付yes
→この場合はどのようにしたら良いですか?
14.yes

■以下を別のスレで引用して頂けるとありがたいですが・・・。
引用:

ふうたさんの書き込み (投稿日時: 2005-02-12 04:13) より:
また、叱られるかもしれませんが、・・・


叱る程のことではありません。怒っていませんし、冷静なのですが・・・。汗

逆に質問させて下さい。
Q1.このスレの本質はなんでしょう?
A:JavaScriptでObjectを一致させる手段を探す。
B:要求仕様のわかりやすさとは何かを具体例を交えて討論する。

Q2.ふうたさんが問題提起した内容はなんでしょう?
A:JavaScriptでObjectを一致させる手段を提示する。
B:要求仕様をわかりやすくするためにはどうしたらよいかを提案(?)する。

Q3.スレ「でっかいことしてみませんか?(OFF企画)」でヒューマンスキル系について興味を示されているようですが、今回の件で話に齟齬が起きているのは何が原因だと思いますか?(極論ですがお願いします。)
A:説明が足りないのがいけない
B:仕様がわからないのがいけない
C:わかりにくい仕様自体がいけない
D:会話が成り立っていないのがいけない
E:原因はどうでも良くて、相手が悪い

このスレにおいては僕は全てに関してAのスタンスを取っています。
そうしないと、僕自身の問題が解決しないからです。
ご理解の程、お願い申し上げます。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-12 16:53
引用:

冬寂さんの書き込み (2005-02-12 09:57) より:
複雑すぎて外しまくるかもしれませんが・・・

とりあえず、
コード:

<input type="text" name="a[]">


こういう風にしないと、サーバ側では配列として受け取ってくれなかったような気がします。
あと、Objectが一致しているかどうかを == で調べられないなら、uniqueIDの一致を調べるという方法もあります(IE限定)

※「複雑すぎる」問題は、簡単な問題に切り分けるようにした方が、切り分ける過程で問題が解ける事もあるし、回答者への負担も軽くなります。



<input type="text" name="a">
<input type="text" name="a">
<input type="text" name="a">
<input type="text" name="a">

コード:

String[] a = form.getA();


で取得できる事を確認致しました。
お気遣いありがとうございます。(^^

[ メッセージ編集済み 編集者: るぱん 編集日時 2005-02-12 16:54 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2005-02-12 17:00
引用:

るぱんさんの書き込み (2005-02-12 10:34) より:
感情的になられたのでしたら申し訳ないです。



私も感情的にはなっていません。そのように受け取られてしまう表現になってしまったことをお許しください。


引用:

1.この議題は主題から外れています。
2.この議題に関して、僕は問題提起はしていません。
3.ネタにされている。←コレはコレで大変無礼と感じました。
4.「意識のずれ」を今現在僕は意識していません。


1と3に関しては、私が軽率でした。申し訳ありません。

仰られているとおり、確かに別のスレッドを立てるべきでした。
http://jibun.atmarkit.co.jp/scenter/bbs/viewtopic.php?topic=18990&forum=21&0
に頂いているご質問に回答しております。

ただ、価値観がかなり違うので共通解が見つからない気がしています。もし、無意味と思われていると言うことであれば、これで終わりにしたいと思います。ちなみに私は無意味と思っていません。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-12 18:58
結論:
JavaScriptの
Objectは【==】の判断結果のtrue、falseで一致しているかどうかを判断できる。

皆様ご協力ありがとうございました。
_________________

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