使用JavaScript和正则表达式在Internet Explorer中禁用复选框



我有一个动态预订页面,该页面使用户可以选择x在课程中用于人列表的项目数量。

一个示例:每人课程可能列出了3个复选框,但限制为2。到达2个剩余的1个复选框。

我目前拥有的解决方案在Firefox和Chrome中完美地工作,但在Internet Explorer中却没有。

解释我的代码的推理:

因为人和课程项目是动态的,为了稍后在PHP中处理选择,每个复选框都有一个动态名称。

如果每个项目都有ID,并且每个人都有ID复选框名称基于[userid_itemid]

复选框名称将遵循类似的模式,因此3个用户在页面上做出选择时
对于用户1-(1_1),(1_2),(1_3)
对于用户2-(2_1),(2_2),(2_3)
对于用户3-(3_1),(3_2),(3_3)

这是可以在Firefox和Chrome中正确禁用复选框的代码:

$(document).ready(function(){  
    $("input:checkbox").click(function() {
        var chktest="input\["+$(this).attr('id');
        var bol = $("input[name^="+chktest+"_]:checked").length >= 2;
        $("input[name^="+chktest+"_]").not(":checked").attr("disabled",bol);
    });   
});

但是,Internet Explorer(绝对在版本8中)不会以任何形状或形式限制复选框。

我上面的代码是基于此的:

限制复选框金额答案19显示了一个工作演示。

它可以在其中提供的演示中进行交叉浏览器,但是由于我的数据的性质是动态的,我的代码更为复杂,我相信这引发了问题。

选项1

我曾经与我想分享的一些自定义jQuery选择器一起写了一个博客条目。您可能会发现有一个有用的正则选择。

...至少,如果需要的话,这是如何编写自己的选择者的好起点。这是GitHub上的代码。我认为您会使用的是:attrregex

选项2

在此之外,另一个选项是在您的名字中的每个方面都在类上放置自定义属性(假定您可以控制该属性):

<input type="checkbox" name="user_1-1" data-user="1"/>
<input type="checkbox" name="user_1-2" data-user="1"/>
<input type="checkbox" name="user_1-3" data-user="1"/>
<input type="checkbox" name="user_2-1" data-user="2"/>
<input type="checkbox" name="user_2-2" data-user="2"/>
<input type="checkbox" name="user_2-3" data-user="2"/>

然后,您可以通过$('input[data-user=' + userId + ']')选择或有什么选择。

我希望其中的东西有帮助。

最新更新