js获取html input 单选框值的问题

news/2024/7/5 5:24:17

测试代码:

ratio.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="ratio.js"></script>
</head>
<body>
    <input type="radio" name="travelmode" id="DRIVING" value="DRIVING" checked/>
    <label for="DRIVING">DRIVING</label>
    
    <input type="radio" name="travelmode" id="BICYCLING" value="BICYCLING" />
    <label for="BICYCLING">BICYCLING</label>
    
    <input type="radio" name="travelmode" id="TRANSIT" value="TRANSIT" />
    <label for="TRANSIT">TRANSIT</label>
    
    <input type="radio" name="travelmode" id="WALKING" value="WALKING" />
    <label for="WALKING">WALKING</label>
</body>
</html>

ratio.js

var radios = document.getElementsByName("travelmode");
console.log(radios)
console.log(radios.length)
for (var i = 0; i < radios.length; i++) {
  if(radios[i].checked){
      console.log("当前选中的值为:", radios[i].value)
  }
}

测试:

使用浏览器打开ratio.html,并按F12查看Console控制台输出如下图:

发现问题

console.log(radios)语句能看到数据NodeList(4)有数据,且length的值为4

而console.log(radios.length) 打印radios.length的结果却为0

因为ratios.length的实际值为0,所以程序没有进入for循环语句。

原因

    经过一番折腾,发现原来是因为js加载的顺序问题。js在head里引入,而ratio在head之后的body标签里,程序按顺序加载,js在input标签之前加载,自然加载不到input标签的数据。

解决问题

方法1.把js放在input标签之后,当input标签加载完成后,再加载js脚本。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>    
</head>
<body>
    <input type="radio" name="travelmode" id="DRIVING" value="DRIVING" checked/>
    <label for="DRIVING">DRIVING</label>

    <input type="radio" name="travelmode" id="BICYCLING" value="BICYCLING" />
    <label for="BICYCLING">BICYCLING</label>

    <input type="radio" name="travelmode" id="TRANSIT" value="TRANSIT" />
    <label for="TRANSIT">TRANSIT</label>

    <input type="radio" name="travelmode" id="WALKING" value="WALKING" />
    <label for="WALKING">WALKING</label>
    
    <script src="ratio.js"></script>
</body>
</html>

方法2.引入js的script标签加上defer属性,当页面已完成加载后,才会执行js脚本。

<script src="ratio.js" defer></script>

任选方法1和方法2其中一种方法解决,浏览器打开效果如下:

可以看到打印radios.length的结果却为4,for循环语句也执行了。

总结

从这个问题可以看出,js加载的先后顺序对程序还是有较大的影响的,这也是为什么建议把引入js的语句放在body最后的原因了。

完成!enjoy it! 


http://lihuaxi.xjx100.cn/news/1196004.html

相关文章

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

由Stanford Blockchain Accelerator、Zebec Protocol、Nautilus Chain、Rootz Lab共同主办的“ Boundless Hackathon Stanford ”主题的黑客松活动&#xff0c;即将开启。该活动旨在帮助更多的优质开发者参与到Web3世界的发展中&#xff0c;推动链上设施的创新与应用。 在5月26…

路径规划算法:基于旗鱼优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于旗鱼优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于旗鱼优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法旗鱼…

交通 | 共乘出行:基于图结构的动态多时空供需网络的均衡度量方法

​ 论文解读 郭王懿&#xff0c;孙楚天&#xff0c;陈泰劼&#xff0c;张云天 ​ 编者按 共乘出行极大地改变了人们的日常出行方式。如何高效运营背后的双边平台是极具挑战性的工作。滴滴出行、Lyft公司是其中的佼佼者。本专题将探讨双边平台运营中的一个关键问题&#xff…

生成ssh密钥(windows+linux)

要在 Windows 10 上生成 SSH 密钥&#xff0c;您可以按照以下步骤操作&#xff1a; 1.打开 PowerShell&#xff08;或者按下 Windows X 并选择 “Windows PowerShell”&#xff09;&#xff1b; 2.在 PowerShell 中输入以下命令来生成 SSH 密钥&#xff1a; ssh-keygen -t …

“本草”大模型开源,ChatGPT时代,连AI私人医生都出现了?

大家好,我是千与千寻,也可以叫我千寻,今天给大家分享的ChatGPT新应用项目,是ChatGPT模型在医学领域的应用,什么,医学领域? 是的,没错,是医学领域的ChatGPT应用,我们都知道ChatGPT是OpenAI开源的一个智能对话式引擎,今天给大家分享的项目叫“本草”。 “本草”模型是…

数据的表示与运算

目录 一、进位计数制 二、信息编码 三、定点数数据表示 四、校验码 五、定点数补码加减运算 六、标志位的生成 七、定点数的移位运算 八、定点数的乘除运算 九、浮点数的表示 十、浮点数的运算 一、进位计数制 整数部分&#xff1a; 二进制、八进制、十六进制 --…

哈夫曼树的学习

路径&#xff1a; 从一个结点往下可以到达的结点之间的通路&#xff0c;称为路径。 路径长度&#xff1a; 某一路径所经过的“边”的数量&#xff0c;称为该路径的路径长度 结点的带权路径长度&#xff1a; 若将树中节点赋给一个带有某种含义的数值&#xff0c;则该数值称…

亚马逊店铺因为ODR绩效问题店铺被封,怎么申诉?分享个申诉流程?

详情如下所见&#xff1a; 第一步 明确你的销售权限被移除的原因。 详细的分析具体导致你的销售权限被移除的原因, 绩效不好因为违反了亚马逊的销售政策和协议而被取消销售权&#xff0c;例如: ODR 超标、有效跟踪单率过低、自发货取消&#xff0c;销售二手产品等 。 怎么…