在函数重写表后,右键单击Jquery菜单不起作用

时间:2013-11-28 20:42:14

标签: javascript jquery html ajax

我正在使用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"); },
    }
    ...

任何人都可以解释我为什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用$('#catAssociate')替换所有html。附加(html);你有效地删除/丢失所有附加到你刚刚破坏的旧内容的事件绑定。

所以只需在成功函数中重建DOM后再重新应用它们:

$('#catAssociate').append(html);

$('#catAssociate tbody tr').contextMenu('myMenu2', {
    bindings: {
    'open': function(t) { DeleteAction(t, "Open"); },
}