草庐IT

DOM_常用事件

WELCOME TO ivanlee717!!!! 2023-03-28 原文

常用事件

onload
<script>
        window.onload = function () {
            ele = document.getElementById("i")
            console.log(ele.innerHTML);
        }
    </script>
</head>
<body>
<div class="background">
    <div id="i">ivanlee</div>
</div>

window.onload的方法解决了js在从上到下编译的时候,无法先解析body里面的内容,后解析<script>标签里的事件。

现在script标签在上面,div标签在下面,加入onload方法可以在解析时进行等待,等到解析完div标签。

onsubmit

很多检验是在提交服务器之前进行的,运用onsubmit方法可以在本地进行验证,如果出错了可以立即停止,不需要交给服务器

  <form action="" id="i">
    用户名 <input type="text">
    密码 <input type="password">
    <input type="submit"></form>
</div>
<script>
    var ele = document.getElementById("i");
    var user = document.querySelector("#i [type=text]")
    var pwd = document.querySelector("#i [type=password]")
    ele.onsubmit = function (e){
        if(user.value.length < 5){
            alert(user.value+"长度应该大于5")

        return false;    // 终止事件执行
        // e.preventDefault() // 阻止元素默认行为
        }
    }
</script>

当用户名长度小于5时,点击提交之后就会弹窗提示(这个过程不会传给服务器)

onchange
   <select name="provonce" id="s1">
        <option value="hebei">请选择省份</option>
        <option value="hubei">湖北省</option>
        <option value="hunan">湖南省</option>
        <option value="hebei">河北省</option>
    </select>

    <select name="provonce" id="s2">
        <option value="hebei">请选择城市</option>

    </select>
</div>
<script>
    var  data={"hunan":["长沙","岳阳","张家界"],"hubei":["武汉","襄阳","荆州"],"hebei":["石家庄","保定","张家口"]};
    var ele =  document.getElementById("s1");
    var ele2 =  document.getElementById("s2");
    ele.onchange = function (){
        var cities = data[this.value]; //Array
        ele2.options.length = 1; //1代表有一个默认显示值:请选择城市
        for (var i=0;i<cities.length;i++){
            var opt = document.createElement("option");
            opt.innerText = cities[i];
            ele2.appendChild(opt);
        }
    }
</script>

onmouse
<div id="container">
        <div id="title">使用了onmouse事件↓</div>
        <div id="list">
            <div class="item1">第一行</div>
            <div class="item2">第二行</div>
            <div class="item3">第三行</div>
        </div>
    </div>
<script>
    // 1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。

    // 2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。
    var container=document.getElementById("container");
    var title=document.getElementById("title");
    var list=document.getElementById("list");
    title.onmouseover = function(){ 
        list.style.display="block";
    }
    container.onmouseleave = function(){
        list.style.display="none";
    }
</script>

onmouseout表示鼠标悬停事件已经发生之后的动作

如果没有离开的动作,那么这三行将会一直被显示,那就需要onmouseleave,表示鼠标离开区域之后发生的动作

移开鼠标之后又恢复原来的样子

onkey
<input type="text" id="i1"/>

<script type="text/javascript">

  var ele=document.getElementById("i1");

  ele.onkeydown=function(e){
    console.log("onkeydown",e.key)
  };

  ele.onkeyup=function(e){
    console.log("onkeyup",e.keycode)
  };

onkeyup 事件会在键盘按键被松开时发生。

onkeydown 事件会在用户按下一个键盘按键时发生。

与onkeyup 事件相关的事件发生次序:

  1. onkeydown
  2. onkeypress
  3. onkeyup

onblur and onfocus
var ele = document.querySelector("#i1");

// 获取焦点事件
ele.onfocus = function () {
  console.log("in")
};

// 失去焦点事件
 ele.onblur = function () {
      if(ele.value.length<5){
        ele.value = "太短了,重新输入";
      }
}

当鼠标点击框的时候,是获取焦点事件鼠标移开以后就失去了,用法就是可以实时的进行判断,如果输入结束可以立即判断输入是否合法。

点击输入框,就输出in了,当我输入‘12’以后并且点击其他地方

冒泡区域

现有两块区域,小的c2,大的c1

<div class="c1">
        <div class="c2"></div>
    </div>


    <script>

        var ele1 = document.querySelector(".c1");
        ele1.onclick = function () {
            alert("c1区域")
        };

        var ele2 = document.querySelector(".c2");
        ele2.onclick = function (event) {
            alert("c2区域");

            // 如何阻止事件冒泡
            event.stopPropagation();
        }

    </script>

一般情况下,鼠标进入绿色区域后,会弹窗显示“c1区域”,到达蓝色部分后会依次弹窗显示“c2区域”,“c1区域”

如果想要达到蓝色区域只属于c2区域,不向外延伸,就加入一个stopPropagation

有关DOM_常用事件的更多相关文章

  1. ruby - Watir 无法找到我在 Chrome 的 DOM 检查器中看到的元素 - 2

    这是一个研究案例:......我正在尝试使用WatirRuby的API引用名为“bar”的嵌入元素。该元素由Chrome的DOM检查器显示,但我无法使用Watir的任何查找方法找到它:browser.embeds()#onlyisfoundbrowser.html.include?'bar'#=>false为什么会这样?为什么Watir不显示完整的HTML?如果我有不同框架中的元素或由Javascript初始化函数动态插入的元素,是否可以使用Watir访问它们?谢谢 最佳答案 如果元素在框架中,你必须使用这样的东西:browser.

  2. ruby - 使用 Mechanize gem 根据链接在 DOM 中的位置返回链接集合 - 2

    我正在为Mechanize而苦苦挣扎。我希望“单击”一组只能通过其位置(div#content中的所有链接)或其href来识别的链接。以上两种识别方法我都试过了,都没有成功。从文档中,我无法弄清楚如何根据链接在DOM中的位置而不是直接通过链接上的属性返回一组链接(用于单击)。其次,documentation建议你可以使用:href来匹配部分href,page=agent.get('http://foo.com/').links_with(:href=>"/something")但我让它返回链接的唯一方法是传递一个完全限定的URL,例如page=agent.get('http://foo

  3. ruby-on-rails - Rails - ActionView::Base.field_error_proc 向上移动 DOM 树? - 2

    有没有办法从传入的html_tag元素向上攀登DOM树?ActionView::Base.field_error_proc=Proc.newdo|html_tag,instance|#implementationend无论如何我可以实现这个方法来向上移动DOM树并将一个类放在父div上吗?例如:EmailAddress我想在div.email上放置一个类,而不是直接在输入/标签上放置一些东西。这可以用field_error_proc方法完成还是有一个干净的替代方法?我想避免在我对每个表单字段的View中明确地这样做。(像下面这样).email{:class=>object.errors

  4. 前端基于DOM或者Canvas实现页面水印 - 2

    🐱个人主页:不叫猫先生🙋‍♂️作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!💫系列专栏:vue3从入门到精通、TypeScript从入门到实践📢资料领取:前端进阶资料以及文中源码可以找我免费领取🔥前端学习交流:博主建立了一个前端交流群,汇集了各路大神,一起交流学习,期待你的加入!(文末有我wx或者私信)目录前言一、vue自定义指令directive讲解二、基于DOM的实现方式1.思路整理2.新建index.vue3.新建`directives`文件4.在`directives`文件下创建`index.ts`文件5.在`main.ts`中全局引

  5. ruby - 使用 ruby​​ 的特定 dom 元素的屏幕截图 - 2

    有没有办法做到this使用capybara+phantomjs。或者更复杂的东西,比如将整页屏幕截图裁剪到特定的dom元素? 最佳答案 Apullrequest已提交此功能。即将关闭,您将可以使用driver.renderselector:'#some_id`在下一个版本中。 关于ruby-使用ruby​​的特定dom元素的屏幕截图,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/

  6. ruby - 如何搜索 "text"然后从找到的节点遍历 DOM? - 2

    我有一个网页,我需要从中抓取一些数据。问题是,每个页面可能有也可能没有特定数据,或者在DOM中它的上方或下方可能有额外的数据,并且没有CSSid可言。通常我可以使用CSSid或XPath来找到我正在寻找的节点。在这种情况下我没有那个选项。我要做的是搜索“标签”文本,然后在下一个中获取数据节点:Name:JoeSmith在上面的HTML中,我会搜索:doc.search("[text()*='Name:']")获取我需要的数据之前的节点,但我不确定如何从那里导航。 最佳答案 next_element可能是您正在寻找的方法。requir

  7. javascript - 从 atom Electron 中的 webview 访问 DOM - 2

    是否可以从原子Electron桌面开发工具包中的webview元素中抓取html,我正在尝试访问DOM但我什么也没得到,我在运行时尝试了控制台中的document.links但我得到了空属性和对象作为返回?window.onresize=doLayout;varisLoading=false;onload=function(){varwebview=document.querySelector('webview');doLayout();vart=webview.executeJavaScript("console.log(document.links);");document.que

  8. javascript - 当元素在 DOM 中的位置改变时,是否有可能让 React 移动元素而不是重新创建它? - 2

    当元素在DOM中的位置发生变化时,是否有可能让React移动元素而不是重新创建它?假设我正在制作一个包含2个Pane的组件,并且我希望能够隐藏/取消隐藏一个Pane。让我们也想象一下Pane本身很重。在我的例子中,每个Pane都有2000多个元素。在我的实际代码中,当有2个Pane时,我使用了拆分器。为了只显示一个Pane,我需要移除拆分器并将其替换为一个div。下面的代码对此进行了模拟。如果只有一个Pane,它会使用div来包含该Pane。如果有2个Pane,它会使用pre来包含它们。在我的例子中,它是div有1个痛点和一个splitter有2个痛点。因此,检测document.cr

  9. javascript - 使用 Redux、React 和 react-router-dom 4.x 时从动态组件获取 ref - 2

    我有以下类(class)classMatchBoxextendsReact.Component{constructor(props){super(props);this.countdownHandler=null;this.showBlocker=true;this.start=this.start.bind(this);}start(){...}render(){...return(...);}};functionmapStateToProps(state){...}functionmatchDispatchToProps(dispatch){...}exportdefaultwit

  10. javascript - 为什么 DOM 既有 window 又有 self? - 2

    为什么DOM有一个名为self的对象和另一个名为window的对象,而它们是同一事物?更让人困惑的是window有一个名为self的属性,所以:window===window.self===self为什么会这样?我应该使用哪一个? 最佳答案 self由javascript环境定义并指向[global]对象(但不是规范的一部分,因此可能不存在),而window是DOM规范的一部分。在大多数浏览器中,window被用作[global]对象,但并非总是如此。self==window.self并不奇怪,因为它们是同一个对象-当查找self时

随机推荐