2010-08-10 109 views
5

使用jQuery我希望能夠點擊一個元素,它也會檢查它的相關單選按鈕。我有這個工作正常,直到我們必須添加runat =「服務器」到單選按鈕。當單選按鈕runat =「server」時用jQuery檢查一個單選按鈕?

當我將此它可以防止工作我jQuery的功能,我無法弄清楚如何避開它,繼承人簡化了代碼的版本:

HTML

<input type="radio" runat="server" id="sector1Radio" name="SectorGroup" title="Sector1" /> 

jQuery的

$('#SomethingElse').click(function() { 
    $('input[title=Sector1]').attr('checked','checked'); 
}); 

我發現當它轉換爲.net控件而不是checked =「checked」(就像它通常那樣),它只是被檢查,所以我改變了它,但在檢查在多個瀏覽器的DOM中,我的單選按鈕沒有被檢查:-(

有沒有其他方法可以使用jQuery檢查runat =「server」的單選按鈕?

乾杯!

+1

添加中用runat =「服務器」應該不會影響你的代碼。你也該屬性添加到「SomethingElse」元素,因爲它可能會改變所呈現的ID? – Paddy 2010-08-10 14:40:47

+0

啊,我沒認爲它會影響它,我沒有將它添加到'SomethingElse',這是一個錨標籤,如果有幫助嗎? – 2010-08-10 14:45:57

+1

@ wyane我剛測試過的屬性runat =「s erver「,它似乎工作正常...看起來像一個衝突,你在同一頁面中使用任何其他的JavaScript框架? – manraj82 2010-08-10 15:27:11

回答

2

我覺得你的問題是,輸入的ID不再sector1Radio而是ctl00_sector1Radio或類似的東西。如果您的輸入控件位於例如一個ContentPlaceHolder控件(使用母版頁時)。

你能檢查生成的HTML代碼(在瀏覽器中)來驗證是否是這種情況?輸入控件的標識是什麼?

如果是這樣的話,你需要生成你的js jQuery代碼

$('#SomethingElse').click(function() { 
    $('input[title=Sector1]').attr('checked','checked'); 
}); 
從代碼隱藏

使SomeThingElse被替換爲控制客戶端ID。

+0

$('#<%= SomethingElse.ClientID%>')。click(function(){('input [title = Sector1]')。attr('checked',' '; }); 更好的方法是使用$('#[id $ ='SomethingElse']') – Khodor 2011-04-26 14:57:42

0

我有同樣的問題。要使用jQuery UI的,讓您的radiobuttons好一個有寫:

<div id="radio"> 
<input type="radio" id="radio1" runat="server" /> 
<label for="radio1">The label of the radio button</label> 
... 
</div> 

<script type="text/javascript"> 
$('#radio').buttonset(); 
</script> 

輸入標籤的ID必須在標籤的for屬性被正確引用。如果網頁位於母版頁內,則輸入標籤的ID將被修改爲類似ctl00_Something_radio1的內容,並且標籤的for屬性不再引用輸入標籤。在ASP.NET中注意這一點!

+0

我的答案嚴重失真:( – 2010-08-30 13:46:18

1

。是(「:勾選」)適用於ASP.NET單選按鈕和複選框

$('#SomethingElse').click(function() { 
    $('input[title=Sector1]').is(':checked'); 
}); 
0

嘗試使用

$('input[title=Sector1]').attr('checked',true); 

$('input[title=Sector1]').attr('checked',false); 

也許

$('#SomethingElse').click(function() { 
    $('input[title=Sector1]').attr('checked',!$('input[title=Sector1]').attr('checked')); 
}); 
0

正如其他人的建議,ASP.net不會產生與你指定的相同ID的HTML。

快速的解決方案:

  • 您可以繼續使用該ID,但要求jQuery來檢查ID的結束,而不是,例如:

    $(「輸入[ID $ = 'sector1Radio'] 「)。是(」:檢查「);

  • 或檢查針對的標題和名稱尼科建議

  • 使用類元件,其不被ASP.net實現,例如

    < INPUT TYPE =「無線電」 RUNAT =「服務器」 (「input.sector1Radio」)is(「:checked」);(「input.sector1Radio」);(=「sector1Radio」)class =「sector1Radio」name =「SectorGroup」title =「Sector1」/ >

最好的辦法是查看生成的HTML代碼,看看ID是給你的,那麼你可以使用適當的jQuery選擇,因爲生成的ID可能有不同的擴展名取決於您是否使用母版頁等。

0

如果您正在使用MasterPage或正在動態創建控件,那麼很可能控件ID正在重命名#SomethingElse變爲#MainContent_SomethingElse。

檢查此操作的最簡單方法是使用適用於Firefox或Chrome的WebDeveloper插件。 轉到信息 - >顯示元素信息,然後選擇有問題的對象。它會給你它的ID,班級,以及祖先和孩子的信息。 檢查ID是否由.NET動態更改。

如果是這樣的話:

爲了防止這種情況,在服務器端代碼,你可以使用下面的屬性來創建靜態ID的

SomethingElse.ClientIDMode = ClientIDMode.Static; 

然後,您可以在您引用的jQuery

$('#SomethingElse').click(function() { 
      if ($('input[title=Sector1]').attr('checked')) { 
      //execute event 
}); 
0

我認爲會發生的事情是,在ASP NET中,複選框和單選按鈕在輸入後生成「輸入」和「範圍」。所以你只需要選擇輸入。

你可以試試:

$('.classname input[type=checkbox]').each(function() { 
     this.checked = true; 
}); 
0

這裏包括兩個:尋找控制和執行的檢查。在ASP.NET中,您的控件的實際ID和名稱最終會根據它出現的runat =「server」容器進行更改,即使這些容器沒有ID。

呈現ASP。.NET控件總是使用相同的名稱結束,因爲你開始使用,所以標籤,如:

<input type="radio" runat="server" id="sector1Radio" title="Sector1" /> 

可能最終會被渲染爲

<input type="radio" runat="server" id="ctl0$ctl0$sector1Radio" name="ctl0_ctl0_SectorGroup" title="Sector1" /> 

你可以找到這個元素,它被渲染,如果連後您在JQuery中使用「包含」選擇語法。因此,要找到這個元素,一旦呈現,你可以使用:

$("input[type='radio'][id*='$sector1Radio']") 

這句法會發現其ID中包含「$ sector1Radio」任何單選按鈕

一旦你的元素,你可以選中或取消選中它使用以下代碼,您可以通過其他元素的點擊事件調用該代碼。

// check the radio button 
$("input[type='radio'][id*='$sector1Radio']").attr('checked', true);  

// uncheck the radio button 
$("input[type='radio'][id*='$sector1Radio']").attr('checked', false); 

最後一件事......如果你只是想文本塊按下時,按一下按鈕(包裝在一個標籤和AssociatedControlId屬性設置爲你的單選按鈕的控件的名稱,像這樣。 ..

<input type="radio" runat="server" id="sector1Radio" title="Sector1" /> 
<asp:label runat="server" id="lblsector1Radio" associatedControlID="sector1Radio">clicking here clicks and unclicks the radio button</asp:label>