事件

2017-09-28  本文已影响0人  D一梦三四年

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

var btn = document.getElementById('mybtn');
btn.onclick = function () {
    console.log(this.id);      //"mybtn"
};
btn.onclick = null;
var btn = document.querySelector('#mybtn');
var handler = function () {
    console.log(this.id);   
};
btn.addEventListener('click', handler);     //"mybtn"
btn.removeEventListener('click', handler);

2. attachEvent与addEventListener的区别?

var btn = document.querySelector('#mybtn');
btn.attachEvent('onclick',  function () {
    console.log(this === window);   //true   
});
var btn = document.querySelector('#mybtn');
btn.attachEvent('onclick',  function () {
    console.log('clicked'); 
});
btn.attachEvent('onclick',  function () {
    console.log('hello world'); 
});
//先输出 'hello world',再输出 'clicked'
var btn = document.querySelector('#mybtn');
var handler = function () {
    console.log(this.id);   
};
btn.attachEvent('onclick', handler);     //"mybtn"
btn.detachEvent('onclick', handler);

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

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

var btn = document.querySelector('#mybtn');
btn.addEventListener('onclick',  function (event) {
    console.log('clicked'); 
    event.stopPropagation();
});
document.body.addEventListener('onclick',  function () {
    console.log('hello world'); 
});
//点击 btn 时,只会输出"clicked",因为事件不会传播到 document.body
var link = document.querySelector('#mylink');
link.addEventListener('click', function (event) {
    event.preventDefault();
});

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

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>前端6班</li>
</ul>
<script>
    var ul = document.querySelector('.ct');
    ul.addEventListener('click', function (event) {
        if (event.target.tagName.toLowerCase() === 'li') {
                console.log(event.target.innerText);
            }
    });
</script>

6. 补全代码,要求:

<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 ul = document.querySelector('.ct');
    var startAdd = document.querySelector('#btn-add-start');
    var endAdd = document.querySelector('#btn-add-end');
    var content = document.querySelector('.ipt-add-content')
    startAdd.addEventListener('click', function () {
        if (content.value) {
            var addLi = document.createElement('li');
            var newText = document.createTextNode(content.value);
            addLi.appendChild(newText);
            ul.insertBefore(addLi, ul.firstChild);
        }
    });
    endAdd.addEventListener('click', function () {
        if (content.value) {
            var addLi = document.createElement('li');
            var newText = document.createTextNode(content.value);
            addLi.appendChild(newText);
            ul.appendChild(addLi);
        }
    });
    ul.addEventListener('click', function (event) {
        if (event.target.tagName.toLowerCase() === 'li') {
            console.log(event.target.innerText);
        }
    });
</script>

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

<ul class="ct">
    <li data-img="https://i.loli.net/2017/09/28/59cbfb7a36e53.jpg">鼠标放置查看图片1</li>
    <li data-img="https://i.loli.net/2017/09/28/59cbfb7ba0ceb.png">鼠标放置查看图片2</li>
    <li data-img="https://i.loli.net/2017/09/28/59cbfb7de8e23.jpg">鼠标放置查看图片3</li>
</ul>
<div class="img-preview"></div>
<script>
    var ul = document.querySelector('.ct');
    var imgPre = document.querySelector('.img-preview');
    var img = document.createElement('img');
    ul.addEventListener('mouseover', function (event) {
        if (event.target.tagName.toLowerCase() === 'li') {
            var source = event.target.getAttribute('data-img');
            img.setAttribute('src', source);
            imgPre.appendChild(img);
        }
    });
</script>
上一篇 下一篇

猜你喜欢

热点阅读