我正在使用Jquery开发一个简单的右键菜单示例。我正在使用JQuery ContextMenu。所以我有一个简单的表,jsp代码以这种方式生成单元格:
<div id="catS" class="pure-u-1-3">
<h4 class="l-box">Categorie</h4>
<table class="pure-table pure-table-horizontal l-box" id="catAssociate">
<tbody>
<%ObjectifyService.register(Categoria.class);
List<Key<Categoria>> lCategorie=s.getCategorie();
if(lCategorie!=null){
for(Key<Categoria> k : lCategorie){
Categoria c= ofy().load().now(k);
if(c!=null)
%><tr id="<%out.println(c.getId());%>" ><td id=" <%out.println(c.getId());%>" onclick="getSottocategorieDaC(this); getDispenseDaC(this)"><%out.println(c.getNome());%></td></tr> <%
}
}else{
%><tr><td>Nessuna categoria associata</td></tr><%
}
%>
</tbody>
</table>
</div>
所以在另一个表中,我可以在数据存储区添加元素,并通过ajax帖子更新“catAsscoiate”表。这些是我的功能:
这会在数据存储区中添加项目并重绘我的表格。
function AddAction(t, a) {
$.ajax({
url : 'studenteServlet?action=aggiungiC&ids='+$.urlParam('id')+'&idc='+t.id,
type : "POST",
async : false,
success : function(data) {
console.log(data);
$('#catAssociate tbody > tr').remove();
var html = '';
for(var i = 0; i < data.length; i++)
html += '<tr id='+data[i].id +'><td id='+data[i].id +' onclick="getSottocategorieDaC(this); getDispenseDaC(this)">' + data[i].nome + '</td></tr>';
$('#catAssociate').append(html);
}
});
}
在添加操作之前,上下文菜单适用于catAssociate,之后没有。这是代码:
$(document).ready(function() {
$('#catAssociate tbody tr').contextMenu('myMenu2', {
bindings: {
'open': function(t) { DeleteAction(t, "Open"); },
}
...
任何人都可以解释我为什么吗?
谢谢!
答案 0 :(得分:0)
使用$('#catAssociate')替换所有html。附加(html);你有效地删除/丢失所有附加到你刚刚破坏的旧内容的事件绑定。
所以只需在成功函数中重建DOM后再重新应用它们:
$('#catAssociate').append(html);
$('#catAssociate tbody tr').contextMenu('myMenu2', {
bindings: {
'open': function(t) { DeleteAction(t, "Open"); },
}