由 jquery 创建的元素上的事件

Posted

技术标签:

【中文标题】由 jquery 创建的元素上的事件【英文标题】:Events on elements created by jquery 【发布时间】:2021-02-28 03:44:09 【问题描述】:

我仍在学习 jquery,我面临一个可能很多人都面临的问题,这只是逻辑,但我似乎找不到学习如何做到这一点的好方法。

所以我的问题如下: 我正在使用 jquery 在页面上创建名为 .lieu 的元素。基本上,当您输入文本并单击“确定”时,您创建了另一个 .lieu,它应该在 destinations 选项卡中显示文本 "en passant par le bois des lutins"。 使用 html 创建的第一个可以正常工作,但其他的不行。 似乎脚本能够在使用 html 创建的元素上执行(这可能是由于:)

$( document ).ready(function() );

我怎样才能使用好的方法来完成这项工作? 非常感谢。

    $(".validate").click( function()
    var name = $(this).closest(".envies").find("input[name='name']").val();
    var lieu = $("<div />", 
        "class": "lieu"
    )
    .css(
        left: 0,
        top: 0
    )
    .append($("<p>"+name+"</p>"))
    .appendTo(document.body););

    $(".lieu").on("mouseenter", function(checklieu)  
     var ordredestinations = $("<div />", 
        "class": "lieuliste"
    )
     .css(

     )
     .append($("<p>en passant par le bois des lutins</p>"))
     .appendTo(".destinations");
    );
.destinations 
  background-color: lightgrey; 
  position: fixed;
  right: 0;
  top: 0;


.envies 
  background-color: grey; 
  position: fixed;
  right: 300px;
  top: 0;
    width: 250px;
  height: 50px;




.lieu
  position: absolute;
  left:0px;
  top: 100px;
  background-color: red;
  width: 200px;
  height: 100px;
  border-radius: 250px;
  text-align: center;
  vertical-align: middle;
  line-height: 100px;       /* The same as your div height */
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>

    <div class="lieu"><p>bois des lutins</p></div>
    <div class="destinations"></div>
    <div class="envies">
        <input type="text" id="name" name="name" size="10" placeholder="name">
        <button class="validate">OK</button>
    </div>
</body>

<script type="text/javascript"></script>

【问题讨论】:

看起来你可以简化很多。查找 jquery 附加。 Append 的意思是“添加到末尾”,因此您不必通过查找特定项目并转到最后一个项目等。您只需要追加,它就会在末尾。 好的,谢谢你的帮助,我明天去看看。 请解释您所说的“不工作”是什么意思。究竟是什么不工作? 【参考方案1】:

我认为我看到了你的问题。

当一个文档(网页)加载时,特定的目标 jQuery 函数就像你的一样..

$(".validate").click( function() 

   // ...

);

// and...

$(".lieu").on("mouseenter", function() 

   // ...

);

..只会在文档准备好时绑定,而不是因为您在 $(document).ready(function() 中使用这些。所以当 doc 准备好后,上面 2 个函数运行并绑定。

像您在 doc ready 中那样运行函数是一种很好的做法。

但是,如果您打算将现有执行的函数自动绑定到新添加的文档元素。那么您的前 2 个函数超出了范围。

你需要查看.on()https://api.jquery.com/on/

例如,如果您希望.lieu div 等新添加的文档元素被您的mouseover 函数击中,那么您可以像这样使用.on 函数...

$(document).on("mouseenter", ".lieu", function()

第二个参数.on().lieu 选择器,在$(document) 中作为主要的jQuery 选择器对象。

意味着如果您将任意数量的新.lieu div 附加到document html,使用$(document) 中的.on() 选择器参数将始终在此选择器上的鼠标悬停事件的范围内。

【讨论】:

是的!你是对的,我找到了一篇关于.on() 的文章,但我认为我这样做是对的。一定会学到的!非常感谢

以上是关于由 jquery 创建的元素上的事件的主要内容,如果未能解决你的问题,请参考以下文章

用jq创建出来的虚拟DOM应如何添加事件

Javascript - Jquery - 插件

jQuery动态创建的元素为啥不能绑定事件

jQuery:为啥我在 li 元素上的点击事件不起作用?

浅谈Jquery中的bind()live()delegate()on()绑定事件方式

我可以使用 jQuery 找到绑定在元素上的事件吗?