转载自:https://blog.csdn.net/u013692888/article/details/52750700
前一个多月公司的前端开发人员离职,公司一直在招前端,基本上每天都有几个来面试的人,就这个面试频率,也才招了一个多月才招到。绝大部分都是死在了一道上机面试提上。题目很基础,但也很考基本功,基本上才3%左右的人做出来。当时我就在想以我的半吊子前端知识挑战一下这个题目。之前一直忙着把Android项目弄上线,修改bug,一直没时间。现在国庆节放假,发了一天时间把前端又看了下,然后理所当然的就写出来了,功能虽然完成了,但代码不怎么优雅。
题目是说有一个html页面,页面有一个按钮,点击这个按钮,弹出一个框说自己是几号按钮,并询问是否生成新按钮。 点是生成一个新按钮,新按钮也能继续响应点击事件,生成新按钮。如图
点击弹框如图。
点确定,生成新按钮,点击新按钮能继续弹窗问是否生成新按钮。并报自己是几号按钮。
分析下这道题发现难点在将生成的新按钮绑定点击事件,并能监听自己是几号按钮。解决办法是用js动态插入html代码,在插入的html代码中绑定点击事件。然后在点击事件中获取页面中所有按钮,为每一个按钮设置一个属性,用来标记自己是几号按钮。代码如下。其实也很简单的。如果有更简洁逼格更高的写法,欢迎讨论。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>测试</title>
- <head>
- <body>
- <input name="按钮" type="button" onClick="clic()" value="按钮"></input>
- <div id="content"></div>
- <script type="text/javascript">
- clic();
- function clic(){
- var bs = document.getElementsByTagName("input");
- for(var i=0;i<bs.length;i++){
- var b = bs[i];
- b.setAttribute("aaa",i);
- b.onclick = function(){
- var s = confirm("我是"+this.getAttribute("aaa")+"号按钮,是否生成新按钮");
- if(s){
- document.getElementById("content").innerHTML += "</br><input name=\"按钮\" type=\"button\" onClick=\"clic()\" value=\"按钮\"><\/input>";
- clic();
- }
- };
- }
- }
- </script>
- </body>
- </html>
小细节:1:在js代码里要手动掉一次clic方法。不然第一个按钮点两次才有反应。2:innerHtml里面对于“ " ”和“/”要进行转义。