我有这个代码,它显示了我的项目列表
<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);
}
但是目前,我得到一个未定义的值,我该如何获得该值?
答案 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());
});
});
答案 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);
}