2014-03-25 51 views
0

想要完全理解Jquery中的「this」是如何工作的。在多個選項中使用「this」

產生3個選擇下拉列表,錯誤消息,並且按鍵某些HTML

<select class="kwas"> 
<option value="-1">-- wybierz --</option> 
<option value="yes">tak</option> 
<option value="no">nie</option> 
</select> 

<div style="display: none;" class="error">Can't be done</div> 

<select class="kwas"> 
<option value="-1">-- wybierz --</option> 
<option value="yes">tak</option> 
<option value="no">nie</option> 
</select> 

<div style="display: none;" class="error">Can't be done</div> 

<select class="kwas"> 
<option value="-1">-- wybierz --</option> 
<option value="yes">tak</option> 
<option value="no">nie</option> 
</select> 

<div style="display: none;" class="error">Can't be done</div> 

<button class="button">Click Me!</button> 

jQuery函數:

$(".kwas").change(function(){ 
     if ($(this).val() == 'no') { 
       $('.error').hide(); 
       $('.button').show(); 
      } 
      else { 
       $('.error').show(); 
       $('.button').hide(); 
      } 
     }); 

我想才達到什麼,是不是要reapeat myslef寫一個函數,將顯示 特定選擇上的錯誤消息的值爲「是」,而不是其他值。 如果任何選擇的值爲「是」,則隱藏該按鈕。

我知道如何以醜陋的方式寫它,但如何使它優雅?

http://jsfiddle.net/szymondzumak/Z8f6n/

回答

0

感謝您的幫助!你很接近,但事實是,即使一個答案是「是」,我也需要讓.button可撤銷。在您的解決方案中,當我設置「是,是,否」的答案時,最後一個「否」使按鈕處於活動狀態。什麼對我來說是:

$(".kwas").change(function(){ 
if ($(this).val() == 'no') { 
     $(this).next('.error').hide();  
} else { 
     $(this).next('.error').show(); 
} 

if($('#a1').val() === 'yes' || 
    $('#a2').val() === 'yes' || 
    $('#a3').val() === 'yes'){ 
    $('.button').hide(); 
} else { 
    $('.button').show(); 
} 
}); 

做這項工作,但我不認爲它的優雅。所有額外的#id和討厭的,如果。 任何反饋讚賞

http://jsfiddle.net/szymondzumak/sdV93/

4

嘗試使用next()方法,它允許你用.error類發現在DOM的下一個元素,你的情況一個元素,樣品:

$(".kwas").change(function(){ 
    if ($(this).val() == 'no') { 
      $(this).next('.error').hide(); 
      $('.button').show(); 
    } else { 
      $(this).next('.error').show(); 
      $('.button').hide(); 
    } 
}); 
+0

酷的感謝!請注意,它適用於