Javascript 使用.empty()和.html()后没有悬停事件
我有一个可排序列表(jqueryui),我想使用 “李”元素。(都是数字) 为此,我制作了以下功能:Javascript 使用.empty()和.html()后没有悬停事件,javascript,jquery,html,jquery-ui-sortable,jquery-hover,Javascript,Jquery,Html,Jquery Ui Sortable,Jquery Hover,我有一个可排序列表(jqueryui),我想使用 “李”元素。(都是数字) 为此,我制作了以下功能: function resetList() { var orderedItems = new Array(); var unorderedItems = $("#sortable").find('li'); for(var i = 0; i < unorderdItems.length; i++) { var counter = 0; v
function resetList()
{
var orderedItems = new Array();
var unorderedItems = $("#sortable").find('li');
for(var i = 0; i < unorderdItems.length; i++)
{
var counter = 0;
var check = false;
do {
if(unorderedItems[counter].id == (i+1))
{
check = true;
orderedItems.push(unorderedItems[counter]);
}
counter++;
} while (!check && counter < unorderedItems.length);
}
$("#sortable").empty().html(orderedItems);
}
在我调用resetList()之后,知道为什么悬停函数不能工作吗
很抱歉英语不好,谢谢你的帮助
-尼克我敢肯定,在对元素进行排序之后,新的dom元素会被添加到页面中,取代旧的元素。因此,事件处理程序会丢失。您应该能够通过使用启用了
的委派事件来非常轻松地修复它
$(".ui-state-default").on("mouseenter", ".image", function() { .....
$(".ui-state-default").on("mouseleave", ".image", function() { .....
如果您使用的是jquery 1.7或更高版本,请使用.on-else使用.delegate
$(".image").on("mouseover mouseout",function(evt){
if (evt.type == 'mouseover') {
// do something on mouseover
alert("over");
} else {
// do something on mouseout
alert("out");
}
});
jquery的早期版本
$("body").delegate(".image","hover",function(evt){
if (evt.type == 'mouseenter') {
// do something on mouseover
alert("over");
}else {
// do something on mouseout
alert("out");
}
});
你说得对,改为委派
Dafen,hover不会使用从javascript动态创建的元素,因此使用.on或delegate,不管怎样,您已经找到了答案,只要更正我的答案,这样就不会有人犯我犯过的错误。只是有点困难,整数不是有效的HTML ID(ID应该以字母[a-Za-z]开头)在JavaScript中设置hover时,将其挂接到当时存在的元素上。选项:再次设置悬停。查看jquery.live或使用css进行操作。我猜这是因为您正在删除应用了hover
功能的元素,并正在重新创建它。我猜,既然您正在用.empty()
销毁所有这些元素,那么您首先必须重新应用用于应用悬停功能的任何代码。@ReneGeuze.live()
jQuery函数已经被弃用了很长一段时间了<对于jQuery 1.7+,code>.on()
,否则.delegate()
。我不是指实际的live()函数。出于某种原因,我宁愿用它拥有的任何函数名来称它为live。早期版本的jQuery应该使用.delegate()
,而不是.live()
——除非你远远落后,你也没有.delegate()
(在这种情况下,你真的需要更新)。.live()
函数已被弃用数月,文档(在多个地方)明确指出.delegate()
是1.7.is$(“.image”).on(“hover”,function(){}之前版本的jQuery的首选函数;比.hover()更好?谢谢你,先生!工作起来很有魅力!:-)很高兴听到这个消息,大芬。如果此处的任何答案有助于您自由单击其旁边的复选标记,表示问题已得到回答。
$(".image").on("mouseover mouseout",function(evt){
if (evt.type == 'mouseover') {
// do something on mouseover
alert("over");
} else {
// do something on mouseout
alert("out");
}
});
$("body").delegate(".image","hover",function(evt){
if (evt.type == 'mouseenter') {
// do something on mouseover
alert("over");
}else {
// do something on mouseout
alert("out");
}
});