0

月用、日用、年用の 3 つの選択があります。3 つの選択のうちの 1 つが変更されたときにテキスト入力ボックスを更新する基本的な JS があります。

HTML:

<select name="month" class="month" onchange="setDate(this,day,year)">
    <option value="1">January</option>...
</select>
<select name="day" class="day" onchange="setDate(month,this,year)">
    <option value="1">1</option>...
</select>
<select name="year" class="year" onchange="setDate(month,day,this)">
    <option value="2012">2012</option>...
</select>
<input type="text" name="hidden" value="" />

これは問題なく動作していますが、これら 3 つの入力の別のセットを追加したいと考えています。これを行うと (上記の HTML の別のコピーを作成します)、どちらも機能しません。つまり、選択が変更 (選択) されたときに、テキスト入力ボックスが更新されていないか、日付が指定されていません。

JavaScript (関連部分):

function setDate(month_selection, day_selection, year_selection)
{
    //Month, Day and Year variables created

    form.hidden.value = month + '/' + day + '/' + year;
}

上記のHTMLのコピーが1つしかない場合にのみ機能する理由と、これらの選択を2セット持つことができるようにこれを修正する方法についてのアイデアはありますか?

編集: HTML の「コピー」ごとに入力と選択に異なる名前を付けることで、問題を修正しました。

どの入力が変更されているかに応じて、正しいテキスト ボックスを更新する方法という新しい問題が発生しています。

これを setDate 関数の最後に置くと:

form.hidden.value = month + '/' + day + '/' + year;
form.hidden_two.value = month + '/' + day + '/' + year;

いずれかが変更されると、両方のテキスト ボックスが更新されます (明らかに)。正しいテキスト ボックスを更新する方法を知っている人はいますか?

4

1 に答える 1

0

ちょっと考えただけですが、新しい入力の名前を変更していますか? 「隠し」入力ボックスが 2 つある場合は、機能しません。

新しい物 :

もちろん、月、日、年、非表示のすべてのフィールドの名前を変更する必要があります。次に、JS 関数内で、どのフィールド変更がスクリプトの実行を促したかを判断できます...次のように考えます。

function setDate(month_selection, day_selection, year_selection)
{
   if (month_selection.name=='month'){
      var hidden = document.getElementsBynName('hidden');
   } 
   if (month_selection.name=='month_two'){
      var hidden = document.getElementsByName('hidden_two');
   } 

//Month, Day and Year variables created

   hidden.value = month + '/' + day + '/' + year;
}

これは正確な解決策ではなく、解決方法へのポインタです。

于 2012-05-16T06:16:44.673 に答える