前端学习

事件(进阶9作业)

2017-06-07  本文已影响83人  Feiyu_有猫病

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

var btnClick = document.getElementById('btnClick');
    btnClick.onclick = function showMessage() {
        alert(this.id);
    };

这样处理,事件处理程序被认为是元素的方法,事件处理程序在元素的作用域下运行,this就是当前元素,所以点击button结果是:btnClick
这样还有一个好处,我们可以删除事件处理程序,只需把元素的onclick属性赋为null即可。

var btnClick = document.getElementById('btnClick');
    btnClick.addEventListener('click', function() {
        alert(this.id);
    }, false);

上面代码为button添加了click事件的处理程序,在冒泡阶段触发,与上一种方法一样,这个程序也是在元素的作用域下运行,不过有一个好处,我们可以为click事件添加多个处理程序。
通过addEventListener添加的事件处理程序只能通过removeEventListener移除,移除时参数与添加的时候相同。

题目2: attachEvent与addEventListener的区别?

题目3: 解释IE事件冒泡和DOM2事件传播机制?

事件冒泡图解 DOM2事件流图解

题目4:如何阻止事件冒泡? 如何阻止默认事件?

function stopPropagation(e) {
    if (e.stopPropagation)
        e.stopPropagation();
    else
        e.cancelBubble = true;
}
function preventDefault(e) {
    if (e.preventDefault)
        e.preventDefault();
    else
        e.returnValue = false;
}

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

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>前端6班</li>
</ul>
<script>
var list = document.querySelector(".ct");
list.addEventListener("click",function(e){
  console.log(e.target.innerText);
},false);
</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 addStart = document.querySelector("#btn-add-start");
var addEnd = document.querySelector("#btn-add-end");
var content = document.querySelector(".ipt-add-content");
var list = document.querySelector(".ct");

addStart.addEventListener("click",function(){
  if(content.value !== ""){
    var newLi = document.createElement("li");
    newLi.innerText = content.value;
    list.insertBefore(newLi,list.firstChild);
  }
});

addEnd.addEventListener("click",function(){
  if(content.value !== ""){
    var newLi = document.createElement("li");
    newLi.innerText = content.value;
    list.appendChild(newLi);
  }
});

list.addEventListener("click",function(e){
  console.log(e.target.innerText);
});
</script>

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

<ul class="ct">
    <li data-img="https://img.haomeiwen.com/i5197150/10626c1cd3c69f34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">鼠标放置查看图片1</li>
    <li data-img="https://img.haomeiwen.com/i5197150/45b12c1e785da832.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">鼠标放置查看图片2</li>
    <li data-img="https://img.haomeiwen.com/i5197150/ec33c6d63888fd4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">鼠标放置查看图片3</li>
</ul>
<div class="img-preview"></div>
<script>
var list = document.querySelector(".ct");
var preview = document.querySelector(".img-preview");
var newimg = document.createElement("img");

list.addEventListener("mouseover",function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    newimg.src = e.target.getAttribute('data-img');
    preview.appendChild(newimg);
  }
});

list.addEventListener("mouseout",function(){
  preview.removeChild(newimg);
});
</script>
上一篇 下一篇

猜你喜欢

热点阅读