AngularJS对动态增加的DOM实现ng-keyup事件示例


Posted in Javascript onMarch 12, 2018

我们经常在网页中看到这种形式的内容,如图:

AngularJS对动态增加的DOM实现ng-keyup事件示例

用鼠标点击一下,就变成了一个input,如图:

AngularJS对动态增加的DOM实现ng-keyup事件示例

如果未输入内容,并且鼠标离开后,则变回了原来的样子;如果输入了内容,即使鼠标离开,也保持内容不变,此时输入回车,则添加内容,并清空输入框。

我在想这个是这么实现的?想了一下有这么一个思路:普通情况下这个是一个divp元素,点击之后变成一个input元素,鼠标离开则变回原元素。代码(含详细注释版)如下:

window.onload = function () {
  // 页面加载完给id为click-to-add的元素增加onclick方法
  document.getElementById("click-to-add").onclick = function () {
    // this在这个函数中就是id为click-to-add的元素,将其保存到变量non_input_type
    var non_input_type = this;
    // 新建一个input,保存到变量input_type
    var input_type = document.createElement("input");
    // 给input添加class和placeholder,这里我发现class对bootstrap有效
    input_type.setAttribute("placeholder", "添加待办事项");
    input_type.className = "form-control";
    // 获取父元素,然后父元素替换Child
    this.parentNode.replaceChild(input_type, non_input_type);
    // 设置焦点到input框中
    input_type.focus();
    // 当input失去焦点,即鼠标点到了别的地方
    input_type.onblur = function () {
    // 且input中没有输入内容时
    if (input_type.value.length === 0){
      // 再替换回原来的对象
      input_type.parentNode.replaceChild(non_input_type, input_type);
      }
    }
  }
};

对应的html代码则很简单:

<div>
    <p id="click-to-add">
      <span>+</span>
      <span>添加待办事项</span>
    </p>
  </div>

那么input怎么响应回车呢?html自带的onkeyup可以很容易做到,在此不演示,可以自行搜索。而在Angular中,可以给input增加ng-keyup来实现,这个本来也很简单,但在现在的这个问题中,input不是一开始就有的,而是新生成的,直接使用ng-keyup并不起作用,Angular只会监听在页面加载完时的ng方法,新增的则无效,要使新增的DOM也能响应Angular方法,需要对其使用$compile方法,在前文this.parentNode.replaceChild(input_type, non_input_type);这句代码之前增加以下两行:

// 增加ng-keyup事件,对应执行send($event)这个函数
input_type.setAttribute("ng-keyup", "send($event)");
// 对input_type使用$compile方法
$compile(input_type)($scope);

接下来还要编写send方法,如下:

$scope.send = function (e) {
  // 不同浏览器获取按键代码不一样,有的是e.keyCode,有的是e.which
  var keycode = window.event?e.keyCode:e.which;
  // 回车对应13
  if (keycode === 13){
    // e.targe就是对应的DOM,这里获取到value就按自己的需求去处理了
    alert("Add ToDo: " + e.target.value);
    e.target.value = "";
  }
}

演示如下,普通情况下是这样的:

AngularJS对动态增加的DOM实现ng-keyup事件示例

点击后变成输入框:

AngularJS对动态增加的DOM实现ng-keyup事件示例

有内容时,失去焦点也不会变,无内容时则回到普通状态,按下回车时,则alert内容:

AngularJS对动态增加的DOM实现ng-keyup事件示例

后来我又想了一下,只使用input就可以了,可以修改placeholder的颜色……

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript动态调整iframe高度的代码
Apr 10 Javascript
基于jquery的商品展示放大镜
Aug 07 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
详解Angular5 路由传参的3种方法
Apr 28 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 Javascript
在Vue项目中使用Typescript的实现
Dec 19 Javascript
JavaScript 反射学习技巧
Oct 16 Javascript
vue路由懒加载的实现方法
Mar 12 #Javascript
vue移动UI框架滑动加载数据的方法
Mar 12 #Javascript
详解vuex的简单使用
Mar 12 #Javascript
js提取中文拼音首字母的封装工具类
Mar 12 #Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 #Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
Mar 12 #Javascript
javascript变量提升和闭包理解
Mar 12 #Javascript
You might like
php学习之 数组声明
2011/06/09 PHP
php中的静态变量的基本用法
2014/03/20 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python中常见的异常总结
2018/02/20 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
一些PHP的面试题
2015/05/06 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
自我鉴定总结
2014/03/24 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
大学军训通讯稿
2015/07/18 职场文书
停车场管理制度范本
2015/08/05 职场文书