2016-04-05 7 views
0

Вот код, который я использовал:Как динамически изменять идентификатор текстового элемента внутри итерации логики в JSP?

<% int number=0 %> 
<logic:iterate name="sample" id="sample1" property="lstWaferRequests" indexId="rowid"> 
<tr> 
    <% number= (rowid.intValue())+1;%> 
<td> 
    <html-el:text name="sample1" property="strExpDate" styleId='<%="Date"+number%>'/> 
</td> 

<script> 
    var x=document.getElementById("<%="Date"+number%>"); 
</script> 

<a href="javascript:show_calendar(x,'');"> 
    <img src="images/calendar.gif" width="16" height="16" border="0" alt="Click Here to Pick up the timestamp"></a> 
</td> 
</tr> 
</logic:iterate> 

Я попытался увеличиваем переменную (число) и добавить его в идентификатор sample1 textbox но идентификатор не меняется для следующей итерации. Я проверил его, используя Inspect Element option in IE11.

Я использовал setatttribute() метод в JavaScript, чтобы установить идентификатор, но я получил сообщение об ошибке,

объект не поддерживает SetAttribute метод.

мне нужно изменить идентификатор текстового поля, который хранит значение даты (sample1) динамически так, что нужно, чтобы передать его в качестве аргумента show_calendar метода.

Просьба сообщить.

+0

использовать $ ('ваш элемент'). Attr («id», «присваивать идентификатор»); –

+0

Можете ли вы разместить свою функцию 'show_calendar'? –

+0

Спасибо :) Я попробую, но есть ли способ изменить аргумент, который был передан методу JavaScript динамически? – Tommy

ответ

0

Я добавил класс к вашим textbox и anchortag.

От вашей ссылки, я узнаю, что вы должны передать атрибут name текстового поля не id.

Следовательно, я добавил динамические имена. Этого можно достичь на strExpDate<%=number%>. Но я рекомендую использовать JSTL вместо скриптлетов. См. java expertBalusC сообщение How to avoid Java code in JSP files? для деталей.

Update: В вашей логике итерации, вы должны изменить как этот

<% int number=1 %> 
<logic:iterate name="sample" id="sample1" property="lstWaferRequests" > 
    <tr> 
     <td> 
      <html-el:text name="strExpDate<%=number%>" property="strExpDate" styleClass="dates" /> 
     </td> 
     <td> 
      <a class="test" href="#"> 
       <img src="images/calendar.gif" width="16" height="16" border="0" alt="Click Here to Pick up the timestamp"> 
      </a> 
     </td> 
    </tr> 
    <% number++; %> 
</logic:iterate> 

В вашем скрипте найти щелкнул тег привязки и ближайшее текстовое поле с классом dates. Я использовал библиотеку jQuery, так как вы отметили ее.

$(document).ready(function() { 
    $(".test").click(function(e) { 
     var value = $(e.target).closest('tr').find('.dates').val(); 
     var name = $(e.target).closest('tr').find('.dates').attr('name'); 
     alert("Name : "+name+" Value : "+value); 

     // You can call show_calendar() from here by passing name and value. 
    }); 
}); 

См. Demo in fiddle. Дайте мне знать, если какие-либо разъяснения, надеюсь, это поможет.

+0

Спасибо за это :) Но я не предопределяю количество добавляемых текстовых полей. Я добавляю его динамически, вызывая метод javacript при нажатии кнопки добавления строки :( – Tommy

+0

Вам не нужно предопределять количество текстовых полей в любом месте. Для стимулирования вашей проблемы я использовал 5 строк с текстовыми полями. Эта функция будет работать с любое количество строк. Надеюсь, я упомянул об этом в своем ответе. –

+0

См. мой «обновление» в ответ на вашу динамическую часть. –

0

Преобразуйте переменную числа в строку и соедините с indexId. Затем снова вернитесь к int. Он должен работать