jquery radio/checkbox change 事件不能触发的问题
需求
< input type="radio" id="need" name="need" value="0" />启用 < input type="radio" id="need" name="need" value="1" />禁用 < br /> < input type="text" value="hello"/> < input type="button" value="ok"/> |
我想让radio来控制下面的两个控件的启用与禁用
(不要说用checkbox,我是必须为了掩饰radio的功能)
尝试
使用 change 事件似乎是可以的。
jquery的文档中(http://api.jquery.com/change/)说,change事件在元素的值发生改变时触发。
The change
event is sent to an element when its value changes. This event is limited to<input>
elements, <textarea>
boxes and <select>
elements. For select boxes, checkboxes, and radio buttons, the event is fired immediately when the user makes a selection with the mouse, but for the other element types the event is deferred until the element loses focus.
但是change事件对radio并不凑效。StackOverflow上也有相关讨论:
http://stackoverflow.com/questions/5831615/jquery-mobile-radio-group-change
http://stackoverflow.com/questions/964961/jquery-radio-onchange-toggle-class-of-parent-element
你可以很容易的测试一下
< html > < head > < script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></ script > </ head > < body > < input type="radio" id="need" name="need" value="0" />启用 < input type="radio" id="need" name="need" value="1" />禁用 < br /> < input type="text" value="hello"/> < input type="button" value="ok"/> < div id="log"></ div > < script type="text/javascript"> $(document).ready(function () { $("#need").change(function () { $("#log").append($("< p />").text("fired")); }); }); </ script > </ body > </ html > |
只有前一个radio选择时才触发change事件,非常奇怪。
分析
错误非常弱智,因为我是使用的 id 作为筛选器!重复id只能选中第一个!坑爹啊有木有!
< html > < head > < script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></ script > </ head > < body > < div id="needradio"> < input type="radio" id="need" name="need" value="1" />启用 < input type="radio" id="need" name="need" value="0" />禁用 </ div > < input type="text" value="hello"/> < input type="button" value="ok"/> < div id="log"></ div > < script type="text/javascript"> $(document).ready(function () { $("#needradio :radio").change(function () { $("#log").append($("< p />").text("fired")); setEnable($(this).val()=="1"); }); }); function setEnable(b) { var ips = $("input").not(":radio").add("textarea"); if (b) ips.removeAttr("disabled"); else ips.attr("disabled", true); } </ script > </ body > </ html > |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2011-01-10 mathematica 如何在数组中等间隔插入元素