Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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
Javascript 使用.empty()和.html()后没有悬停事件_Javascript_Jquery_Html_Jquery Ui Sortable_Jquery Hover - Fatal编程技术网

Javascript 使用.empty()和.html()后没有悬停事件

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

我有一个可排序列表(jqueryui),我想使用 “李”元素。(都是数字)

为此,我制作了以下功能:

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");
        }
});