JQuery UI:无法获得事件的目标元素

时间:2014-07-04 08:15:26

标签: jquery jquery-ui event-handling

我使用slickgrid。一列(第一列)包含链接。现在,当鼠标悬停在链接(jquery中的mouseenter)上时,会显示一个jquery ui对话框,其中包含单击链接时可见的一些数据。这通常会阻止用户点击链接。

因为用户可以动态地向网格添加行,所以我使用on()来绑定事件

$("#grid").on({
    mouseenter: function () {
        //here I get the correct element but have to store it in global var
        myNumber = $(this).text(); 
        $( "#dialog-char" ).dialog("open");
    },
    mouseleave: function () {
        $( "#dialog-char" ).dialog( "close" );
    }
},
    ".char-link"
);

我想将myNumber传递给对话框打开函数:

$( "#dialog-char" ).dialog({
    resizable: true,
    width: 750,
    autoOpen: false,
    open: function( event, ui ) {
        loadChar(myNumber);
    }
});

像这样它可以工作,但我需要全局变量。如何访问open()函数中的链接? event.target不是链接,它是包含网格的div。其他目标属性都返回undefined。

这有可能吗?

1 个答案:

答案 0 :(得分:1)

嗯,看起来并不像是一种直接的方式。如果您想避免使用全局变量,可以使用#dialog-char方法在打开之前将有关悬停链接的信息绑定到data(),如下所示:

$("#grid").on({
  mouseenter: function () {
    $( "#dialog-char" ).data('myNumber',$(this).text()); 
    $( "#dialog-char" ).dialog("open");
  },
  mouseleave: function () {
    $( "#dialog-char" ).dialog( "close" );
  }
},
".char-link"
);

$( "#dialog-char" ).dialog({
 resizable: true,
 width: 750,
 autoOpen: false,
 open: function( event, ui ) {
    myNumber= $(this).data('myNumber');
 }
});