JQuery比较选项和span值,如果true put选项被禁用

时间:2017-06-11 15:25:57

标签: jquery html css

我有选择&选项如下:

<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);
    }
});

3 个答案:

答案 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);
  }
});