Atiq
Atiq

Reputation: 166

How to access variable values from jstl foreach to jQuery

Hello guys this may be easy question but I m finding it quite tricky. Scenario is I m printing all the values from the database table using jstl foreach.

<c:forEach items="${pal}" var="p">
    <tr>
        <td><c:out value="${p.pid}"></c:out></td>
        <td><c:out value="${p.pname}"></c:out></td>
        <td><c:out value="${p.pdesc}"></c:out></td>
        <td><c:out value="${p.pestd}"></c:out></td>
        <td><a id="popa" href="#">Allocate</a></td>
    </tr>
</c:forEach>

And now onclick Allocate button I want that particular pid (i.e suppose there are 1,2,3,...,10 pid so when I click on 4th I should get the 4th pid as a value) in jquery.

But in jQuery when I try to get that value I always got last value in the loop whichever button I click.

In jQuery Section

 $("a#popa").click(function(){

     var input = $("<c:out value='${pid}' />");
     alert(input);

 });

and I also tried this

 <c:forEach var='lang' items='${paramValues.pid}'>
     <label><font color='#00CC00'><c:out value='${lang}'/></font></label>
 </c:forEach>

 but nothing works

Please Help me and guide me how to get the current value of pid on click in jQuery.

Upvotes: 0

Views: 8035

Answers (1)

jessegavin
jessegavin

Reputation: 75650

The value of each id attribute should be unique across the entire DOM. You're using id="popa" in a loop, this means that there will be more than one. When you try to select the id with jQuery it gives you the last one.

I would consider using the following approach. Instead of using an id, use a data-* attribute.

<c:forEach items="${pal}" var="p">
    <tr>
    <td><c:out value="${p.pid}"></c:out></td>
    <td><c:out value="${p.pname}"></c:out></td>
    <td><c:out value="${p.pdesc}"></c:out></td>
    <td><c:out value="${p.pestd}"></c:out></td>
    <td><a data-pid="${p.pid}" href="#">Allocate</a></td>
    </tr>
</c:forEach>

Then you can wire up the click event with something like this.

$("[data-pid]").click(function(){
  var pid = $(this).data("pid");
  alert(pid);
});

Upvotes: 3

Related Questions