Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dom jQuery与就绪或加载事件一起运行_Dom_Jquery_Jquery Tools - Fatal编程技术网

Dom jQuery与就绪或加载事件一起运行

Dom jQuery与就绪或加载事件一起运行,dom,jquery,jquery-tools,Dom,Jquery,Jquery Tools,我正在使用jQuery工具提示插件,它是用$('selector').tooltip()初始化的。我想在任何当前或未来的.tooltipper元素上调用此函数。我认为以下方法可行: $('.tooltipper').live('ready', function(){ $(this).tooltip() } 但它没有成功——准备就绪的事件没有触发。负载也一样。我已经读过livequery可以生成我正在寻找的结果,但是肯定有一种方法可以使用jQuery.live()来实现它,因为文档中说它适用

我正在使用jQuery工具提示插件,它是用
$('selector').tooltip()初始化的。我想在任何当前或未来的
.tooltipper
元素上调用此函数。我认为以下方法可行:

$('.tooltipper').live('ready', function(){
  $(this).tooltip()
}
但它没有成功——准备就绪的事件没有触发。负载也一样。我已经读过livequery可以生成我正在寻找的结果,但是肯定有一种方法可以使用jQuery
.live()
来实现它,因为文档中说它适用于所有jQuery事件,我相信
ready
就是其中之一。

引用自jqAPI():

在jQuery 1.3.x中,只有以下JavaScript事件(除自定义事件外)可以与.live()绑定:单击、dblclick、keydown、keypress、keyup、mousedown、mousemove、mouseout、mouseover和mouseup

从jQuery 1.4开始,.live()方法支持自定义事件以及所有JavaScript事件

从jQuery1.4.1开始,甚至focus和blur都可以使用live(映射到更合适的冒泡事件focusin和focusout)

从jQuery 1.4.1开始,可以指定悬停事件(映射到“mouseenter mouseleave”)


.live()
似乎不支持就绪事件。

添加到HurnsMobile的优秀答案中;查看
bindReady()
,这是jQuery在每次调用
$(某些函数)
$(文档)时绑定到文档加载事件的内部调用。ready(某些函数)
我们了解了为什么不能绑定到
“ready”

总之,
$(some_function)
调用绑定到以下对象的函数:

  • DOMContentLoaded
  • onreadystatechange(DOMContentLoaded)
  • window.load/onload

您最好绑定到那些可能创建新的
.tooltipper
元素的操作,而不是尝试侦听就绪事件(只发生一次)。

HurnsMobile是正确的。JQuery live不支持就绪事件

这就是为什么我创建了一个结合了两者的插件。您只需注册一次回调,然后需要为手动添加的内容调用一次插件

$.liveReady('.tooltipper', function(){
  this.tooltip()
});
然后在创建新内容时:

element.html(somehtml);
element.liveReady();

$('…).appendTo($('body')).liveReady();

此处提供了一个演示:

请查看此处的介绍性帖子:



还可以查看哪些元素列出了dom上的更改。

如果元素存在于ready上,为什么要使用
.live()
?我认为您最好尝试将它绑定到可能会创建新的
选择器的事件。虽然不是直接的答案,但在
ready
上使用
.live()
似乎有点像猎枪一样。就我的0.02美元。我是这样想的。某些元素应始终表现出某些行为。例如,带有
href
属性的链接在单击时应始终指向URL。大多数具有
title
属性的元素应该在鼠标悬停时将参数显示为工具提示。对我来说,将此类功能启用到更高阶的行为(如自定义工具提示)才有意义。我最终只使用了
$('.tooltipper').livequery(function(){$(this.tooltip()})
,这对我来说是最有语义意义的(与下一个最佳解决方案相反,后者是将回调添加到创建tooltip元素的函数中)因为工具提示行为与元素相关——它与创建元素的过程无关。Steven-所有帐户的有效分数为+1,用于全面的信息性问题和答案。非常好!感谢Sean提供的额外详细信息!感谢深思熟虑的答案。我已将jQuery工具调用绑定到“构造函数”中以你之前的方式,但这条调查路线的想法是尽量避免完全这样做。我的推理是,工具提示的工具提示性与正在构建的工具提示无关,而是工具提示本身固有的。
element.html(somehtml);
element.liveReady();
$('<div class="tooltipper">...').appendTo($('body')).liveReady();