Jquery .one没有处理ajax加载的元素

时间:2012-04-06 04:05:08

标签: jquery ajax

我正在尝试在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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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