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>

  

posted on   大宝pku  阅读(18060)  评论(2编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2011-01-10 mathematica 如何在数组中等间隔插入元素

导航

< 2012年1月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11
点击右上角即可分享
微信分享提示