- PR -

JAVA SCRIPT

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-07 13:37
引用:

zzzさんの書き込み (2003-10-07 12:11) より:

まずJittaさんに対するお答えですが、恥ずかしながら色々と調べているのですが前任者の消息が不明とのことで確認できない状況です。
しかし、あるテーブルがありその中で連続してindexがつけられていないといった感じです。(力不足でここまでしか、ソースから読み取れません。すみません)


 自分が理解できていないものを人に説明して、理解してもらうのは無理だと思うのですが・・・。この場合、既存システムが「何をどのように返すか」をきちんと把握していないと、後で困ることがたくさん出てくると思うのです。

 質問は複数あったのですが、、、

1.「テキストボックスに入力されるべき値 − インデックス」という表があるということでしょうか?
→これがわからない、ということですね?

2.そして、{自動的に値が計算される}のは、入力に対するインデックス値なのでしょうか?つまり、入力した値がすでに登録されているならマイナス、登録されていなかったらプラスの値としてインデックスが返ってくる、ということでしょうか?
→これをきちんと押さえていないと、とても困ると思うのですが、如何?

3.zzzさんの目標は「ユーザの入力値によって既存システムから返ってくる値による制御」ですか?
→{<INPUT TYPE="text" SIZE="3" NAME="INVENTORY" VALUE="<%=InventoryOut[i]%>">}より、{zzzさんの目標は「ユーザの入力値によって既存システムから返ってくる値による制御」}と判断します。


 JavaScriptは詳しくないのですが、{<%=InventoryOut[i]%>}は、どこかで定義しているInventoryOut配列のi番目を埋め込む、ですよね。InventoryOut配列が既存システムからの戻り値として、iはどうやって決まりますか?配列で返ってきていても、このソースでは、テキストボックスに表示/設定できる値は1個ですよね?であれば、inputタグのonchangeイベントに、takuさんがご提示されたソースのdoUpdateメソッドを関連付ければいけると思いますが???

 逆に、1つだけでなく複数である場合、「正と負」という相反する値が設定された場合、どうしますか?
ゆう
ベテラン
会議室デビュー日: 2003/06/20
投稿数: 56
投稿日時: 2003-10-07 14:27
こんにちわ。いつもお世話になっております。

引用:

zzzさんの書き込み (2003-10-07 12:11) より:
takuさんは先程<input type="text" name="param">のように一つの値を想定されていたと思いますが、自分のやりたいこととしましては
<INPUT TYPE="text" SIZE="3" NAME="INVENTORY" VALUE="<%=InventoryOut[i]%>">
のような形です。
これを、制御するJavaScriptがわかる方からのアドバイスをお待ちしております。



INPUTのところですが、VALUEのところはPHPで書いているように思えるのですが
もしかして

コード:

<?php
$count = sizeof( $InventoryOut );
for ( $i = 0; $i < $count; $i++ ) {
print ("<INPUT TYPE=\"text\" SIZE=\"3\" NAME=\"INVENTORY\" VALUE=\"$InventoryOut[$i]\">");
}
?>



のようなことをおっしゃられているのでしょうか?
このようにしてデータの個数に応じてテキストボックスの数が変わる場合に、
チェックするテキストボックスの個数を動的に変えたいということでしょうか?
#私にはそう読み取れたのですが…

もしそうであっても、takuさんの提示されたコードを
応用してあげればできるような気がします。

#コードを修正
#JSPを知らない私にはPHPに似てるなぁとしか思えませんでした
#<%=〜〜%>の時点でおかしいなぁとは思ったのですが……。
#的外れな回答をしてスレ汚し失礼しました。

[ メッセージ編集済み 編集者: ゆう 編集日時 2003-10-07 14:33 ]

[ メッセージ編集済み 編集者: ゆう 編集日時 2003-10-07 16:42 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-10-07 14:43
ども、ほむらです。
こんな感じですか?応用で何とかなりません?
-------
コード:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
<meta http-equiv="Content-Script-Type" content="text/javascript"/>
<script type="text/javascript">
//<!--
function validate(v){
	if( v.indexOf("-") != -1 ){
		// 負の数字マイナスがあればここにくる
		document.all.updateButton.disabled = true;
		return false;
	}
	return true;
}
function doUpdate(){
	var ele = document.all.f;    // Formのエレメント
	var num = ele.number.value;  // 消費量
	var stock = ele.stockorg.value; // 在庫数
	var i; // カウンタ
	var e; // 経過在庫のエレメント単数
	document.all.updateButton.disabled = false; // 計算前にボタンの押下可能に
	for(i=0; i<ele.process.length; i++){ // 経過在庫のエレメント数分
		e = ele.process(i); // 経過在庫 作業用
		e.value = stock;    // 在庫数の更新
		// 在庫数のチェック
		// 負の数字であれば更新ボタンを無効にする
		validate(e.value);
		stock -= num; // 在庫を消費量分へらす
	}
	return true;
}
// -->
</script>
<style type="text/css">
input.stock{ background-color:#c0c0c0; }
</style>
</head>
<body>
<form action="#" id="f">
消費基本量:<input type="text" value="0" id="number" tabindex="10" size="5" maxlength="4" onChange="doUpdate();" /><br/>
現在の在庫:<input type="text" value="40" id="stockorg" tabindex="20" size="5" maxlength="4"  onChange="doUpdate();" /><br/>
経過1在庫:<input type="text" class="stock" id="process" size="5" maxlength="4" readonly="readonly" /><br/>
経過2在庫:<input type="text" class="stock" id="process" size="5" maxlength="4" readonly="readonly" /><br/>
経過3在庫:<input type="text" class="stock" id="process" size="5" maxlength="4" readonly="readonly" /><br/>
経過4在庫:<input type="text" class="stock" id="process" size="5" maxlength="4" readonly="readonly" /><br/>
<input type="submit" tabindex="30" id="updateButton" disabled="disabled" value="update" />
</form>
</body>
</html>

未記入
常連さん
会議室デビュー日: 2003/08/28
投稿数: 28
投稿日時: 2003-10-07 16:23
書き込みをしてくださった、皆さんどうもありがとうございます。
自分の書き方(伝え方)が不味かったために、色々と勘違いを与えてしまったようで、すいませんでした。自分で書くのも何ですが、やりたいことはいたって簡単です。
それは現在システムの画面はJSPで作成されています。そのJSPに以下のようなタグが書かれております。
<INPUT TYPE="text" SIZE="3" NAME="INVENTORY" VALUE="<%=InventoryOut[i]%>">
この時、このテキストの値をチェックするためのjavaScriptを作成したいのです。
通常、一つのテキストボックスでの場合はtakuさんに教えて頂いたとおり次のようなスクリプトを作成すると思います。
<script language="JavaScript">
<!--
function doUpdate(){
if(parseInt(document.form1.inventory.value)<0) return;

document.form1.submit();
}
-->
</script>
</head>
<body>
<form name="form1">
<input type="text" name="inventory">

ここまではわかるのですが、これが先のように配列要素になると同じように実行できない状況です。
これを、takuさんの書かれていたように連結して
<input type="text" name="param"><br>
<input type="text" name="param">
書くことは、今回のシステムではできませんでした。
そして、Jittaさんが書かれていたタグの中にイベントを書くという方法も試してみましたが実現できませんでした。
わかる方からすればものすごく単純でつまらない処理でしょうが、少し時間のこともあり
とても困っております。
以上、アドバイスを待っております。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-10-07 16:38
 え・・・。
JSPが
><INPUT TYPE="text" SIZE="3" NAME="INVENTORY" VALUE="<%=InventoryOut[i]%>">
ということは、HTMLとして展開されると
<INPUT TYPE="text" SIZE="3" NAME="INVENTORY" VALUE="">
             ・
             ・
<INPUT TYPE="text" SIZE="3" NAME="INVENTORY" VALUE="">
となるだけですよね?
これって私のサンプルと同じですよ。
JSPがどうこうじゃなくて、
展開されたHTMLがどうなっているかです。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2003-10-07 16:42
ほむらさんがかかれているように
コード:
<script language="JavaScript"> 
<!-- 
function doUpdate(){ 
var i=0;
	for(i=0; i<document.form1.inventory.length; i++){
		if(parseInt(document.form1.inventory[i].value)<0) return; 
	}
document.form1.submit(); 
} 
--> 
</script> 


とやればいいはずです
ちなみに件数が1件の時はLengthがないので失敗します・・・
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-10-07 17:14
ども、ほむらです。
経緯とかやりたい事はおおむねわかるので良いのですが
結局その中で何が原因で何が出来ないのですか?
あとシステムとしてやってはいけない(都合で出来ない)ことはなんですか?
あとは、状況の説明よりも内容の説明がほしいところです。
-------
重複するIDは使用が出来ないようなのでDIVを使用して
自動更新する部分を全て処理する形に修正しました。
以下、差分です
コード:

function doUpdate(){
var ele = document.all.auto; // DIVのエレメント
var num = document.all.f.number.value; // 消費量
var stock = document.all.f.stockorg.value; // 在庫数

var i; // カウンタ
var e; // 経過在庫のエレメント単数
document.all.updateButton.disabled = false; // 計算前にボタンの押下可能に
// DIVの子エレメントすべてを走査する
for(i=0; i<ele.children.length; i++){ // 経過在庫のエレメント数分
if( ele.children(i).tagName == "INPUT" ){ // INPUTエレメントのみ処理
e = ele.children(i); // 経過在庫 作業用
e.value = stock; // 在庫数の更新
// 在庫数のチェック
// 負の数字であれば更新ボタンを無効にする
validate(e.value);
stock -= num; // 在庫を消費量分へらす
}
}
return true;
}


コード:

<div id="auto">
経過1在庫:<input type="text" class="stock" size="5" maxlength="4" readonly="readonly" /><br/>
経過2在庫:<input type="text" class="stock" size="5" maxlength="4" readonly="readonly" /><br/>
経過3在庫:<input type="text" class="stock" size="5" maxlength="4" readonly="readonly" /><br/>
経過4在庫:<input type="text" class="stock" size="5" maxlength="4" readonly="readonly" /><br/>
</div>



#書き忘れ。。
if( ele.children(i).tabindex == undefined ){
}
というのが必要になるかも


[ メッセージ編集済み 編集者: ほむら 編集日時 2003-10-07 17:21 ]
eiji
常連さん
会議室デビュー日: 2003/07/23
投稿数: 32
投稿日時: 2003-10-07 18:03
やり方は、多々あるとは思いますが、簡単な方法を以下に記述します。
※未実行なので、間違っていたらごめんなさい。

1.一覧の項目を取得するのによくやる手は、TEXTの要素に全て別名をつけてしまう方法。
 このあたりが一番簡単でブラウザの依存がないと思います。
<% int cnt = 5; %>
<script type="text/javascript">
<!--
function aaa() {
for(i=0; i<<%= cnt %> ; i++) {
/* こんな感じに取得する
eval("document.forms[0].a" + i).value;
*/
}
}

-->
</script>

<!-- 一覧のライン数(この値を元にserver側でも、nameを動的に作成して取得する。) -->
<input type="hidden" name="cnt" value="<%= cnt %>">
<% for (int i=0; i<cnt; i++) { %>
<input type="text" name="a<%= i %>" value="<%= i %>">
<% } %>


2.要素を配列として扱う。
 (サーバーでの取得方法(多分順序は保障されないはずです。)や、
javaScriptでのオブジェクト/配列の判定等々が発生します。)
<script type="text/javascript">
<!--
function aaa() {
if (document.forms[0].a.tyep==null) {
for(i=0; i<ocument.forms[0].a.length ; i++) {
/* こんな感じに取得する
document.forms[0].a[i].value;
*/
}
} else {
document.forms[0].a.value;
}
}

-->
</script>


<% for (int i=0; i<cnt; i++) { %>
<input type="text" name="a" value="<%= i %>">
<% } %>


HTMLに詳しければ、ほむらさんのソースをお勧めします。


[ メッセージ編集済み 編集者: eiji 編集日時 2003-10-07 18:03 ]

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