2011-04-28 42 views
38

我有一個應用程序,當某個單選按鈕被選中時顯示一個div,然後在未選中單選按鈕時隱藏該div。問題在於單選按鈕附加的更改事件僅在選中單選按鈕時被調用,而不是在選中另一個時(不選中前一個)。我當前的代碼如下:監控何時單選按鈕未被選中

<form name="newreport" action="#buildurl('report.filters')#" method="post"> 
    <dl class="oneColumn"> 
     <dt class="first"><label for="txt_name">Name</label></dt> 
     <dd><input type="text" name="name" id="txt_name" class="text" /></dd> 
     <dt><strong>Type</strong></dt> 
     <dt><input type="radio" name="type" id="rdo_list" value="list" checked="checked" /><label for="rdo_type" style="display:inline;">List</label></dt> 
     <dd>List a group of records</dd> 
     <dt><input type="radio" name="type" id="rdo_fields" value="fields" /><label for="rdo_fields" style="display:inline;">Field Breakdown</label></dt> 
     <dd>Breaks down distinct field values for comparison</dd> 
     <dt><input type="radio" name="type" id="rdo_history" value="history" /><label for="rdo_history" style="display:inline;">Historical Comparison</label></dt> 
     <dd>Provides record changes over a group of years for growth comparisons</dd> 
     <dt><input type="radio" name="type" id="rdo_breakdown" value="breakdown" /><label for="rdo_breakdown" style="display:inline;">Student Breakdown</label></dt> 
     <dd>Breaks down students by school, district or grade</dd> 
     <div class="reportyear"> 
      <dt><label for="txt_year">Year to Report</label></dt> 
      <dd><input type="text" name="year" id="txt_year" class="text" value="#year(Rc.yearstart)#" /></dd> 
     </div> 
     <div class="date-spans" style="display:none;"> 
      <dt><label for="txt_yearstart">Year Start</label></dt> 
      <dd><input type="text" name="yearstart" id="txt_yearstart" class="text" value="#evaluate(year(Rc.yearstart)-5)#" /></dd> 
      <dt><label for="txt_yearend">Year End</label></dt> 
      <dd><input type="text" name="yearend" id="txt_yearend" class="text" value="#year(Rc.yearstart)#" /></dd> 
     </div> 
    </dl> 
</form> 


<script type="text/javascript"> 
    $(function(){ 
     $('##rdo_history').change(function(e){ 
      var isChecked = $(this).attr(checked); 
      var $datespan = $('form .date-spans'); 
      var $year = $('form .reportyear'); 

      if(isChecked){ 
       $year.css({display:'none'}); 
       $datespan.fadeIn('fast'); 
      }else{ 
       $datespan.css({display:'none'}); 
       $year.fadeIn('fast'); 
      } 
     }); 
    }); 
</script> 

這似乎是一個非常簡單的腳本,但該事件僅被調用的檢查事件,而不是在取消選中事件。誰能告訴我爲什麼?

+0

如果你想要單選按鈕的「當前」值(相對於加載HTML時的值),那麼你必須**使用jQuery'.val()'而不是'.attr()',參見http://stackoverflow.com/questions/8312820/jquery-val-vs-attrvalue – 2014-07-07 11:52:13

回答

61

處理收音機組上的更改事件,而不是每個按鈕。然後看看哪一個被檢查。

下面是一些未經測試的代碼,希望顯示了我說的:)...

$("input[name='type']").change(function(e){ 
    if($(this).val() == 'history') { 
     $year.css({display:'none'}); 
     $datespan.fadeIn('fast'); 
    } else { 
     $datespan.css({display:'none'}); 
     $year.fadeIn('fast'); 
    } 

}); 
+1

檢查單選按鈕是否被選中的更通用的方法是if($(this).is(':checked')) ',請參閱http://stackoverflow.com/questions/2272507/find-out-if-radio-button-is-checked-with-jquery – 2014-07-07 11:54:19

+4

@AdrienBe,我不相信在監視單選按鈕集合時工作。你需要知道選擇哪一個。 – Brian 2014-07-07 15:54:00

+0

這是行不通的,但是下面將會:'$(「input:radio [name ='managerelradio']:checked」)。val();' 參見:http://stackoverflow.com/questions/ 7723505 /獲取 - 值從無線電基團的使用,jquery的 – tolmark 2016-04-28 16:08:30

7

注意此行爲時獲得無線電輸入值:

$('input[name="myRadio"]').change(function(e) { // Select the radio input group 

    // This returns the value of the checked radio button 
    // which triggered the event. 
    console.log($(this).val()); 

    // but this will return the first radio button's value, 
    // regardless of checked state of the radio group. 
    console.log($('input[name="myRadio"]').val()); 

}); 

所以$('input[name="myRadio"]').val()不會像您所期望的那樣返回無線電輸入的檢查值 - 它會返回第一個單選按鈕的值。