21

関数が呼び出されるたびに増加する数値で、フォームの非表示の入力フィールドを更新する Javascript 関数があります。

もともとはgetElementById()で機能していましたが、フォームを再設計する必要があったため、php 関数を使用して要素に個別の ID を割り当てることができないため、その要素に一意の名前しかありません。

そこで代わりに、Javascript のgetElementsByName()を使用して要素を変更することにしました。

これがその要素のHTMLです

  <input type="hidden" value="" name="staff_counter">

これは私のJavascriptコードです:

window.onload=function()
{

//function is activated by a form button 

var staffbox = document.getElementsByName('staff_counter');
                    staffbox.value = s;


                s++;
}

関数が呼び出され、入力フィールドが値を取得していないときに、Firebug でエラーが発生しません。

getElementById() で動作していたのに、突然 getElementsByName() で動作しなくなったのはなぜですか?

  • -ドキュメント内で唯一の要素であることを確認しました。
  • -機能をアクティブ化するときに Firebug でエラーがないか確認しました

要素を作成するために Codeigniter から使用するコードは次のとおりです。

// staff_counter is name and the set_value function sets the value from what is
//posted so if the validation fails and the page is reloaded the form element does
// not lose its value

echo form_hidden('staff_counter', set_value('staff_counter'));

ありがとう

4

2 に答える 2

33

document.getElementsByName()NodeListを返すため、インデックスでアクセスする必要があります: document.getElementsByName('staff_counter')[0](これらの数に応じて)。

プロパティにアクセスして、length一致した要素の数を確認することもできます。

于 2011-08-06T14:03:15.140 に答える
3

同様の問題がありましたが、配列を単純なループで解決しました。以下のコードは、「btnSubmit」という名前のすべてのボタンを調べて無効にします。

for (var i=0;i<document.getElementsByName('btnSubmit').length;i++){
    document.getElementsByName('btnSubmit')[i].disabled=true;
}
于 2013-01-10T22:57:17.167 に答える