jQuery如何实现页面加载时判断下拉框选中值含'abc'以禁用文本框
原代码的核心问题
当前代码的逻辑和预期偏差较大,主要问题有3个:
- 选择器定位错位:原代码通过
option:contains('abc')检索的是下拉框内所有文本含'abc'的选项,完全没有关联当前的选中状态,只要下拉列表里存在带'abc'的选项,这个选择器就会返回非空结果。 - 判断逻辑失效:原代码把jQuery选择器的结果放在括号后直接跟代码块的写法,本质只是创造了一个独立块级作用域,根本不是条件判断——只要选择器能匹配到任意元素(非空jQuery集合本身就是真值),块内的禁用逻辑就会无条件执行,完全起不到校验选中项的作用。
- 状态逻辑不闭环:只写了禁用的分支,没有写选中项不满足条件时的启用逻辑,就算修正了判断,选回不带'abc'的选项时输入框也不会恢复可用。
修正后的实现方案
核心思路是把判断对象从「所有带abc的选项」换成当前被选中的那一个选项,同时封装通用的状态更新逻辑,在页面加载、用户切换选项时都同步更新输入框的禁用状态,避免状态错位。
修正后的完整代码如下:
$(window).load(function() { const $scoreInput = $('#score'); const $marksSelect = $('select[name="studentmarks"]'); // 封装状态更新逻辑,供页面加载、下拉切换事件复用 function syncScoreInputState() { // 定位当前被选中的选项,读取其展示文本 const currentSelectedText = $marksSelect.find('option:selected').text(); // 直接把“文本是否包含abc”的判断结果,作为disabled属性的入参 $scoreInput.prop('disabled', currentSelectedText.includes('abc')); } // 页面加载完成后立即执行一次判断,初始化输入框状态 syncScoreInputState(); // 监听下拉框切换事件,用户更改选中值时实时更新输入框状态 $marksSelect.on('change', syncScoreInputState); });
效果说明
- 选中文本含'abc'的选项时,
#score文本框会自动进入禁用状态 - 选中文本不含'abc'的选项时,
#score文本框会恢复可编辑状态 - 每次切换下拉选项时都会重新校验,不会出现状态不更新的问题
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

