アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascriptで、クリックすると値が変わるというものを作っています。

クリックすると以下の処理を行います。
●java script側●
form1.hoge.value = 1;

すると、HTMLのhogeの値が変わるというものです。
●HTML側●
<form name='form1'>
 <input size='10' type='text' name='hoge' value='0'>
</form>

しかし、実際には、phpの処理の都合もありまして
●java script側●
form1.hoge[].value = 1;

●HTML側●
<form name='form1'>
 <input size='10' type='text' name='hoge[]' value='0'>
</form>
と、カッコ[]をつけたいのですが、カッコをつけると
javascriptが、エラーになってしまい、うまく動作しません。
エスケープの問題かなと思い form1.hoge\[\].value 等
試しましたが、うまくいきません。
どうすれば、カッコのついたnameに対して、
javascriptが、要求を送ることができるのでしょうか?

A 回答 (4件)

昔からある方法


document.form1.elements['hoge[]'][0].value=1;

DOMを使って
var elms=document.getElementsByName('hoge[]');
elms[0].setAttribute('value', '1');


他の方法
<input name="hoge1">
<input name="hoge2">

としておいて、
JavaScriptは document.form1.hoge1.value=1;
PHPを書き換える。

// $_POSTの上書きはおすすめしません。例として。
$_POST['hoge']=array($_POST['hoge1'], $_POST['hoge2']);
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/08/16 12:06

ifでnameプロパティを判定すればいいんじゃないでしょうか?


下記コードで正常動作することを確認しました。

------
<form name='form1'>
<input size='10' type='text' name='hoge[]' value='0'>
</form>
<script type='text/javascript'>
var input = document.form1.getElementsByTagName('input'), target;
for(var i=0,max=input.length; i<max; i++){
if(input[i].name == 'hoge[]'){
target= input[i];
}
target.value='match!'
}
</script>
------

JavaScript DOMで関連資料が見つかります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/08/16 12:06

結局nameのような型がいい加減なものをつかうと処理が煩雑になると


いうことです。
たとえばnameは性質上ユニークである必要はないためhoge[]が
複数存在する場合も考えられます(とくにhoge[]のような
配列渡しをするばあいなどは)

こんな風な処理をいれるとよいかもしれません。
<script>
function hoge(){
var f=document.getElementById('form1');
var nodes=f.elements['hoge[]'];
if(nodes.length){
for(var i=0;i<nodes.length;i++){
nodes[i].value=1;
}
}else{
nodes.value=1;
}
}
</script>
<form id='form1'>
<input size='10' type='text' name='hoge[]' value='0'>
<input size='10' type='text' name='hoge[]' value='0'>
</form>
<input type="button" value="test" onclick="hoge()">
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/08/16 12:07

エラーになるのは、配列表記のhoge[]と区別できないからだと思われます。



文字列表記で表せる
form1.item('hoge[]').value = 1;
のような方法で指定すればいけるのでは?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/08/16 12:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!