-1

我正在尝试在 ajax 加载的元素上使用 jQuery.one。如果元素已经加载,但在使用 ajax 加载元素时无效。

这是我想要做的。


$("#selector").one('mouseenter', selMouseEnter);

function selMouseEnter() {
Some code....
}

提前谢谢。沙市

编辑:

$(".pitem").on('mouseenter', selMouseEnter);

$(".pitem").mouseleave(function(){
    jQuery(this).find(".tooltip").remove();
    $(".pitem").on('mouseenter', selMouseEnter);
});

function selMouseEnter () {
    jQuery(this).find(".tooltip").remove();
        var id = $(this).attr('id').replace('myprize', '');
    var myObj = jQuery('#Py').data('myprize' + id);
    if(myObj) {
        Some code that is opening tooltip having buttons....
    }
}

现在的冲突是当我单击工具提示中的按钮时,它再次调用 mouseenter 事件,而不是特定于按钮的事件。

注意:#PY 使用 ajax

4

3 回答 3

1

您必须在将元素放入页面后运行代码,因为您使用的是静态形式,.one()它要求元素在运行代码时存在。

在 jQuery 1.7+ 中,您可以使用像这样的委托版本,并且每当将对象添加到页面时.one(),它都会响应对象上的第一个 mouseenter :#selector

$(document).one('mouseenter', "#selector", selMouseEnter);

理想情况下,您将替换为在运行此代码时存在document的静态父对象,#selector因为这比使用该document对象更有效,尽管document会起作用。

于 2012-04-06T04:09:32.150 回答
0

为了在动态加载的元素上正确处理 jquery 事件,您需要以这种方式附加事件。

$("#parent").on({
  mouseenter: function (e) {
    // perform mouse enter event
  },
  mouseleave: function (e) {
    // perform mouse leave event
 }
}, '#selector');

其中#Parent 表示动态加载元素的元素的id。

于 2012-04-06T04:10:56.820 回答
0

因为它是动态加载的元素,您需要使用.live().on()livequery()。请参阅链接以获取更多信息 - 根据您的 jquery 版本使用适当的方法

于 2012-04-06T04:14:17.350 回答