让IE的<option>支持click事件

本文介绍了一种在不同浏览器(IE、Firefox、Opera)下实现select元素中option选项点击事件的兼容性解决方案。通过JavaScript模拟点击事件,确保在IE中也能响应option的点击,并提供了示例代码。
众所周知,在IE里, select的option是不支持onclick事件的, 而在FF 和 OPERA 里, option 是支持onclick事件的.
(safari似乎也不支持,不过暂时我还不知道如何解决safari的问题.)

虽然onchange在某些时刻可以代替 option的click事件, 但是两者并无法做到完全等价.
因为onchange只有在 你点击的option和之前的option不同时才会触发.
当select当前选中的是第一项 而你再次点击第一项时, select是不会被触发的.


下面的代码演示了一种间接实现 option onclick的方法

注意:此方案只适用于 下拉方式的单选select.


 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>
<head>
<title>select-option onclick </title>
<script type="text/javascript" >

function simOptionClick4IE(){
var evt=window.event ;
var selectObj=evt?evt.srcElement:null;
// IE Only
if (evt && selectObj && evt.offsetY && evt.button!=2
&& (evt.offsetY > selectObj.offsetHeight || evt.offsetY<0 ) ) {

// 记录原先的选中项
var oldIdx = selectObj.selectedIndex;

setTimeout(function(){
var option=selectObj.options[selectObj.selectedIndex];
// 此时可以通过判断 oldIdx 是否等于 selectObj.selectedIndex
// 来判断用户是不是点击了同一个选项,进而做不同的处理.
showOptionValue(option)

}, 60);
}
}

function showOptionValue(opt,msg){
var now=new Date();
var dt= (1900+now.getYear())+'-'+(now.getMonth()+1)+'-'+now.getDate()+
' '+now.getHours()+':'+now.getHours()+':'+now.getSeconds()+'.'+now.getMilliseconds();
var resultZone=document.getElementById('reslut');
resultZone.style.margin="10px";
resultZone.innerHTML=dt +" 时,点击了: " + (opt.text + ' = '+opt.value);
}

</script>
</head>

<body>

<select onclick="simOptionClick4IE()" >
<!-- 下面的 onclick="showOptionValue( this )" 是为 ff 和 opera而准备 -->
<option value="1" onclick="showOptionValue( this )" >aaaaa</option>
<option value="2" onclick="showOptionValue( this )" >bbbbb</option>
<option value="3" onclick="showOptionValue( this )" >ccccc</option>
</select>

<div id="reslut" ></div>
</body>
</html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <style> form{ color:blue; font-size:15px; font-weight:700; text-align:center; width:1000px; height:1000px; margin:auto; border:10px solid black; background-color: aquamarine; } </style> <form id="registratioForm" > <h1>注册表单</h1> 用户名:<input type = "text" name ="username" ><br> 密码:<input type = "password" name ="password"><br> 确认密码:<input type = "password" name ="password"><br> 注册日期:<input type = "date" name ="date"><br> 电话:<input type = "tel" name ="phone"><br> 邮箱:<input type = "email" name ="email"><br> 年龄:<input type = "text" name ="age"><br> 性别:<label><input type = "radio" name ="gender">男</label> <label><input type = "radio" name ="gender">女<br></label> 照片:<input type = "file" name ="photo"><br> 喜欢的食物:<input type = "checkbox" name ="food" value ="面条">面条 <input type = "checkbox" name ="food" value ="粥">粥 <input type = "checkbox" name ="food" value ="烧烤">烧烤<br> 学历:<select name="degree"> <option value ="1">初中</option> <option value ="2">高中</option> <option value ="3">本科</option> <option value ="4">研究生</option> <option value ="5">博士</option></select><br> <label>个人简介:</label><br> <textarea name ="information" cols="30" rows="10"></textarea><br> <input type = "submit" name ="submit"> <input type = "reset" name ="reset"><br> <input type="button" id="btt" value="点我"> <script src="jQuery.min.js"></script> <pre><p class="textchange" style=" font-size:18px ;" > 点一下文本内容即可改变文本颜色和文本大小 《《不要温和的走入那个良夜》》 Do not go gentle into that good night, Old age should burn and rave at close of day; Rage, rage against the dying of the light. Though wise men at their end know dark is right, Because their words had forked no lightning they Do not go gentle into that good night. Their frail deeds might have danced in a green bay, Wild men who caught and sang the sun in flight, And learn, too late, they grieved it on its way, Grave men, near death, who see with blinding sight And you, my father, there on the sad height, </p></pre> <button style ="border :4px double green;" onclick = "showAlert()">信息填完点此处</button> <script> let hasDoubleClicked = false; function showAlert(){ alert('撒花'); } $("#btt").click(function(){ alert("再点一次我就隐藏"); hasDoubleClicked=true; }).click(function(){ if(hasDoubleClicked){ $(this).hide(); } }); $(document).ready(function(){ $("#registratioForm").hide().fadeIn(4000); }); $("input").focus(function(){ $(this).animate({ width:'700%', backgroundColor:'#f0f0f0' },300); }).blur(function(){ $(this).animate({ width:'100%', backgroundColor:'#ffffff' },1000); alert("点一下恢复原样 点不点?"); } ).click(function(){ $(this).css({ width:'50%', backgroundColor:'white' },2000) }); $(".textchange").mousedown(function(){ $(this).css("font-size","30px"); $(this).css("color",red); }); </script> </form> </body> </html>哪里错了 为什么字体颜色改变不了
最新发布
10-22
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <h1 align="center"> ��ǩ��дActiveX�ؼ����Գ��� V1.0.0.0在</h1> <p align="center"> <font color=red>����֮ǰ����ע��ؼ�! regsvr32 UHFReadLabelActiveX.dll </font><br> </p> <hr> <body > <object classid="clsid:3ebbc1c4-0098-4921-9b1c-b9d1caa5bcee" WIDTH="0" HEIGHT="0" id="CR"></object> <p > ���ں�: <select id="nport"> <option value="1">COM1</option> <option value="2">COM2</option> <option value="3">COM3</option> <option value="4">COM4</option> <option value="5">COM5</option> <option value="6">COM6</option> <option value="7">COM7</option> <option value="8">COM8</option> <option value="9">COM9</option> <option value="10">COM10</option> </select> ������: <select id="iBaudRate"> <option value="9600">9600</option> <option value="19200">19200</option> <option value="38400">38400</option> <option value="57600" selected >57600</option> <option value="115200">115200</option> </select> <button id="btnConnect" onClick="onConnect()">����</button> <button id="btnDisconnect" onClick="onDisconnect()">�Ͽ�����</button> <hr> EPC������: <input style="width:300px" type="text" id="txtEPCLable" /> <button id="btnReadEPCLable" onClick="onReadEPCLable()">������</button> <button id="btnWriteEPCLable" onClick="onWriteEPCLable()">д����</button> <hr> <hr> TID������: <input style="width:300px" type="text" id="txtTIDLable" /> <button id="btnReadTIDLable" onClick="onReadTIDLable()">������</button> <hr> <script type="text/javascript"> function onConnect() { try { var nport = document.getElementById("nport"); var iBaudRate = document.getElementById("iBaudRate"); CR.MtConnect(nport.value,iBaudRate.value); } catch (err) { alert(err.message); } } function onDisconnect() { try { CR.MtDisconnect(); } catch (err) { alert(err.message); } } function onReadEPCLable() { try { var version = CR.MTUHF_ReadEpc(); document.getElementById("txtEPCLable").value = version; } catch (err) { alert(err.message); } } function onWriteEPCLable() { try { var cmddata = document.getElementById("txtEPCLable").value; cmddata = cmddata.replace(/\s+/g, ""); // ȥ���հ��ַ� if (cmddata.length < 2) { alert("��Ч��ʮ�������ַ�����"); return; } if (cmddata.length % 2 != 0) { alert("��Ч��ʮ�������ַ�����"); return; } var data = CR.MTUHF_WriteEpc(cmddata); document.getElementById("txtEPCLable").value = ""; } catch (err) { alert(err.message); } } function onReadTIDLable() { try { var version = CR.MTUHF_ReadTid(); document.getElementById("txtTIDLable").value = version; } catch (err) { alert(err.message); } } </script> </body> </html>
06-17
<!-- 权限管理 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="../../layui/css/layui.css"> <link rel="stylesheet" href="../../css/diy.css"> <style> .layui-body { overflow-x: scroll; } </style> </head> <body> <div class="section1"> <!-- 内容主体区域 --> <div class="manu auth" style="padding: 15px;"> <form class="layui-form" action=""> <div class="form-input-box-t layui-form-item"> <div class="input-box"> <label class="layui-form-label">权限名</label> <div class="layui-input-block input-i block"> <input type="text" name="mod_name" required lay-verify="required" autocomplete="off" class="layui-input"> <!--通过lay-verify="required"实现输入验证,确保必填字段非空--> </div> </div> <div class="input-box"> <!--查询部分--> <label class="layui-form-label">用户组</label> <div class="layui-input-block select block"> <select name="user_group" lay-filter="required" id="user_group"> <option value=""></option> </select> </div> </div> <div class="input-box"> <label class="layui-form-label">添加权限</label> <div class="layui-input-block select block"> <select name="add" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select> </div> </div> <div class="input-box"> <label class="layui-form-label">修改权限</label> <div class="layui-input-block select block"> <select name="set" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select> </div> </div> <div class="input-box"> <label class="layui-form-label">删除权限</label> <div class="layui-input-block select block"> <select name="del" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select> </div> </div> <div class="input-box"> <label class="layui-form-label">查询权限</label> <div class="layui-input-block select block"> <select name="get" lay-filter="required"> <option value=""></option> <option value="0">无</option> <option value="1">有</option> </select> </div> </div> </div> </form> <div class="buts"> <button type="button" class="layui-btn layui-btn-normal" id="inquire"><span>查询</span></button> <button type="button" class="layui-btn layui-btn-normal" id="reset"><span>重置</span></button> </div> <div class="Customize-the-box"> <div class="circle"></div> <div class="circle"></div> <div class="card-inner"></div> </div> </div> <h1>数据列表</h1> <div class="table"> <table class="layui-hide" id="newsClassification" lay-filter="newsClassification"></table> <script type="text/html" id="toolbarDemo"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-sm" lay-event="add">修改</button> </div> </script> </div> </div> <script src="../../layui/layui.js"></script> <script src="../../js/axios.min.js"></script> <script src="../../js/index.js"></script> <script src="../../js/base.js" charset="utf-8"></script> <script> var BaseUrl = baseUrl() layui.use(['element', 'layer', 'util'], function () { var element = layui.element , table = layui.table , layer = layui.layer , util = layui.util , $ = layui.$; let personInfo = JSON.parse(sessionStorage.personInfo) let user_group = personInfo.user_group let token = sessionStorage.token || null //头部事件 util.event('lay-header-event', { //左侧菜单事件 menuLeft: function (othis) { layer.msg('展开左侧菜单的操作', {icon: 0}); } , menuRight: function () { layer.open({ type: 1 , content: '<div style="padding: 15px;">处理右侧面板的操作</div>' , area: ['260px', '100%'] , offset: 'rt' //右上角 , anim: 5 , shadeClose: true }); } }); // table 事件 table.render({ elem: '#newsClassification' , toolbar: true , url: BaseUrl + '/api/auth/get_list' , headers: { 'x-auth-token': token, 'Content-Type': 'application/json' } ,limits: [10] , page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档 layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局 //,curr: 5 //设定初始在第 5 页 , groups: 1 //只显示 1 个连续页码 , first: false //不显示首页 , last: false //不显示尾页 } , cols: [[ {type: 'checkbox'} , {field: 'user_group', width: '10%', title: '用户组'} , {field: 'mod_name', width: '10%', title: '权限名称', templet: function (d) { if (d.path.replace('/'+d.table_name+'/','')=='table') { return "<div>"+d.mod_name+"后台列表</div>" } if (d.path.replace('/'+d.table_name+'/','')=='view') { return "<div>"+d.mod_name+"后台详情</div>" } if (d.path.replace('/'+d.table_name+'/','')=='list') { return "<div>"+d.mod_name+"前台列表</div>" } if (d.path.replace('/'+d.table_name+'/','')=='details') { return "<div>"+d.mod_name+"前台详情</div>" } if (d.path.replace('/'+d.table_name+'/','')=='edit') { return "<div>"+d.mod_name+"前台编辑</div>" } } } , { field: 'add', width: '10%', title: '<span>添加</span>权限', templet: function (d) { if (d.add == '0') { return "<div>无</div>" } else { return "<div>有</div>" } } } , { field: 'del', width: '10%', title: '<span>删除</span>权限', templet: function (d) { if (d.del == '0') { return "<div>无</div>" } else { return "<div>有</div>" } } } , { field: 'set', width: '10%', title: '修改权限', templet: function (d) { if (d.set == '0') { return "<div>无</div>" } else { return "<div>有</div>" } } } , { field: 'get', width: '10%', title: '<span>查询</span>权限', templet: function (d) { if (d.get == '0') { return "<div>无</div>" } else { return "<div>有</div>" } } } , { field: 'create_time', width: '15%', title: '新增时间', sort: true, templet: "<div>{{layui.util.toDateString(d.create_time, 'yyyy-MM-dd HH:mm:ss')}}</div>" } , { field: 'update_time', width: '15%', title: '更新时间', sort: true, templet: "<div>{{layui.util.toDateString(d.update_time, 'yyyy-MM-dd HH:mm:ss')}}</div>" } , {field: 'operate', title: '操作', toolbar: "#toolbarDemo"} ]] , page: true, request: { limitName: 'size' }, response: { statusName: 'code', //规定返回/Back的状态码字段为code statusCode: 200 //规定成功的状态码味200 }, parseData: function (res) { return { "code": 200, "msg": "", "count": res.result.count, "data": res.result.list } }, where: {like: 0, size: 10} }); layui.table.on('tool(newsClassification)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值" var data = obj.data; //获得当前行数据 var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值) var tr = obj.tr; //获得当前行 tr 的DOM对象 if (layEvent == "add") { let auth_id = data.auth_id // window.location = ('./view.html?' + auth_id) layopen_dateil('./view.html?' + auth_id) } }); // 请求参数: let request = {like: 0, size: 10, page: 1, mod_name: '', user_group: '',add:'',set:'',del:'',get:'',orderby: 'create_time desc'} // <span>重置</span>/Reset参数 let resetName = {like: 0, size: 10, page: 1, orderby: 'create_time desc'} fun('newsClassification', BaseUrl + '/api/auth/del', 'auth_id', request, resetName) async function get_list_user_group() { $.ajax({ url: BaseUrl + "/api/user_group/get_list", type: "get", async: false, success: function (data) { if (data && typeof data === 'string'){ data = JSON.parse(data); } if (data.result) { // 拿到单选框的父级节点 let select = document.querySelector("#user_group") let op1 = document.createElement('option') select.appendChild(op1) // 收集数据 长度 let count // 收集数据 数组 let arr = [] count = data.result.count arr = data.result.list for (let i = 0; i < arr.length; i++) { // 创建节点 let op = document.createElement('option') // 给节点赋值 op.innerHTML = arr[i].name op.value = arr[i].name // 新增/Add节点 select.appendChild(op) layui.form.render('select') } } } }); } get_list_user_group(); }); </script> </body> </html> 分析一下以上代码,不要自己加内容
05-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值