0

我有一个 jqGrid,其中一列是呈现anchor标签的格式化列。与锚标记关联的点击处理程序调用preventDefault().

我还有一个onCellSelect向网格注册的事件处理程序,当用户单击anchor呈现标记的列中的任何位置时,它会执行一些有意义的操作。

我想要做的是显示标签,但是当点击它应该触发在网格中注册anchor的底层处理程序。onCellSelect

但是,这不起作用。

请参阅此处的示例 jsFiddle

我有一个位于此处的 jsFiddle ,它会触发冒泡事件。

不知道出了什么问题。

4

4 回答 4

0

这有点像黑客,但它有效:

$("#grid").delegate(".logDetailsDialogClass",'click', 
   function(e) {
      alert('link clicked');
      e.preventDefault();
      $(this).parent().trigger("click");
   });

请注意,您可以继续使用.live,但我建议不要使用它。我添加的只是$(this).parent().trigger("click");

于 2012-12-13T15:27:09.943 回答
0

要在单击另一个事件时触发另一个事件,您可以使用 trigger 功能

$('.anchorClass').live('click', function(e){
     e.preventDefault();

     // get the current cell
     var $cell = $(e.target).parent('div');

     $($cell).trigger('onCellSelect');

});

看看这个小提琴如何从另一个触发一个事件

于 2012-12-13T15:28:30.687 回答
0

您在这里混淆了几件事(您应该阅读 jQuery 文档)

event.preventDefault():如果调用该方法,则不会触发事件的默认动作。 event.stopPropagation(): 防止事件在 DOM 树中冒泡,防止任何父处理程序收到事件通知。
event.stopImmediatePropagation(): 阻止其余的处理程序被执行,并防止事件在 DOM 树中冒泡。

.stopPropagation()此外,您应该阅读关于和的附加说明.stopImmediatePropagation()

补充笔记:

  • 由于该.live()方法在事件传播到文档顶部后处理事件,因此无法停止实时事件的传播。同样,由 处理的事件.delegate()将传播到它们被委托的元素;在调用委托的事件处理程序时,绑定在 DOM 树中它下面的任何元素上的事件处理程序将已经被执行。因此,这些处理程序可能会阻止委托处理程序通过调用event.stopPropagation()或返回来触发false
于 2012-12-13T15:31:43.150 回答
0

我可以建议,删除anchors并替换它们spans吗?如果你真的需要它们链接到某个地方,你可以混合使用 CSS 和 Jquery 来模拟anchor动作。

于 2012-12-13T15:36:07.687 回答