
環境:XP SP2, IE6/php, html, javascript
submitした際にjavascriptの関数(getNo())が呼ばれ、その関数内で代入ができず参っています。
.php
-----
<?
$setNo = [111,222,333,444,555];
for($i=0;$i<5;$i++) {?>
<input type="text" name="no[<?=$i;?>]" value="<?=$setNo[i];?>" id="no">
<?}?>
(submit省略)
.js
-----
function getNo(obj)
{
var orgNo = document.all("no");
var bufNo = ""; //初期化空
//var bufNo ; //初期化しないと※1
//var bufNo = "huga";//初期化"huga"※2
for(var k=0; k<orgNo.length; k++)
{
alert(orgNo[k].value);//k=0なら111と表示される
bufNo = orgNo[k].value;//代入してるのに
alert(bufNo='+bufNo); //空のまま →代入されてない なぜ??
//alert(bufNo='+bufNo);//※1undefined→代入されてない
//alert(bufNo='+bufNo);//※2huga→代入されてない
alert(orgNo='+orgNo[k].value);//k=0のときなら111と表示される
}
.jsには他にもsubmitから呼ばれている関数があり
それらは正常に動作しますが、この関数だけおかしいので
書き直してみたりしましたが改善されません。
また、関数内で配列も宣言してますが、
配列要素にfor文のiなどを[i]のようにいれても、配列の値がうまく変数に代入できません。
ただし、[0]や[2]と指定すると正しい値が表示され、代入もできます。
undefinedになることが問題なのではなく
代入されない理由がわかりません。
どういうことになっているのか教えてください。
No.5ベストアンサー
- 回答日時:
//var bufNo ; //初期化しないと※1
それから、今件とは直接関係ないですが、エラーになるならないにかかわらず、初期化はしたほうがいいですよ。
何もしなくても undefined を代入してくれるので 昔見たく、ゴミが入るということはないと思いますが、変数が多態になったおかげで、型指定を怠ってつまらないエラーを起こしてしまうこともありえます。
var v;
v[0] = 3; // エラー
オブジェクト、又は配列でもないのに添え字でアクセスしていることが原因。
No.4
- 回答日時:
>現状は、IEのエラーで「'k'は宣言されていません」というエラーが出るようになりました。
可能性としては orgNo['k'].value となってる、または、k のプロパティにアクセスしてる(エラー内容から見てこちらの可能性は低い)。.js も PHP で吐き出してないですか。
とりあえず、エラー行数みて、ほんとに for(var k=0; k<orgNo.length; k++) ここで起きてるのか確認してみてください。
サンプルコードもなるべくちゃんと閉じたものを提示していただいたほうがいいと思います。 } だけでなく、alert(bufNo='+bufNo); → alert('bufNo='+bufNo);とかも。
No.3
- 回答日時:
ごめ。
訂正。while(inputElement = obj.elements['['+(i++)+']']){
↓
while(inputElement = obj.elements['no['+(i++)+']']){
この回答への補足
ご指摘ありがとうございます。改修している身としては現状で正常動作している部分を書き変えたくはないのでやれるところは参考にさせていただきましたが、まだ改善していません。
昨日が動いてた部分が、今日は動かなかったりとまったく手がつきません。ただ、追加した部分を除くと正常動作しますので、追加した部分の問題であるとは思います。
jsでvar宣言しているのに、宣言されていませんとIEが判断するのはどういうことからなんでしょうか。
他の方が指摘されている「同期」も気になりますが、そちらも今ひとつ掴めていません。
No.2
- 回答日時:
まずは、PHP で正しい HTML が出力されているか確認されてはいかがでしょうか?
まず、PHP の書き方なんですが、PHP では "" または、echo <<< EOM の内部の変数は展開してくれるので、途中で区切る必要はないです。
区切りたい場合は
<?php for($i=0; $i<len; ++$i) : ?>
<input type="text" name="" value="">
<?php endfor; ?>
のようにします。
http://www.php.net/manual/ja/control-structures. …
今の場合は、変数の内容も出力したいということなので、printfを使うとスマートにかけるかと思います。
<?php // short tag を使用すると XHTML でエラーになるので、極力使用しないほうがいいかもしれません。
$setNo = array(111,222,333,444,555);
for($i=0;$i<count($setNo);$i++){
printf('<input type="text" name="no[%d]" value="%d">', $i, $setNo[$i]);
}
?>
# PHP で $setNo = [111,222,333,444,555]; のように配列作成ってできるんですか?
次に HTML ですが、重複する id は つけられないので、別の id をつける必要があります。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401 …
document.all['no'][0] の書き方もサポートしてくれているようですが、正しい使い方とはいえないでしょう。
そもそも document.all は後方互換プロパティなので、通常は document.getElementById を使用し、サポートしてないようなら document.all としたほうがよいでしょう。
フォーム要素なら、form.elements['no[0]'] などで拾えるので、id をふる必要すらないでしょう。
function getNo(obj){ // obj = form? form として話を進めます。
var inputElement = null;
var i = 0;
while(inputElement = obj.elements['['+(i++)+']']){
alert(inputElement.name);
}
}
No.1
- 回答日時:
PHP出力部分と同期が取れてないのではないでしょうか?
全体の流れが見えませんが、
inputデータ書き出しが完了してない時点で、
bufNo = orgNo[k].value;
が実行されているのでは?
alert(orgNo[k].value)文は代入文より時間がかかるので、
たまたま、書き出しが完了後の値が拾えている?
この回答への補足
早々にご回答頂き助かります。
同期・・・以前も別件でこちらで質問させて頂いた時も同期のことを言われました。その辺りが勉強不足のようです。
仰る意味は理解しましたので、早速調べてみます。
まだ解決に至りません。
現状は、IEのエラーで「'k'は宣言されていません」というエラーが出るようになりました。
for(var k=0; k<orgNo.length; k++)
の部分だと思われるのですが、varで宣言しているのに何故でしょうか。
※質問の.jsの部分のfunctionの終わり括弧が抜けていますが、PGは正しく書いてあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GASでチェックボックスを一括of...
-
スマホ上で、左右スワイプで次...
-
Cookieに保存されない
-
初心者です。gulpでコンパイル...
-
Adobe acrobat proでフォームを...
-
画面遷移を行わずに同一ページ...
-
変数宣言と初期値代入の場所に...
-
switch文のswitch(n)の部分を複...
-
jsでは、'で区切った部分を改行...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
jqueryのselect2で検索欄の文字...
-
jsonテキストデータの並び替え...
-
初心者です。gulpでコンパイル...
-
ラジオボタンを複数選択したと...
-
階層別の組織図の自動作成について
-
jQueryで同じクラス名のものを...
-
二次元配列を使って順位をだす...
-
読み込んだQRコードをフォーム...
-
画面遷移を行わずに同一ページ...
-
セレクトを全て選択されていな...
-
【Google Apps Script】「ライ...
-
Adobe acrobat proでフォームを...
-
二次元配列の全要素の全要素を...
-
【GAS】WEBアプリでハイパーリ...
-
GASでGoogleフォームの自動返信...
-
フォームが空欄の時にフォーム...
-
セレクトボックスで配列を呼び...
-
イラストレーター、縦中横のシ...
おすすめ情報