js之前的点击事件的疑问

js之前的点击事件的疑问

html代码:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<link rel="stylesheet" type="text/css" href="index.css">

</head>

<body onload="init()">

<div id="div1">

<div id="div2">

<input type="text" name="num" id="num">

</div>

<div id="div3">

<input type="button" name="" value="C">

<input type="button" name="" value="←">

<input type="button" name="" value="+/-">

<input type="button" name="" value="/">

<input type="button" name="" value="1" id="n1">

<input type="button" name="" value="2">

<input type="button" name="" value="3">

<input type="button" name="" value="*">

<input type="button" name="" value="4">

<input type="button" name="" value="5">

<input type="button" name="" value="6">

<input type="button" name="" value="-">

<input type="button" name="" value="7">

<input type="button" name="" value="8">

<input type="button" name="" value="9">

<input type="button" name="" value="+">

<input type="button" name="" value="0">

<input type="button" name="" value=".">

<input type="button" name="" value="=">

<input type="button" name="" value="m">

</div>

</div>

</body>

<script type="text/javascript" src="index.js"></script>

</html>



css代码:


*{

margin: 0px;

padding:0px;

}


#div1{

position: relative;

top: 50px;

left: 50px;

width: 180px;

}


input[type="text"]{

height: 30px;

outline: none;

line-height: 30px;

width: 175px;

text-align: right;

background-color: white;

}


input[type="button"]{

width: 35px;

height: 35px;

margin:3px 3px;

}



javascript代码:

function init(){

var text = document.getElementById("num");

text.value = 0;

text.disabled = "disabled";


var objButton = document.getElementsByTagName("input");


for ( var i = 0; i < objButton.length; i++ ){


var content = objButton[i].value;


objButton[i].onclick = function(){

alert(content);

}

}

}

function init(){

var text = document.getElementById("num");

text.value = 0;

text.disabled = "disabled";


var objButton = document.getElementsByTagName("input");


for ( var i = 0; i < objButton.length; i++ ){


var content = objButton[i].value;


objButton[i].onclick = function(){

alert(content);

}

}

}

http://img1.sycdn.imooc.com//climg/5f4f4aba09f8b17606500313.jpg


这里的 

for (var i=0; i <= objButton.length; i++ ){

     var content = objButton[i].value;    // 这里的值也都可以一次取出啊
   

    objButton.onclick = function (){

      alert(content);//这里依次获取上面的值不就可以吗?为什么这里一直获取的是最后一个值

}

}

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,在JS中,事件的监听的执行不是按照严格的执行先后顺序来的。在绑定的过程中click点击事件处理函数里的代码并没有运行。 只有在触发click事件的时候,才能知道要弹出的content值是什么,由于click方法中没有content变量,所以会去for循环中寻找,而在for循环中找到的content是for循环完的content,也就是m,所以点击所有按钮时,弹出的都是m。

祝学习愉快~

好帮手慕阿慧 2020-09-03 16:51:08

同学你好,for循环中绑定的是alert(content)事件,而不是alert(0),alert(=)等。因为在绑定的过程中click点击事件处理函数里的代码并没有运行,因此在触发click事件之前并不知道content是什么,代码此时只认为content是一个全局变量(实际上content的作用域为for循环)。上面分析了,当循环结束时content等于m,因此所有按钮点击均为alert(m)。

祝学习愉快~

  • 提问者 AbelZephyr #1
    还是不理解 ,而且 我再for循环里面定义的 var content虽然是全局变量,但是,for循环里面他是一直在变化的啊
    2020-09-03 22:45:42
好帮手慕阿慧 2020-09-03 15:54:50

同学你好,这涉及到js的解析和执行过程。同学可以使用如下代码实现:

http://img1.sycdn.imooc.com//climg/5f50a04e09e6daf804760283.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 AbelZephyr #1
    你写的这个 可以 我知道 我的意思是说 为什么我写的那个思路不对,为什么沟通真难
    2020-09-03 16:27:47
  • 提问者 AbelZephyr #2
    你注释的那个 就是我写的,一次可以弹出值,但是 objButton.onclick = function(){ alert(content); //这里的代码就只能弹出最后的value值 }
    2020-09-03 16:30:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师