jQuery选择子输入元素CSS类遇.NET RadioButtonList渲染问题求助
首先咱们得揪出问题的根源:你当前用的.not(".cascadeReset")是直接筛选自身带有.cascadeReset类的<input>元素,但.NET把RadioButtonList渲染成了一个带.cascadeReset类的<table>,里面的<input>本身并没有这个类——这就导致你的过滤规则根本没命中这些目标input,自然出现功能异常了。
修正后的jQuery代码方案
你需要调整选择逻辑,改成检查每个input的祖先元素是否包含.cascadeReset类,再排除这些input。这里提供两种可行写法:
写法一:结合.not()与.closest()
var parentElement = $("#startingClass"); parentElement.find(":input") .not(".dont-enable") .not(function() { // 排除那些祖先元素中有.cascadeReset的input return $(this).closest(".cascadeReset").length > 0; }) .removeAttr('disabled');
写法二:更直观的排除子元素
如果你的场景中.cascadeReset只会出现在RadioButtonList生成的table上,还可以直接定位排除该类元素下的所有input:
var parentElement = $("#startingClass"); parentElement.find(":input:not(.dont-enable):not(.cascadeReset input)") .removeAttr('disabled');
为什么原来的代码不行?
再对照一下.NET渲染的实际结构就能明白:
你原来的
.not(".cascadeReset")只会排除自身带类的input,但这里的input嵌套在带类的table里,input本身没有这个类,所以完全没被筛选掉。而上面的修正代码要么向上查找祖先元素,要么直接定位类元素下的子input,精准命中需要排除的目标。内容的提问来源于stack exchange,提问作者Kiran Ramaswamy
相关产品推荐
相关产品推荐

