2011-08-08 78 views
1

我在Page_Load事件中使用下面的代碼動態生成我的ASP頁面上的複選框的ID:JQuery的:如何檢索的C#動態創建的複選框

protected void Page_Load(object sender, EventArgs e) 
    { 
     for (int i = 23; i < 30; i++) 
     { 
      CheckBox cb = new CheckBox(); 
      cb.ID = "chkd" + i.ToString(); 
      cb.Text = "WI " + i.ToString(); 
      cb.AutoPostBack = true; 
      cb.CssClass = "myCheckBoxes"; 
      Panel1.Controls.Add(cb); 
      Panel1.Controls.Add(new LiteralControl("<br>")); 
     } 
    } 

我試圖使用jQuery根據點擊的複選框的ID執行存儲過程。但是,被點擊的框的ID始終是空字符串。我只是用JQuery讓自己的腳溼潤,所以任何幫助,將不勝感激。以下是我的JQuery代碼:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".myCheckBoxes").click(function (event) { 
      $.ajax({ 
       type: "POST", 
       url: "idChecker.aspx", 
       data: "id=" + $(this).val(), 
       success: function (msg) { 
        if (msg != "None" && !$("#chkd" + msg).is(':checked')) { 
         $("#chkd" + msg).trigger('click'); 
        } 
       } 
      }); 
     }); 
    }); 

</script> 
+0

你可以從.net代碼發佈html嗎? –

回答

1

data: "id=" + $(this).val()會給你複選框的值。如果你想在ID,嘗試

data: "id=" + $(this).attr('id') 
+0

我也試過,我仍然得到相同的結果。 – humnbass

+0

你確定點擊事件被解僱嗎? – Johnny5

1

獲得的ID,你複選框試試這個

data: "id=" + $(this).prop("id"); // if you use jquery 1.6.2 

data: "id=" + $(this).attr("id"); // if you use old version 

更新 我想你的腳本,並指出, .Net產生的HTML代碼爲CheckBox,作爲<span>,代碼名稱myCheckBoxes,它包含兩個控件,一個是複選框,另一個是<label>複選框文本。所以你的javascript動作綁定到span,因爲它有你的選擇器中定義的類名,並且它沒有id。

<span class="myCheckBoxes"> 
    <input id="MainContent_chkd26" type="checkbox" name="ctl00$MainContent$chkd26"> 
    <label for="MainContent_chkd26">WI 26</label> 
    </span> 

要獲得您的複選框ID,您應該修改您的選擇器以獲取您的範圍內的複選框。你可以使用下面的示例之一是

$(".myCheckBoxes input:checkbox") 
$(".myCheckBoxes input[type=checkbox]") 
$(".myCheckBoxes").find("input[type=checkbox]") 
+0

除了名稱之外,'prop'和'attr'之間還有區別嗎? – Johnny5

+0

http://api.jquery.com/prop/這可能會給你明確的解釋 –

+0

我正在使用jquery 1.6.2,我已經嘗試了這兩個,仍然得到相同的結果。這幾乎就像jquery無法訪問id,因爲控件是在服務器上生成的。 – humnbass

0

替換$(本).VAL()以$(本).attr( 'ID')

+0

獲取從jquery傳遞到我的頁面加載事件我正在使用請求[「ID」]並試圖將此值傳遞給我存儲的PROC。這是空的。我不知道如何看JQuery代碼來確保This對象不爲null。它是否正確? – humnbass

0

你可以稍微修改調試: 請注意,$(this).attr("id");$(this).prop("id");取決於jQuery的版本。注意使用.prop()(如果可能的話),因爲1.6.2 .attr()只是簡單地調用它,如果可以的話,你可以避免一個步驟。

我認爲你可以使用Web服務或頁面方法,而不是返回整個頁面(*,但我不知道你的整個的解決辦法)(見下文)

$(document).ready(function() { 
     $(".myCheckBoxes").click(function (event) { 
     var pString = '{"id":"' + $(this).prop("id") + '"}'; 
    //alert(pString);//uncomment to debug 
     $.ajax({ 
      type: "POST", 
      url: "idChecker.aspx/checkId", 
      data: pString, 
      success: function (msg) { 
      if (msg != "None" && !$("#chkd" + msg).is(':checked')) { 
       $("#chkd" + msg).trigger('click'); 
      } 
      } 
     }); 
     }); 
    }); 

假設: - AND您沒有直接要求的額外建議。 您的服務器代碼查找'id'字符串。的,在一個頁面方法 例如: 在.cs文件的頁面:

[WebMethod] 
public static string checkId(string id) 
{ 
    return id; 
} 

(一定要把在web.config中設置允許這樣)忽略,如果這不是你想要的方式去這個:)

<system.web> 
    <httpModules> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </httpModules> 
</system.web> 

而最後的珍聞,使用jQuery 1.6.2,您可以修改(略)中Ajax調用解釋的方式asp.net返回數據。改變這些部分並添加一個轉換器:

dataType: "jsond", 
type: "POST", 
contentType: "application/json", 
converters: { 
    "json jsond": function(msg) { 
    return msg.hasOwnProperty('d') ? msg.d : msg; 
} 
},