select-option点击事件
问题1:连续两次点击同一个option
时,不能触发change
事件。(value值没有发生改变)
change
事件:在元素数据发生变化时触发。该事件适用于文本域(text field)
,以及textarea
和select
元素。
当用于select
元素时,change
事件会在选择某个选项时发生。当用于text field
或textarea
时,该事件会在元素失去焦点时发生。
原因:因为select
下的option
标签是监听不到点击事件的,只能监听select
的点击事件。
解决:用点击事件去监听(但是这里不能监听option
的点击事件:因为select
下的option
标签是监听不到点击事件的,只能监听select
的点击事件。),所以这个解决方法pass。
问题2:当点击select
打开下拉框时,会触发click
事件,再次点击某个option
时会触发第二次click事件。
解决:定义一个变量,初始值为0,点击的时候判断是否为第二次点击
target
事件属性:
targe
t事件属性返回触发事件的元素。
target
属性获取最初发生事件的元素,currentTarget
属性始终引用事件侦听器触发事件的元素。
tagName
是DOM对象
的属性,用于获取DOM对象
的标签名,取出来是大写的,nodeName
,取出来的是小写的。
写法:变量.target.tagName
问题3:页面加载完成自动触发事件()。
option
标签有个selected
属性,可以设置默认的选中项(仅仅只是设置一个数值),不能触发change
事件,改变选中项select
也不能触发change事件,click
也不能触发change
事件。
解决:页面需要默认的事件,在设置完selected
属性或value
后,需要用trigger
方法来自动触发事件。
trigger()
方法:jQuery事件-trigger()方法
定义和用法:tigger()方法触发被选元素的指定事件类型
问题4::选择option
后,需要再点击一次select
才能触发事件。
解决:从chenge
事件入手。连续选择同一个option
时,select
的value
值没有发生变化,所以不能触发change
事件。所以可以设置在每次点击select
展开option
前,把select
的value
的值变为-1(不是已有的value的值),就能触发change
事件,因此,不能用,使用click
事件focus
事件。
这样做,在下一次点击select
时,select
框内的值会被清空
优化解决:设置一个隐藏的option
用来存放选中的值,select
获取焦点的时候(focus)
框内的值不会被清空
<div class="main">
<select name="" id="" class="select">
<option value="1">111</option>
<option value="2">2222</option>
<option value="3">33333</option>
<option value="4">444444</option>
</select>
</div>
$('.select').on('change',function(){
var val = $(this).val();
console.log('请求服务端数据' + val); //控制台输出
$(this).blur();
}).on('focus',function(){
$(this).val(-1);
})
优化后:
<div class="main">
<select name="" id="" class="select">
<option value="1">111</option>
<option value="2">2222</option>
<option value="3">33333</option>
<option value="4">444444</option>
<option value="5" style="display: none;"></option>
</select>
</div>
$('.select').on('change',function(){
var val = $(this).val();
console.log('请求服务端数据' + val);
$(this).blur();
}).on('focus',function(){
var selectText = $(this).find('option:selected').text(); //获取select框内的值
$(this).find('option[value=5]').text(selectText) //将获取的值存入隐藏的option中
$(this).val(5); //输出隐藏的option值(select框内的值不会在下一次点击时消失)
})
原生js获取select值的方法:
var obj = document.getElementById('select');
//获取选中项的索引
var idx = obj.selectedIndex;
//获取选中项的文本
var text = obj.options[index].text;
//获取选中项的value值
var value = obj.options[index].value;
参考:
<option>中的hassubinfo是什么?
<option hassubinfo="true"></option>
hassubinfo:是否有子信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人