2012-04-06 69 views
-1

我想在ajax加载元素上使用jQuery.one。它正在工作,如果元素已被加载,但不是在使用ajax加载元素时。jquery .one不能在ajax加载元素上工作

这是我正在做的。


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

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

Thx提前。 沙市

编辑:

$(".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

回答

0

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

1

你将不得不运行您的代码后,该元素被放在页面,因为您正在使用的.one()静态形式,这就要求元件的运行时间存在代码。

在jQuery中1.7+,你可以使用的.one()委派的版本,这样,它会在第一的mouseenter回应时,它被添加到页面的#selector对象:理想

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

,你会将document替换为运行此代码时存在的静态父对象#selector,因为这比使用document对象效率更高,但document可以工作。

+0

试过但与我的其他代码冲突。 – Shashi 2012-04-06 04:22:22

+1

您将不得不向我们展示您的HTML以及与之冲突的代码,以便我们知道要建议的内容。这就是你如何处理动态添加的元素(使用委托事件处理),或者你必须在元素添加到页面后才安装事件处理程序。选择这两个选项之一。 – jfriend00 2012-04-06 04:27:34

+0

jfriend00有它完全正确的......“尝试过,但它是相互矛盾的”不够好。唯一的回应是,“那么......然后解决冲突。” – 2012-04-06 04:37:43

0

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

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

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

+0

尝试过但与我的其他代码冲突。 – Shashi 2012-04-06 04:22:27

+0

它发生冲突,您需要在负责创建动态元素的函数中执行此代码。 – irfanmcsd 2012-04-06 04:26:52