Jquery 为什么不是';这不是在删除选项吗?
我正在努力寻找代码中的错误。每当选项更改时,都会触发“我的功能”。我首先循环所有选择以查看选择了哪些值。然后,我在他们中间循环,然后是他们的孩子,以隐藏所有已经采取的选择。我确信还有其他关于堆栈溢出的文章有更好的方法来实现这一点,但我宁愿使用我的原始代码。不过,我找不到我的错误。我在任何地方都放置了警报,但它们总是只调用一次,即使Jquery 为什么不是';这不是在删除选项吗?,jquery,html,Jquery,Html,我正在努力寻找代码中的错误。每当选项更改时,都会触发“我的功能”。我首先循环所有选择以查看选择了哪些值。然后,我在他们中间循环,然后是他们的孩子,以隐藏所有已经采取的选择。我确信还有其他关于堆栈溢出的文章有更好的方法来实现这一点,但我宁愿使用我的原始代码。不过,我找不到我的错误。我在任何地方都放置了警报,但它们总是只调用一次,即使.length大于1 谢谢 编辑: 我刚刚意识到问题出在.removeAttr上,所以如果有人能告诉我如何解决这个问题,那可能正是我需要的帮助 $(文档).on(
.length
大于1
谢谢
编辑:
- 我刚刚意识到问题出在
上,所以如果有人能告诉我如何解决这个问题,那可能正是我需要的帮助.removeAttr
$(文档).on(“更改”,函数(e){
var hmmm=[];
var事实=真实;
var allSelects=$(“.student three select”);
对于(变量i=0;i
选择1:
选择一个
选择1
选择2
选择2:
选择一个
选择1
选择2
选择3:
选择一个
选择1
选择2
问题是jquery的操作符[]
不返回jquery元素;它返回一个DOM元素
此元素没有方法removeAttr()
(等价物是removeAttribute()
),因此您应该将其传递给$()
,以获取jquery元素
另外,jquery没有像removeAttr()
那样添加attr()
。相反,您应该使用attr(,true)
。看
$(文档).on(“更改”,函数(e){
var hmmm=[];
var事实=真实;
var allSelects=$(“.student three select”);
对于(变量i=0;i
选择1:
选择一个
选择1
选择2
选择2:
选择一个
选择1
选择2
选择3:
选择一个
选择1
选择2
- 缓存选择器
const$allSelects=$(“.student three select”)代码>
.map()
来排列所有选定的值
- 使用
:gt(0)
跳过第一个提示选项
- 对
“hidden”
属性使用.prop()
- 使用
Array.includes()
检查所选值数组中是否存在值
const$allSelects=$(“.student three select”);
$allSelects.on(“更改”,函数(){
const sel=$allSelects.get().map(el=>el.value);//将选定值映射到数组
$allSelects.find('option:gt(0)').prop('hidden',function(){
return!this.selected&&sel.includes(this.value);
});
});代码>
选择1:
选择一个
选择1
选择2
选择3
选择2:
选择一个
选择1
选择2
选择3
选择3:
选择一个
选择1
选择2
选择3
$(文档)。on(“更改”
应为$(文档)。on(“更改”,“.student three select”,函数(e){
我已经更改了,但是我仍然不明白removeAttr为什么不起作用。好的,让我在depthWhat中看看facts
用于什么?非常好。我会在带有j的for语句之后添加一个facts=true
。否则隐藏/错误的代码实际上没有任何作用。