Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
Jquery 如何在不丢失事件的情况下动态替换HTML标记_Jquery_Html - Fatal编程技术网

Jquery 如何在不丢失事件的情况下动态替换HTML标记

Jquery 如何在不丢失事件的情况下动态替换HTML标记,jquery,html,Jquery,Html,我有一个html ul标记,其中有如下内容: <div id="sidebar"> <ul id="menu"> <li> <div id="clickable"> <img src="img/img8.png" alt="Descripción de la igen 8.png">/img> </div>

我有一个html ul标记,其中有如下内容:

<div id="sidebar"> 
    <ul id="menu">
        <li>
            <div id="clickable">
                <img src="img/img8.png" alt="Descripción de la igen 8.png">/img>
            </div>
        </li>
        <li>
            <div id="clickable">
                <img src="img/img10.png" alt="Descripción de la imagen 10"></img>
            </div>
        </li>
     </ul>
</div>
它适用于所有继承的元素,但我不能使“mouseleave”事件继承。如果我加上:

        $('#menu').on("hover", '#menu li', 
    function() {    
        //mouse over LI and look for A element for transition
        $(this).find('img')
            .animate( { opacity:1 }, 200)
    },
    function() {
        $(this).find('img')
            .animate( { opacity:0.5 }, 200)
    });

它不起作用。如何处理hover onleave事件???

从DOM中删除元素时,绑定到该元素的任何事件处理程序都将不再工作。您需要使用事件委派将事件处理程序绑定到始终位于DOM中的祖先元素。您可以使用以下方法执行此操作:

这将事件处理程序绑定到父
ul
元素。由于大多数DOM事件都在树上冒泡,因此可以在祖先元素上捕获它们。当事件到达
ul
时,方法上的
将检查它是否源自与选择器匹配的元素。如果执行了,则将执行事件处理程序


这样做的另一个好处是,只有一个事件处理程序而不是多个事件处理程序(每个
.clickable
元素一个),这样效率更高。

当您从DOM中删除一个元素时,绑定到该元素的任何事件处理程序都将不再起作用。您需要使用事件委派将事件处理程序绑定到始终位于DOM中的祖先元素。您可以使用以下方法执行此操作:

这将事件处理程序绑定到父
ul
元素。由于大多数DOM事件都在树上冒泡,因此可以在祖先元素上捕获它们。当事件到达
ul
时,
方法上的
将检查它是否源自与选择器匹配的元素。如果执行了,则将执行事件处理程序


这样做的另一个好处是,只有一个事件处理程序而不是多个(每个
.clickable
元素一个),这更有效。

使用.on方法绑定事件,这允许事件委派。看

摘录:


委派事件的优点是,它们可以处理以后添加到文档中的子元素中的事件。通过选择在附加委派事件处理程序时保证存在的元素,可以使用委派事件来避免频繁附加和删除事件处理程序

使用.on方法绑定事件,这允许事件委派。看

摘录:


委派事件的优点是,它们可以处理以后添加到文档中的子元素中的事件。通过选择在附加委派事件处理程序时保证存在的元素,可以使用委派事件来避免频繁附加和删除事件处理程序
live
已弃用。在
上使用
,如果您仍然使用较旧版本的jQuery,请使用
delegate
。我使用了$('body')。delegate方法,它工作得非常好!谢谢“悬停”方法怎么样??我不能让它同时继承onmouseenter和onmouseeve。我只能将事件放在MouseCenter上。如果我尝试添加onmouseleave,它将不起作用!有关更多说明,请参见编辑…
live
已弃用。在
上使用
,如果您仍然使用较旧版本的jQuery,请使用
delegate
。我使用了$('body')。delegate方法,它工作得非常好!谢谢“悬停”方法怎么样??我不能让它同时继承onmouseenter和onmouseeve。我只能将事件放在MouseCenter上。如果我尝试添加onmouseleave,它将不起作用!有关更多解释,请参见编辑…我尝试了您的,抱歉,我误解了某些内容,但我将在其他地方尝试,因为我理解您所说的内容,而且它看起来合乎逻辑,但对我不起作用。但我认为这是我的错,因为我不知道如何准确地使用它。但是谢谢!我以后一定会用的@Sonhja-没问题:)只有在使用jQuery 1.7或更高版本时,我的版本才能工作。对于旧版本,您必须使用
委托
。我很高兴你解决了你的问题!我试过你的,抱歉,但我误解了一些东西,但我会在其他地方试一下,因为我理解你说的话,它看起来合乎逻辑,但对我不起作用。但我认为这是我的错,因为我不知道如何准确地使用它。但是谢谢!我以后一定会用的@Sonhja-没问题:)只有在使用jQuery 1.7或更高版本时,我的版本才能工作。对于旧版本,您必须使用
委托
。我很高兴你解决了你的问题!
$('#menu').on("hover", '#menu li', 
function() {    
//mouse over LI and look for A element for transition
$(this).find('img')
    .animate( { opacity:1 }, 200)
});
        $('#menu').on("hover", '#menu li', 
    function() {    
        //mouse over LI and look for A element for transition
        $(this).find('img')
            .animate( { opacity:1 }, 200)
    },
    function() {
        $(this).find('img')
            .animate( { opacity:0.5 }, 200)
    });
$("#menu").on("click", ".clickable", function() {
    //Do stuff
});
    $('.clickable').live('click',function(){
      //do stuff here
    });
OR

$('body').delegate('.clickable','click',function(){
  //do stuff here
});