2

用户添加新注释。注释被添加到数据库并返回注释的 HTML 以显示给用户并返回该注释的上下文菜单:

success: function( result ) {

   var resultArray = eval( result );

   $( "#notes").append( resultArray[0] );
   $( "#notes").append( resultArray[1] );
}

结果数组 [0] 是:

<tr class="getMenuNote contextMenuPointer-note" id="<?php echo $note->id ?>">
   /*details of note here... nothing interesting and works just fine*/
</tr>

结果数组 [1] 是:

<div class="contextMenu" id="menu-<?php echo $note->id ?>" class="dropdown clearfix">
   <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
      <li><a tabindex="-1" href="" class="deleteNote" noteID="<?php echo $note->id ?>">Delete</a></li>
   </ul>
</div>

问题是,当用户单击该注释时,它应该调用 .getMenuNote。这是在文件加载时加载的。我知道 .getMenuNote 不知道新附加的 HTML 存在并且无法将其链接在一起,但我如何让它知道它存在?

我调查了 .on() 和 .live() 但似乎没有一个对我有用。寻找代码而不是理论的解决方案。

谢谢大家!

编辑 这里是事件处理程序:

$( ".getMenuNote" ).click( "contextmenu", function ( e ) {

   noteID = $( this ).attr( "id" );

   $( "#menu-" + noteID ).css( {
      display: "block",
      left: e.pageX,
      top: e.page
   } );

   return false;
} );
4

1 回答 1

0

也许这个?

$( "#notes").on("click", ".getMenuNote", function(e){
   var noteID = this.id;

   $( "#menu-" + noteID ).css( {
      display: "block",
      left: e.pageX,
      top: e.page
   } );
});

此外,如果#notes是 a<table>那么您可能希望像这样附加您的 HTML:

$( "#notes").append(resultArray[0])
            .find("tr:last-child")
            .append(resultArray[1]);

最后一件事...我不是 PHP 人(我使用 .NET),但我认为<?php echo $note->id ?>如果在 AJAX 调用之后通过 jQuery 将 php 代码 ( ) 注入到 DOM 中,它不会呈现。您应该返回已包含 id 的 HTML 标记。

于 2013-11-07T21:37:56.417 回答