事件

2017-02-05  本文已影响0人  饥人谷_全

DOM0 事件和DOM2级在事件监听使用方式上有什么区别?

DOM0:Element节点对象有事件属性,可以指定监听函数。

window.onload = doSomething;

div.onclick = function(event){
  console.log('触发事件');
};
使用这个方法指定的监听函数,只会在冒泡阶段触发。

DOM2通过Element节点、document节点、window对象的addEventListener方法,也可以定义事件的监听函数。

window.addEventListener('load', doSomething, false);

注: 没有DOM1

--

attachEvent与addEventListener的区别?

IE并不支持addEventListener和removeEventListener方法,而是实现了两个类似的方法

使用attachEvent添加事件处理程序可以如下

<input id="btnClick" type="button" value="Click Here" />

<script type="text/javascript">
    var btnClick = document.getElementById('btnClick');
    var handler=function() {
        alert(this.id);
    }
    btnClick.attachEvent('onclick', handler);
</script>
使用attachEvent添加的事件处理程序可以通过detachEvent移除,条件也是相同的参数,匿名函数不能被移除。

<input id="btnClick" type="button" value="Click Here" />

<script type="text/javascript">
    var btnClick = document.getElementById('btnClick');

    var handler=function() {
        alert(this.id);
    }

    btnClick.attachEvent('onclick', handler);
    btnClick.detachEvent('onclick', handler);
</script>

在添加事件处理程序事addEventListener和attachEvent主要有几个区别


解释IE事件冒泡和DOM2事件传播机制?


如何阻止事件冒泡? 如何阻止默认事件?


有如下代码,要求当点击每一个元素li时控制台展示该元素的文本内容。不考虑兼容

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>前端6班</li>
</ul>
<script>
    var ulElement = document.getElementsByClassName('ct')[0];
    ulElement.addEventListener('click',function(e){
        console.log(e.target.innerText);
    })
</script>

补全代码,要求:
当点击按钮开头添加时在<li>这里是</li> 元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在最后一个 li 元素后添加用户输入的非空字符串.
当点击每一个元素li时控制台展示该元素的文本内容。

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>任务班</li>
</ul>
<input class="ipt-add-content" placeholder="添加内容"/>
<button id="btn-add-start">开头添加</button>
<button id="btn-add-end">结尾添加</button>
<script>
    var inputElement = document.getElementsByClassName('ipt-add-content')[0];
    var ulElement = document.getElementsByClassName('ct')[0];
    ulElement.addEventListener('click',function(e){
        console.log(e.target.innerText);
    })
    var btnStart = document.getElementById('btn-add-start');
    btnStart.addEventListener('click',function(e){
        var newLiElement = document.createElement('li');
        if(inputElement.value !=='' && inputElement.value.length > 0){
            newLiElement.textContent = inputElement.value;
            ulElement.insertBefore(newLiElement,ulElement.firstChild);
        }   
    })
    var btnEnd = document.getElementById('btn-add-end');
    btnEnd.addEventListener('click',function(e){
        var newLiElement = document.createElement('li');
        if(inputElement.value !=='' && inputElement.value.length > 0){
            newLiElement.textContent = inputElement.value;
            ulElement.insertBefore(newLiElement,ulElement.lastChild.nextSibling);
        }
    })
</script>

补全代码,要求:当鼠标放置在li元素上,会在img-preview里展示当前li元素的data-img对应的图片。

<ul class="ct">
    <li data-img="http://img.mukewang.com/53d60af3000171a002560191.jpg">鼠标放置查看图片1</li>
    <li data-img="http://img.mukewang.com/53d60af3000171a002560191.jpg">鼠标放置查看图片2</li>
    <li data-img="http://img.mukewang.com/53d60af3000171a002560191.jpg">鼠标放置查看图片3</li>
</ul>
<div class="img-preview"></div>
<script>
    var ulElement = document.getElementsByClassName('ct')[0];
    var imgElement = document.createElement('img');
    var divElement = document.getElementsByClassName('img-preview')[0];
    divElement.appendChild(imgElement);
    ulElement.addEventListener('mouseover',function(e){      
        imgElement.src = e.target.getAttribute('data-img');
    })
</script>
上一篇下一篇

猜你喜欢

热点阅读