使用jQuery进行输入校验时无法找到rich:autocomplete组件ID的问题
无法匹配rich:autocomplete组件的核心原因
- RichFaces渲染
rich:autocomplete组件时,你在JSP/JSF页面上给组件声明的带_REQ后缀的ID,不会直接绑定到实际可输入的<input>标签上,而是绑定在组件生成的外层包裹容器(通常是<span>或<div>标签)上。内部真实的输入框ID会自动追加额外的框架生成后缀(比如Input、Decoration等,不同RichFaces版本后缀规则有差异),因此input[id$="_REQ"]的选择规则无法命中对应的输入元素。 - 部分版本的
rich:autocomplete会同时生成隐藏存储域和可见输入框,你配置的必填标记可能绑定在隐藏域而非可见输入框上,也会导致匹配失败。
修复方案
调整选择器逻辑,先匹配所有带_REQ后缀的元素,再根据元素类型筛选出需要处理的输入框,参考代码如下:
$('div[id*="'+sectionId+'"]').find('[id$="_REQ"]').each(function(){ let $curr = $(this); // 识别autocomplete外层容器,取内部实际输入框 if($curr.hasClass('rf-au')) { // rf-au是RichFaces autocomplete组件的默认样式类,可根据实际使用的版本调整类名 $curr = $curr.find('input[type="text"]').first(); } // 跳过非输入元素 if(!$curr.is('input')) return; console.log("found:" + $curr.attr('id') + " ,value:" + $.trim($curr.val())) // 后续校验逻辑 });
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

