JQuery:如何检索动态创建的C#复选框的id
我正在使用page_load事件中的以下代码在我的asp页面上动态生成复选框:JQuery:如何检索动态创建的C#复选框的id,jquery,Jquery,我正在使用page_load事件中的以下代码在我的asp页面上动态生成复选框: 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
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>"));
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
对于(int i=23;i<30;i++)
{
复选框cb=新复选框();
cb.ID=“chkd”+i.ToString();
cb.Text=“WI”+i.ToString();
cb.AutoPostBack=true;
cb.CssClass=“我的复选框”;
面板1.控件。添加(cb);
Panel1.Controls.Add(新的LiteralControl(“
”);
}
}
我正在尝试使用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>
$(文档).ready(函数(){
$(“.mycheckbox”)。单击(函数(事件){
$.ajax({
类型:“POST”,
url:“idChecker.aspx”,
数据:“id=”+$(this.val(),
成功:功能(msg){
如果(msg!=“None”&&&&!$(“#chkd”+msg.).is(“:选中”)){
$(“#chkd”+msg).trigger('click');
}
}
});
});
});
数据:“id=“+$(this).val()将为您提供复选框的值。如果你想要身份证,试试看
data: "id=" + $(this).attr('id')
要获取您的id复选框,请尝试以下操作
data: "id=" + $(this).prop("id"); // if you use jquery 1.6.2
或
更新
我尝试了你的脚本,并注意到.Net
为你的复选框生成了html,作为
,类名为mycheckbox
,它包含两个控件一个是你的复选框,另一个是复选框文本的
。因此,javascript操作绑定到span
,因为它具有选择器中定义的类名,而没有id
<span class="myCheckBoxes">
<input id="MainContent_chkd26" type="checkbox" name="ctl00$MainContent$chkd26">
<label for="MainContent_chkd26">WI 26</label>
</span>
将$(this).val()替换为$(this).attr('id')您可以稍微修改以调试:
请注意,$(this.attr(“id”)代码>或$(this).prop(“id”)代码>取决于jQuery的版本。注意:如果可能的话,used.prop()作为1.6.2.attr()只是调用它,如果可以的话,这样可以避免一个步骤
我确实认为您可能会使用web服务或页面方法,而不是返回整个页面(*但我也不知道您的整个解决方案)(见下文)
假设:-以及您没有直接要求的其他建议。
服务器代码查找“id”字符串。
页面方法中的示例:
在页面的.cs文件中:
[WebMethod]
public static string checkId(string id)
{
return id;
}
(请确保输入web.config设置以允许此操作)如果这不是您希望执行此操作的方式,请忽略:)
你能从.net代码中发布html吗?除了名称之外,prop
和attr
之间有区别吗?我使用的是jquery 1.6.2,我已经尝试了这两种方法,但仍然得到相同的结果。这就好像jquery无法访问id,因为控件是在服务器上生成的。可能是我在jquery的页面加载事件中调用的代码有问题。代码如下:要获取从jquery传递到页面加载事件的id,我使用Request[“id”]并尝试将该值传递到存储的进程。这是空的。我不知道如何查看Jquery代码以确保This对象的值不为null。这是否正确?是否确定已触发单击事件?
$(".myCheckBoxes input:checkbox")
$(".myCheckBoxes input[type=checkbox]")
$(".myCheckBoxes").find("input[type=checkbox]")
$(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');
}
}
});
});
});
[WebMethod]
public static string checkId(string id)
{
return id;
}
<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>
dataType: "jsond",
type: "POST",
contentType: "application/json",
converters: {
"json jsond": function(msg) {
return msg.hasOwnProperty('d') ? msg.d : msg;
}
},