2013-10-16 82 views
0

我有一個jQuery函數,如下所示,我希望在複選框單擊時調用它。當我使用input type="checkbox"它工作正常。但我想檢查/取消選中從C#代碼(fillform())複選框,並基於該函數也必須執行從asp.net調用javascript函數複選框

但如果我設置runat="server"或如果我使用asp:checkbox然後下面的函數不會被調用。 我嘗試使用下面的代碼爲asp:checkbox以及page_load中的輸入框。但功能不叫

C#代碼

Page_load 
    { 
    chkVehicle.Attributes.Add("onclick", "toggleVehicle();"); 

    } 
    FillForm 
    { 
    chkVehicle.Checked = ObjUR.HasVehicle; 


    } 

jQuery函數

function toggleVehicle() { 
     if ($('#chkVehicle').is(':checked')) { 
      $('#divVehicle :input').removeAttr('disabled'); 
      $('#divVehicle').css({ "background-color": 'transparent' }); 
     } else { 
      $('#divVehicle :input').attr('disabled', true); 
      $('#divVehicle').css({ "background-color": 'gray' }); 
     } 
    } 

請幫助

回答

4

那是因爲asp.net追加一些東西到IDS,就像CTL ,contentplaceholder等...像ctl00_ContentPlaceHolder1_chkVehicle。相反,你可以這樣做:

function toggleVehicle() { 
     var chkVehicle = '#<%= chkVehicle.ClientID %>'; 
     if ($(chkVehicle).is(':checked')) { 
      $('#divVehicle :input').prop('disabled', false); 
      $('#divVehicle').css({ "background-color": 'transparent' }); 
     } else { 
      $('#divVehicle :input').prop('disabled', true); 
      $('#divVehicle').css({ "background-color": 'gray' }); 
     } 
    } 

或者只是指定一個類名並使用className選擇它。

或使用jQuery屬性ends-with選擇,這可能雖然轉出危險的,因爲它的通配符匹配,慢也是如此。

 if ($('[id$="chkVehicle"]').is(':checked')) { 
     .... 

或作爲@jsonscript表明

chkVehicle.Attributes.Add("onclick", "toggleVehicle('#" + chkVehicle.ClientId + "');"); 

function toggleVehicle(chkVehicle) { 

     if ($(chkVehicle).is(':checked')) { 
      $('#divVehicle :input').prop('disabled', false); 
      $('#divVehicle').css({ "background-color": 'transparent' }); 
     } else { 
      $('#divVehicle :input').prop('disabled', true); 
      $('#divVehicle').css({ "background-color": 'gray' }); 
     } 
    } 

此外代替使用onclick屬性,綁定處理程序的元件。

$(function(){ //DOM ready 
     $('#<%= chkVehicle.ClientID %>').change(toggleVehicle); 

    }); 

    function toggleVehicle() { 
     var $divVehicle = $('#divVehicle'); 
     if (this.checked) { 
      $divVehicle.css({ "background-color": 'transparent' }); 
     } else { 
      $divVehicle.css({ "background-color": 'gray' }); 
     } 
     $divVehicle.find(':input').prop('disabled', !this.checked); 
    } 

如果你不使用jQuery的真正舊版本還可以使用道具,而不是ATTR。這將設置這些屬性比attr更好

+1

此方法的替代方法是通過的id控制到javascript函數 所以你的C#是 'chkVehicle.Attributes.Add( 「點擊」, 「toggleVehicle(」 + chkVehicle.ClientId + 「);」)' 那麼你的JS會像 '函數toggleVehicle(chkBoxId){}' – jasonscript

+0

@jasonscript one more事情是支柱v/s attr。已經更新了答案。直到你的評論我都注意到內聯'onclick'上的用法。 :) – PSL

+0

非常感謝。如果我手動點擊複選框,函數就會被執行。但是當複選框的值從後面的c#代碼中設置時,那麼這個函數沒有任何作用。可以實現嗎? – sjd

1

在此代碼中:chkVehicle.Attributes.Add("onclick", "toggleVehicle();");,chkVehicle是複選框的標識。

使該複選框以「靜」,因爲當.aspx頁面中呈現是,它附加DOM到控件ID的其他ID的ID。靜態會阻止這種變化,複選框的ID將保持不變。

相關問題