在foreach循环中获取TD的值

时间:2016-02-04 13:19:06

标签: javascript jquery html jsp

我有这个代码,它显示了我的项目列表

<tbody class="table-color2">
    <c:forEach var="defect" items="${defectList}">
        <tr>
            <td id="defectId"><a onclick="getDefectId()">${defect.id}</a></td>
            <td>${defect.createdDate}</td>
            <td>${defect.reportedBy.firstName}</td>
            <td>${defect.title}</td>
            <td>${defect.bugtype.description}</td>
            <td>${defect.status.description}</td>
            <td>${defect.priority.description}</td>
        </tr>
    </c:forEach>
</tbody>

我想要做的是在点击它时获取td id="defectId"的值,我的onclick的jquery脚本是这样的:

function getDefectId(){
    var defectId = $(' #defectId ').val();
    alert("Defect ID " + defectId);
}

但是目前,我得到一个未定义的值,我该如何获得该值?

3 个答案:

答案 0 :(得分:4)

你有几个问题。首先,您在循环中附加相同的id,这将导致重复无效。另外,a元素没有值可以检索,因此您需要使用text()。最后请注意,使用当前方法意味着您需要将单击元素的this引用传递给函数。

但是你可以通过使用类并在JS中连接事件来整理所有这些。试试这个:

<tbody class="table-color2">
    <c:forEach var="defect" items="${defectList}">
        <tr>
            <td class="defect"><a href="#">${defect.id}</a></td>
            <td>${defect.createdDate}</td>
            <td>${defect.reportedBy.firstName}</td>
            <td>${defect.title}</td>
            <td>${defect.bugtype.description}</td>
            <td>${defect.status.description}</td>
            <td>${defect.priority.description}</td>
        </tr>
    </c:forEach>
</tbody>
$(function() {
    $('.defect a').click(function(e) {
        e.preventDefault();
        console.log($(this).text());
    });
});

Working example

答案 1 :(得分:2)

试试这个:使用procedure TClientModule1.PopMiscCDS(SQL: String); const BufSize = $8000; var RetStream: TStream; Buffer: PByte; MemStream: TMemoryStream; BytesRead: Integer; FileSize: Integer; begin try MemStream := TMemoryStream.Create; GetMem(Buffer, BufSize); try //--------------------------------------------------------- RetStream := ServerMethods1Client.GetCDSXML(SQL, FileSize); //--------------------------------------------------------- repeat BytesRead := RetStream.Read(Pointer(Buffer)^, BufSize); if BytesRead > 0 then MemStream.WriteBuffer(Pointer(Buffer)^, BytesRead); until BytesRead < BufSize; if FileSize <> MemStream.Size then raise Exception.Create('Error downloading xml'); MemStream.Seek(0, TSeekOrigin.soBeginning); CDSMisc.Close; CDSMisc.LoadFromStream(MemStream); finally FreeMem(Buffer, BufSize); MemStream.Free; end; except on E: Exception do begin ShowMessage(E.Message); end; end; end; 代替text(),因为您想知道val()内的文字而不是td元素的值。

编辑: - 抱歉,错过了多个td。在这种情况下,您不能对所有tds使用相同的id。只需使它成为类并在功能中进行以下更改。

input

我建议使用jQuery事件处理程序而不是调用javascript函数。见下面的代码

HTML:删除onclick调用

function getDefectId(){
   var defectId = $('.defectId').text();
  alert("Defect ID" + defectId);
}

jQuery:注册一个点击处理程序并阅读文本

<td class="defectId"><a href="#">${defect.id}</a></td>

答案 2 :(得分:2)

您可以执行以下操作(请记住id必须是唯一的):

<td class="defectId"><a onclick="getDefectId(${defect.id})">${defect.id}</a></td>

在你身上function

function getDefectId(value){
  alert("Defect ID " + value);
}
相关问题