2011-08-08 77 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; 
} 
},