0

以下のようなhtmlコードがあります。javascriptでsessionEventsDecorator[0].startDateStr、sessionEventsDecorator[1].startDateStrを動的に識別する方法を知りたいです。目的は、ユーザーが 2013 年を超える年の値を入力しないようにすることです。

<input id="sessionEventsDecorator[0].startDateStr" name="sessionEventsDecorator[0].startDateStr" class="text small" onchange="formDirty();" type="text" value="Mar 05, 2013"/&rt;


<input id="sessionEventsDecorator[1].startDateStr" name="sessionEventsDecorator[1].startDateStr" class="text small" onchange="formDirty();" type="text" value="Mar 05, 2013"/&rt;
4

3 に答える 3

1
document.getElementById("sessionEventsDecorator[0].startDateStr").value <=2013

それはあなたのためにそれをチェックします。しかし、ID がどのように正しく機能するかを理解していないと思います。Id は動的ではなく、配列として機能しません。個々の html オブジェクトの一意の識別子として機能します。

「sessionEventDecoratorDate0」のようなものはより正常です。

それらすべてをループしたいが、いくつあるかわからない場合は、次の方法で値を取得できます

var counter=0;
while (true){
  var element = document.getElementById("sessionEventsDecorator["+counter+"].startDateStr");
  if(element){
   counter++;
   //do logic here on element
  }
  else{
    break;
  }
}
于 2013-03-05T18:49:37.933 に答える
0

さて、Sebasの回答に対するあなたのコメントに基づいて、私たちはあなたのコードについて私たちが見ることができるものに基づいて、これがあなたが探しているものだと思います:

var loopIndex = 0;

while (document.getElementById("sessionEventsDecorator[" + loopIndex + "].startDateStr"))
{
    var inputField = document.getElementById("sessionEventsDecorator[" + loopIndex + "].startDateStr");

    . . . logic to check date . . .

    loopIndex++;
}

そうは言っても、divの命名規則はやや混乱を招きます。IDを単純化すると、読みやすくなります。また、JQueryを使用してこれらすべての入力に共通のクラスを与えることができれば、反復を行うためのよりクリーンな方法があります。

于 2013-03-05T19:03:45.013 に答える
0

要素の id 属性と name 属性をもっと単純なものに設定する必要があります。

<input type="text" class="text small" onchange="formDirty()" name="dateDecorator0" id="dateDecorator0">

<input type="text" class="text small" onchange="formDirty()" name="dateDecorator1" id="dateDecorator1">

これで、簡単に操作できるものができました。したがって、Javascript では、 を使用してすべての入力にアクセスできるようになりましたdocument.getElementById("dateDecorator"+i).value。しかし、正直なところ、 formDirty() 関数内で次のようにする必要があるときに、なぜこれを行う必要があるのか​​ さえわかりません。

function formDirty(){
    var val=this.value;
    if(val.substr(val.indexOf(",")+2) > 2013){
        this.value=val.substr(0,val.indexOf(",")+2)+"2013";
    };
}
于 2013-03-05T19:04:17.303 に答える