2013-03-05 3 views
0

У меня есть html-код, как показано ниже. Я хотел бы знать, как динамически идентифицировать sessionEventsDecorator [0] .startDateStr, sessionEventsDecorator [1] .startDateStr в javascript. Цель состоит в том, чтобы убедиться, что пользователь не ввести значение года больше, чем 2013.Как определить динамические html-объекты в javascript?

<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; 
+0

'document.getElementById («sessionEventsDecorator [0] .startDateStr»)'. .. – crush

+0

Когда вы говорите «идентифицировать динамически», вы имеете в виду цикл через все входы и проверить каждый? – talemyn

ответ

0

Хорошо, основанный на ваш комментарий к ответу Sebas', я думаю, что это является то, что вы ищете, основанный на том, что мы можем видеть ваш код:

var loopIndex = 0; 

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

    . . . logic to check date . . . 

    loopIndex++; 
} 

это, как говорится, соглашение об именах для дивы является своего рода запутанным. Упрощение идентификаторов помогло бы в удобочитаемости. Кроме того, есть более чистые способы выполнения итерации, если вы можете использовать JQuery и дать всем этим входам общий класс.

+0

Спасибо @talemyn. Я хотел бы знать, как сделать подстроку значение переменной inputField. Он отлично работает, когда использует что-то вроде inputField.value в Firefox, но не работает в IE – user1684535

+0

Какую подстроку вы ищете? Что-то вроде 'var fieldValue = inputField.value;' получит значение поля для вас как строки (работает в FF и IE), а затем вы можете манипулировать 'fieldValue', как вам нравится. – talemyn

+0

Кроме того, если вам не нужно ничего делать с самим полем, вы также можете объединить два шага и просто выполните команду var varValue = document.getElementById ("sessionEventsDecorator [" + loopIndex + "] .startDateStr"). ; '. – talemyn

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

Это будет проверить, что для вас. Но я не думаю, что вы понимаете, как идентификаторы работают правильно. Идентификаторы не являются динамическими и не работают как массивы, они служат уникальными идентификаторами для отдельных html-объектов.

Что-то вроде «sessionEventDecoratorDate0» было бы более нормальным.

Если вы хотите, чтобы петля над всеми из них и не знаете, сколько есть, вы можете получить значения по

var counter=0; 
while (true){ 
    var element = document.getElementById("sessionEventsDecorator["+counter+"].startDateStr"); 
    if(element){ 
    counter++; 
    //do logic here on element 
    } 
    else{ 
    break; 
    } 
} 
+0

Я думаю, что OP хочет использовать текст атрибутов для поиска свойств существующего объекта. Но я могу ошибаться. –

+0

@thesystem может быть. Это было немного неясно. Посмотрим, есть ли у него комментарии? –

+0

@ ben336, я хотел бы получить значения всех startDateStr в форме в функции javascript. Эти startDateStr могут быть добавлены динамически к форме. – user1684535

0

Вы должны установить идентификатор и имя атрибуты вашего элемента к чему-то гораздо более простой:

<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"; 
    }; 
} 
Смежные вопросы