为什么 this.title是undefined?

为什么 this.title是undefined?

<!DOCTYPE html>
<html>

<head>
  <title> 事件</title>
</head>

<body>
  <input type='text' id='num1' />
  <select id='operate'>
    <option value='+' title='add'>+</option>
    <option value="-" title="subtract">-</option>
    <option value="*" title="multiply">*</option>
    <option value="/" title="divide">/</option>
  </select>
  <input type='text' id='num2' />
  <input type='button' value=' = ' />
  <input type='text' id='result' value="" />
  <script type="text/javascript">
    var num1 = document.getElementById("num1").value;
    var num2 = document.getElementById("num2").value;
    var sign = document.getElementsByTagName("option");
    var operate = document.getElementById("operate")
    var result = document.getElementById("result")
    var obj = {
      add: function(num1, num2) {
        return num1 + num2
      },

      subtract: function(num1, num2) {
        return num1 - num2
      },

      multiply: function(num1, num2) {
        return num1 * num2
      },

      divide: function(num1, num2) {
        return num1 / num2
      }
    }



    // for (var i = 0; i < sign.length; i++) {
    //   setSign(i)
    // }

    function setSign() {
      operate.addEventListener("change", function() {
        // result.value = obj[this.title];
        console.log(this.class)

      })
    }
    setSign()
  </script>
</body>

</html>


正在回答

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

3回答

同学你好,也是有办法的。可以使用selectedIndex。

selectedIndex是select下拉框自带的一个属性,用来表示当前选中的opation标签的索引值

打印一下:

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

效果:

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

有了这个索引值就好办了。

通过operate.options,可以拿到所有的option,

如下:
http://img1.sycdn.imooc.com//climg/5da803d809955f7207480081.jpg

控制台:

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

接下来就可以通过索引来拿到被选中的option的title了。

如下:
http://img1.sycdn.imooc.com//climg/5da8042e09c21ae908940118.jpg

控制台:
http://img1.sycdn.imooc.com//climg/5da8042c09fd0c5e13920207.jpg

同学给可以自己测试下哦。

为了更高效的为同学解答,如果还有其他疑问的话,可以新建一个问答进行提问哦。

如果帮助到了你,欢迎采纳~祝学习愉快~

好帮手慕言 2019-10-17 10:02:59

同学你好,这个就是这样规定的哦。

我们先来分析一下:

在operate的change事件里面打印this,此时this指向的就是id为operate的元素。

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

控制台:
http://img1.sycdn.imooc.com//climg/5da7ca6f09cb57d604560251.jpg

因为operate没有设置title属性,那么打印的就是空。打印结果如下:
http://img1.sycdn.imooc.com//climg/5da7cada098edf1c05680101.jpg

如果给operate元素添加title属性,那么是可以打印到的。

如下:
http://img1.sycdn.imooc.com//climg/5da7cb870928324c05120046.jpg

打印结果如下:

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

如果打印this.value,是可以获取到的哦。打印结果如下:

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

对于这种,我们只需要记住就可以了哦。同学可以动手测试下哦

如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 顾兆昱 #1
    所以我要怎么通过事件选取option的title属性呢? 没办法么?
    2019-10-17 10:05:00
好帮手慕言 2019-10-16 14:15:16

同学你好,因为这里的this指向的是select,

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

而select没有设置title,因此是undefined。

建议:这里可以使用this.value。通过value值不同,执行不同的方法

如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 顾兆昱 #1
    为什么.this.value打印出来是option的value, 而this.title就是select的title呢?
    2019-10-17 03:05:07
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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