Таблица JSP-JSTL выбирает только первую строку таблицы

#java #javascript #jsp #jstl

#java #javascript #jsp #jstl

Вопрос:

Я новичок в HTML, Java, Javascript, JSP и JSTL.

У меня есть простая страница JSP, использующая JSTL в качестве библиотеки тегов. Когда я использовал javascript для получения всех значений строки a, щелкнув, все, что я могу получить, это значения первой строки, даже когда я нажимаю на 2-ю, 3-ю или n-ю строку. Я хочу получить только ту строку, которую я щелкнул.

в моем javascript:

 <script type="text/javascript" >
function getTblContents() {
 var pName = document.getElementById("pName").innerHTML;
 var pAddress = document.getElementById("pAddress").innerHTML;
 var pEmail = document.getElementById("pEmail").innerHTML;

 alert(pName   " "   pAddress   " "   pEmail);
}
</script>
  

мой код jstl:

 <c:forEach var="people" items="${people.data}" varStatus="status">
 <tr onMouseOver="this.className='highlight'" onMouseOut="this.className='normal'" onclick="getTblContents();" >
  <td id="pName" >${people.name}</td>
  <td id="pAddress" >${people.address}</td>
  <td id="pEmail" >${people.email}</td>
 </tr>
</c:forEach>
  

javascript и jsp находятся на одной странице.

Пожалуйста, помогите. Заранее спасибо.

Ответ №1:

Каждый идентификатор должен быть уникальным в html, это ограничение, которое устанавливает html. Поэтому вам следует добавить некоторый идентификатор uniqe в ids ie. people.id и передайте этот идентификатор в функцию javascript.

 <script type="text/javascript" >
    function getTblContents(id) {
      var pName = document.getElementById("pName-" id).innerHTML;
      var pAddress = document.getElementById("pAddress-" id).innerHTML;
      var pEmail = document.getElementById("pEmail-" id).innerHTML;

      alert(pName   " "   pAddress   " "   pEmail);
    }
</script>


<c:forEach var="people" items="${people.data}" varStatus="status">
       <tr onMouseOver="this.className='highlight'" onMouseOut="this.className='normal'" onclick="getTblContents('${people.id}');" >
           <td id="pName-${people.id}" >${people.name}</td>
           <td id="pAddress-${people.id}" >${people.address}</td>
           <td id="pEmail-${people.id}" >${people.email}</td>
       </tr>
</c:forEach>
  

Ответ №2:

document.getElementById($ID) вернет первый элемент в dom с указанным идентификатором (первая строка вашей таблицы).
Вы могли бы попробовать

 <tr onMouseOver="this.className='highlight'" onMouseOut="this.className='normal'"   onclick="getTblContents(this);" > 
  

и вместо этого обратитесь к элементу «this». Нравится:

 var pname = this.pname;
  

или

 var pname = this.pname.innetHTML;
  

в javascript. и посмотрите, возвращает ли это правильную строку таблицы