2016-01-29 21 views
0
$("body").on("change", "input[type='checkbox'],input[type=radio]", function(event){ 
    $("input[type='checkbox']").on('change',function() { 
    var that = this; 

    if (!$(this).parent().hasClass("remember-label")){ 
     $(this).parent().css("background-color", function() { 
      return that.checked ? "#C0E9F7" : ""; 
     }); 
    } 

    }); 

    $("input[type=radio]").on('click',function() { 
    $(this).parents().eq(1).siblings().css("backgroundColor",""); 
    $(this).parents().eq(1).css("backgroundColor","#C0E9F7"); 

    }); 

}); 

雖然我猜這應該可行,但它只適用於單選按鈕。由於每次內容動態變化,我必須把兩個選擇器,因爲有時單選按鈕被添加到DOM和其他一些複選框。Jquery代表事件只在兩個選擇器中的一個上工作

問題是,輸入的點擊區域變得無法點擊,除非您明確地單擊複選框或單選按鈕而不是覆蓋整個區域的標籤。

這裏是HTML(有軌的,但你可以瞭解結構)

<label for="choice_<%= choice.id %>"> 
      <%= radio_button_tag("choice","#{choice.id}",false,class:"radio big-radio") %> 
      <% if choice.image? %> 
       <%= image_tag rewrite_url(choice.image_url(:resized)), class:"choice-image" %> 
      <% else %> 
       <%= choice.description %> 
      <% end %> 

      </label> 

代碼爲單選按鈕,但同樣適用於複選框。

+1

不綁定在BOU另一個事件nd事件。 – Jai

+0

你能澄清嗎? –

+0

爲什麼在事件處理程序中創建事件處理程序?那不會不停地添加更多的事件處理程序嗎?爲什麼不在頁面加載時創建一次事件處理程序? – David

回答

0

爲什麼你需要使用事件處理中的事件處理程序..只是,你可以使用它像這樣

$(document).ready(function(){ 
    $("body").on("change", "input[type='checkbox']",function() { 
     var that = this; 
     if (!$(this).parent().hasClass("remember-label")){ 
      $(this).parent().css("background-color", function() { 
       return that.checked ? "#C0E9F7" : ""; 
      }); 
     } 
    }); 
    $("body").on("click", "input[type=radio]" ,function() { 
     $(this).parents().eq(1).siblings().css("backgroundColor",""); 
     $(this).parents().eq(1).css("backgroundColor","#C0E9F7"); 
    }); 
}); 

注:確保您有jQuery的

+0

是的,這是更清潔,但我仍然嘗試了這一點。它每次只綁定一個輸入。我的意思是想象我有3個輸入複選框,當我點擊下一個,複選框或單選按鈕可能會出現。出於某種原因(仍與您的代碼一起),代碼適用於兩種輸入類型之一,直到我刷新頁面並重新開始,它可能只使用單選按鈕。這是否有意義?另一種單選按鈕變得完全不可選,除非我明確點擊複選框/收音機,其中覆蓋很多區域的標籤應觸發該選項。添加html以上 –

+0

@PetrosKyriakou請更新此https://jsfiddle.net/mohamedyousef1980/o70t66ja/與您的代碼,讓我們知道發生了什麼 –

+0

我不能因爲有軌道代碼動態呈現包含複選框或廣播的部分文件按鈕,我想綁定在新創建的動態複選框/單選按鈕 –

0

你應該綁定只有一次:

$("body").on("change", "input[type='checkbox'],input[type=radio]", function(event){ 
    // here you can check if this is check box or radio 

     if($(this).is(":checkbox")) { 
      // do this 
     }else{ 
      // do for radios 
     } 

}); 
+0

現在嘗試了這一點,可悲的是,它只適用於單選按鈕複選框有問題。它僅適用於您第一次檢查複選框。之後,當我動態地替換複選框時,覆蓋複選框的標籤變得無法點擊,因爲單選按鈕一切正常。 –

相關問題