jQuery - 禁用基于另一个字段选定值的输入字段

2024-01-09

我正在寻找一个可以执行此操作的 jQuery 插件。

例如:

<label><input type="checkbox" depends_on="foo=5" name="boo" ... /> Check </label>
<select name="foo" ... >
  <option value="5" selected="selected">5</option>
  <option value="15">15</option>
  <option value="25">25</option>
</select>

因此,仅当选择下面的“5”选项时,才会启用该复选框。

or

<select name="foo" depends_on="boo" ... >
  <option value="5" selected="selected">5</option>
  <option value="15">15</option>
  <option value="25">25</option>
</select>

<label><input type="checkbox" name="boo" ... /> Check </label>

在这种情况下,只有在选中“boo”时才应启用选择。

我设法想出了一个代码,可以执行如下操作:

$("*[depends_on]").each(function(){

  var source = $(this);
  var dep = $(this).attr('depends_on');
  var target = dep.split("=");

  $("*[name='"+target[0]+"']:not(:hidden)").change(function(){
    if($(this).attr('checked')) {
     source.removeClass('disabled');
     source.removeAttr('disabled');
    }
    else{
     source.attr('disabled', 'disabled');
     source.addClass('disabled');
    }

  }).change();

});

似乎对于依赖于无线电的选择工作正常,但我想为任何类型的输入或组合(或至少大多数)实现此功能,而不必为每种类型的输入编写单独的代码。

无论如何,有人知道这样的插件吗?或者也许对我上面的代码有建议? :)


干得好 :-)

http://jsfiddle.net/balupton/cxcmf/ http://jsfiddle.net/balupton/cxcmf/


(function($){
    /**
     * jQuery.fn.dependsOn
     * @version 1.0.1
     * @date September 22, 2010
     * @since 1.0.0, September 19, 2010
     * @package jquery-sparkle {@link http://www.balupton/projects/jquery-sparkle}
     * @author Benjamin "balupton" Lupton {@link http://www.balupton.com}
     * @copyright (c) 2010 Benjamin Arthur Lupton {@link http://www.balupton.com}
     * @license Attribution-ShareAlike 2.5 Generic {@link http://creativecommons.org/licenses/by-sa/2.5/
     */
    $.fn.dependsOn = function(source,value){
        var $target = $(this),
            $source = $(source),
            source = $source.attr('name')||$source.attr('id');

        // Add Data
        var dependsOnStatus = $target.data('dependsOnStatus')||{};
        dependsOnStatus[source] = false;
        $target.data('dependsOnStatus',dependsOnStatus);

        // Add Event
        $source.change(function(){
            var pass = false;
            var $source = $(this); // so $source won't be a group for radios

            // Determine
            if ( (value === null) || (typeof value === 'undefined') ) {
                // We don't have a value
                if ( $source.is(':checkbox,:radio') ) {
                    pass = $source.is(':selected:enabled,:checked:enabled');
                }
                else {
                    pass = Boolean($source.val());
                }
            }
            else {
                // We do have a value
                if ( $source.is(':checkbox,:radio') ) {
                    pass = $source.is(':selected:enabled,:checked:enabled') && ($source.val() == value);
                }
                else {
                    pass = $source.val() == value;
                }
            }

            // Update
            var dependsOnStatus = $target.data('dependsOnStatus')||{};
            dependsOnStatus[source] = pass;
            $target.data('dependsOnStatus',dependsOnStatus);

            // Determine
            var passAll = true;
            $.each(dependsOnStatus, function(i,v){
                if ( !v ) {
                    passAll = false;
                    return false; // break
                }
            });
            // console.log(dependsOnStatus);

            // Adjust
            if ( !passAll ) {
                $target.attr('disabled','disabled').addClass('disabled');
            }
            else {
                $target.removeAttr('disabled').removeClass('disabled');
            }
        }).trigger('change');

        // Chain
        return this;
    };


})(jQuery);

举个例子:

JavaScript:

    $(function(){
        $('#foo').dependsOn('#boo').dependsOn('#moo','test')
            .dependsOn(":radio[name=doo]",'true');
    });

HTML:

<div>
    <select name="foo" id="foo" >
        <option value="5" selected="selected">5</option>
        <option value="15">15</option>
        <option value="25">25</option>
    </select>
    <input type="text" name="moo" id="moo" />
    <input type="checkbox" name="boo" id="boo" />
    <input type="radio" name="doo" value="false" />
    <input type="radio" name="doo" value="true" />
    <br/>
    Type test in the textbox and check the checkbox to enable the select.
    <br/>
    By <a href="http://www.balupton.com" target="_blank">Benjamin "balupton" Lupton</a>, for <a href="http://stackoverflow.com/q/3731586/130638" target="_blank">a StackOverflow Question</a>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery - 禁用基于另一个字段选定值的输入字段 的相关文章

随机推荐

  • EF Core:使用字典属性

    有没有办法用 Entity Framework Core 填充字典属性 出于性能原因 我们喜欢在应用程序而不是数据库中进行搜索 由于列表不能很好地扩展 我们喜欢使用字典 例如 简化示例 class Course public Diction
  • console.log 的替代品?

    我想知道是否有其他方法可以在不使用控制台消息的情况下向控制台写入内容 我的项目在完成构建之前删除了所有控制台语句 但在特殊情况下 我需要找到一种通过控制台向用户显示某些内容的方法 如果没有控制台语句 这是否可能 您只能通过 Console
  • Scala 递归理解只在空列表前面添加一次,为什么?

    类似于这篇文章here https stackoverflow com questions 41471322 for comprehension in scala with recursive call 我正在学习 Scala 函数式编程
  • 如何在struts 2的s:action标签中使用ignoreContextParams属性

    在Struts 2中 有一个
  • 在 python 中连接 .m3u8 中存在的文件

    我正在尝试在 python 中连接 m3u8 播放列表中存在的 ts 文件 有什么办法可以做到吗 如果是 请解释一下如何 提前致谢 这应该可行 我只在这个简短的脚本中添加了两条注释 因为我想它几乎是不言自明的 import shutil P
  • 如何在discord.py中使用on_raw_reaction_add?

    好吧 我有一个程序 一个票务系统 它以 JSON 格式记录工单创建消息 ID 以便在程序重新启动时可以继续检查是否添加了新的反应 但我发现该消息必须加载到机器人的缓存中 但一旦重新启动 它就不会存在 所以我发现on raw reaction
  • 强制转换规范的字符值无效

    我正在使用 SQLXMLBulkLoad SQLXMLBulkload 3 0 将数据插入 SQL 2005 我的数据表有以下列 objDataTable Columns Add TaskDateTime System Type GetTy
  • Objective-C:UIViewController 中出现的键盘隐藏的 UIScroller 和 UItextfields

    我需要帮助尝试在 UIViewController 中配置键盘 a 不要将鼠标悬停在两个 UITextfields 上 因此滚动条应该正确定位 b 当用户触摸背景时键盘消失 我还没有尝试过 b 但我正在尝试 a 并且我通过谷歌搜索得到的代码
  • [System.Collections.Generic.List[string]] 作为返回值

    我需要 想要退货 System Collections Generic List string 来自函数 但它正在转换为System Object 我有这个 function TestReturn returnList New Object
  • 删除 Vim 中除正则表达式匹配之外的所有内容

    我的具体案例是一个包含大量文本和 IPv4 地址的文本文档 我想删除除 IP 地址之外的所有内容 我可以用 vglobal寻找 0 9 1 3 3 0 9 1 3 并删除所有没有IP地址的行 但之后我只知道如何搜索整行并选择匹配的文本 有更
  • 在另一个 LINQ 查询中重用 LINQ 查询结果,而无需重新查询数据库

    我遇到的情况是 我的应用程序根据用户指定的过滤条件使用 PredicateBuilder 构建动态 LINQ 查询 旁白 查看此link http petemontgomery wordpress com 2011 02 10 a univ
  • 确定程序集的加载上下文

    给定一个加载的Assembly有没有办法 在代码中 确定它被加载到 3 个加载上下文中的哪一个 默认Load 加载自 or Neither In 苏珊 库克的 选择一个有约束力的上下文 https web archive org web 2
  • 文件格式:使用 awk NR 变量造成混乱

    我是 awk 编程新手 对 NR 变量的使用有点困惑 我的代码是 awk BEGIN k NR printf s s s s n k k 1 k 2 k 3 auth data 猫 auth data 6262 6530 6661 3162
  • 访问条件格式以获取单个记录的连续形式

    我有一个连续的表格 列出了采样时间以及这些样本中不同化学物质的含量 我想格式化单元格以显示化学水平何时超出范围 我的问题是 它们在每个采样时间都会发生变化 3 对于 10 小时的样本来说太高了 但对于 30 小时来说还不错 下面是我的连续形
  • Excel:从整数部分时间转换为分钟时间

    我有一些列 其中日期值采用整数格式 即 14 06736111 1 37 我想把格式变成几分钟 我尝试使用自定义格式的 m 格式 这适用于许多单元格 但其中一些会抛出疯狂的数字 例如 对于时间为 1 37 的单元格 我得到的是 20257
  • 编写一个以 root 身份运行的 perl cgi 应用程序

    我正在编写一个 Perl CGI 应用程序 在某些时候 此 cgi 应用程序需要以 root 身份运行才能访问和写入特定文件 我想知道我到底应该如何执行此操作以及执行此操作时应采取的安全预防措施 你几乎不应该 如果您无法避免它 请创建一小段
  • Python 字符串到 unicode [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 python 中将 ASCII 字符串视为 unicode 并对其中的转义字符进行转义 https stackoverflow com questions 267436 how do i tr
  • 如何使用 Python 将专辑封面嵌入到 MP3 中?

    我一直在使用 mutagen 来读取和写入 MP3 标签 但我希望能够将专辑封面直接嵌入到文件中 以下是如何使用 mutagen 将 example png 作为专辑封面添加到 example mp3 中 from mutagen mp3
  • C++ pow 函数 - 结果无效?

    为什么 dResult 的输出无效 环境 Visual Studio 2008 int tmain int argc TCHAR argv double dN 0 091023604111478473 double dD 0 1277777
  • jQuery - 禁用基于另一个字段选定值的输入字段

    我正在寻找一个可以执行此操作的 jQuery 插件 例如