2017-06-11 41 views
0

我有選擇&選項是這樣的:JQuery的比較選項與跨度值,如果真認沽期權以禁用

<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> 

想找到所有選項並與量程值進行比較。 如果某些選項具有與類get相同的值(例如)該值可以更改(我創建了跨度) 它將禁用該選項。 但它禁用所有的問題。

$('#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

我認爲這不是一個好主意,在每個'option'迭代掃描所有'.get'元素。我發佈的解決方案速度提高了2倍--3倍;) –

回答

0

您需要的時刻X雙==,當你在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; 
    } 
}); 
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')返回一個元素數組,你引用它就像它只有一個。

+0

$('#vari')。find('option')。each(function(){ x = $(this).val(); disable = true; $( '獲得')每個(函數(){ 如果(X === $(本)的.text()){ 禁用= FALSE;} }); 如果(禁用){$ (this).prop('disabled',true); } }); –

+0

謝謝,忘了每個.get和== –

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

Furthemore你有.get類的多個元素。 因此var y = $('.get').text();只會將所有值添加到一個字符串。在你的例子中輸出y88.5

因此先將這些值填入一個單獨的數組中。

比較作品是如何被其他人提及的。

的正確方法如何操作disabled財產jQuery的文檔中給出: 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); 
    } 
});