我有选择&选项如下:
<select id="vari" name="variation" data-variation="US Shoe Size (Men's)">
<option id="var8">8</option>
<option id="var8.5">8.5</option>
<option id="var9">9</option>
<option id="var9.5">9.5</option>
<option id="var10">10</option>
<option id="var10.5">10.5</option>
<option id="var11">11</option>
<option id="var11.5">11.5</option>
<option id="var12">12</option>
<option id="var13">13</option>
<option id="var14">14</option>
</select>
,例如(隐藏的跨度),如下所示:
<span class="get">8</span>
<span class="get">8.5</span>
想要找到所有选项并与span值进行比较。 如果某个选项具有相同的值,例如带有类get的span(例如),则可以更改此值(我已创建了span) 它将禁用该选项。 但问题是它禁用所有。
$('#vari').find('option').each(function() {
var x = $(this).val();
var y = $('.get').text();
if(x = y){
this.disabled=true;
}
});
这里出了什么问题?
解决方案:::
$('#vari').find('option').each(function() {
x = $(this).val();
disable = true;
$('.get').each(function() {
if(x === $(this).text()){
disable = false;
}
});
if(disable){
$(this).prop('disabled', true);
}
});
答案 0 :(得分:0)
你需要一个双==
x和y总是等于你在if语句中设置x = y
相同(请注意.get
是你的jQuery类$('.get').text()
可以将一个文本数组变得如此简单,以至于如果有一个类.get
的跨度超过一个。)
$('#vari').find('option').each(function() {
var x = $(this).val();
var y = $('.get').text();
if(x == y){
this.disabled=true;
}
});
答案 1 :(得分:0)
这里有一些小问题。首先,你需要一个嵌套循环才能以这种方式工作,其次,你在if中的比较实际上是将y分配给x,而不是比较它们。在Javascript中,您必须使用多个等于'=='或甚至更具体的'==='来比较两件事。
var x,
disable;
$('#vari').find('option').each(function() {
x = $(this).val();
disable = false;
$('.get').each(function() {
if(x === $(this).text()){
disable = true;
}
});
if(disable){
$(this).prop('disabled', true);
}
});
我没有对此进行测试,但我认为它应该对你有用。在你的循环中,你遇到的问题之一是你的$('。get')。text()。 $('。get')返回一个元素数组,你引用它就像它只得到一个。
答案 2 :(得分:0)
您的代码存在许多问题:
$('#vari').find('option').each(function() { // .each is a loop function
var x = $(this).val();
var y = $('.get').text(); // so why is this done in every iteration?
if(x = y){ // = must be ==
this.disabled=true; // this is not the right way. Use jquery.prop()
}
});
此外,您有多个.get
类元素。
所以var y = $('.get').text();
只会将所有值添加到字符串中。示例中的y
输出:88.5
。
首先在单独的数组中填充这些值。
其他人已经提到了比较的工作原理。
jQuery Docs中给出了如何操作disabled
属性的正确方法:
http://api.jquery.com/prop/#prop2
请使用console.log(myVarName);
调试您的代码。它的许多产出已在SO上得到很好的讨论。所以你会更快地找到解决方案:)
工作原理:
var y = [];
$('.get').each(function() {
y.push($(this).text());
});
$('#vari').find('option').each(function() {
var x = $(this).val();
if (y.includes(x)) {
$(this).prop('disabled', true);
}
});