zoukankan      html  css  js  c++  java
  • 动态生成的DOM不会触发onclick事件的原因及解决方法

    最近朋友在做一个项目的时候,遇到动态加载微博内容,然后点击“展开评论”后获取该微博的所有评论。这里使用了动态加载的<span mid='123456789′ class='get_comment'>点击加载评论</span>。

    然后再写

    $(“.get_comment).click(function(){
     
    //响应事件逻辑
     
    })

    发现click事件并不会触发,使用控制台侦听也木有错误。百思不得其解时,

    因为我在以前做搜狐家居商城的运费管理时,也曾遇到,因此将焦点落在动态加载上。

    记得当时本人用的是行内事件,在动态加载时用的是行内事件。如 var oBtn = '<a onclick="Freight.delete_curr_citys();" href="javascript:void(0);">删除</a>'; 其实Freight为对象.delete_curr_citys为此对象的一个方法。

    当然也可以使用jquery的live()函数,重写响应逻辑:

    1
    2
    3
    4
    $(“.get_comment”).live(‘click', function() {
    var mid = $(this).attr(“mid”);
    alert(mid);
    });

    这时候,jquery可以响应span 的click事件了。这里用到live函数委派事件,主要用于动态生成的HTML的事件响应。关于live()函数的作用,它最直观的好处在于可以一直 “监听”客户端浏览器操作,对于新增的DOM节点也会有效,而不需要重新绑定。也许是因为这个“监听”可能会不断的去绑定、判断,会造成web应用性能问题,大家可以根据项目的复杂性选择性使用。关于live函数,这里有非常详细的阐述:

    定义和用法

    live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

    通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。

    语法

    $(selector).live(event,data,function)

    参数 描述

    event 必需。规定附加到元素的一个或多个事件。

    由空格分隔多个事件。必须是有效的事件。 

    data 可选。规定传递到该函数的额外数据。

    function 必需。规定当事件发生时运行的函数。

    以上这篇动态生成的DOM不会触发onclick事件的原因及解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 相关阅读:
    Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)
    Git 命令 操作
    vim常用快捷键
    离线数据分析流程介绍
    WebPack 简单使用
    React Native之React速学教程(下)
    puppet 部署 horizon server 所需的参数和部署逻辑
    jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
    12款优秀的 JavaScript 日历和时间选择控件
    mysql 去重
  • 原文地址:https://www.cnblogs.com/sjqq/p/6362314.html
Copyright © 2011-2022 走看看