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闭包
Dec 14 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
使用命令对象代替switch语句的写法示例
Feb 28 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
Aug 21 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
Apr 26 Javascript
在线引用最新jquery文件的实现方法
Aug 26 Javascript
jQuery与js实现颜色渐变的方法
Dec 30 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
js数组实现权重概率分配
Sep 12 Javascript
如何基于js判断浏览器版本
Feb 20 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
用ODBC的分页显示
2006/10/09 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
JavaScript中的对象化编程
2008/01/16 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
python的exec、eval使用分析
2017/12/11 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
AURALog面试题软件测试方面
2013/10/22 面试题
客房部经理岗位职责
2015/02/02 职场文书
离婚纠纷代理词
2015/05/23 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript