【发布时间】:2015-08-16 20:52:13
【问题描述】:
我有一个动态创建的控件,我给出了 ID“ckbxEmp”
正如我在“查看源代码”中发现的那样,Sharepoint(或 Chrome,或“某人”)无礼而自以为是地重新识别(并命名它,并“为”它)这个控件,赋予它威尔士式的“ ctl00_ctl24_g_1caf4ad1_092d_4224_bd10_28ab028aab50_ctl00_ckbxEmp"
所以(我认为这是原因),所有通过 jQuery 操作“ckbxEmp”的尝试都失败了——也就是说,当我寻找我给它的短 ID 时,就像这样:
$(document).on("change", '#ckbxEmp', function () {
console.log('Function has been reached');
if ($(this).is(":checked")) {
alert("Checked");
} else {
alert("Not checked");
}
});
所以我可以将该代码更改为:
$(document).on("change", '#ctl00_ctl24_g_1caf4ad1_092d_4224_bd10_28ab028aab50_ctl00_ckbxEmp', function () {
console.log('Function has been reached');
if ($(this).is(":checked")) {
alert("Checked");
} else {
alert("Not checked");
}
});
...这可以作为一次性的事情,但我有许多我想要操纵的动态创建的控件,我假设它们都会被威尔士化,这会有点痛苦.
-或者,希望有一种方法可以查找不精确但“以”结尾的 ID 匹配。那可能吗?如果是这样,它的语法是什么?
注意:这是this question的后续。
更新
奇怪的是(这开始变得非常烦人),这也不起作用:
$(document).on("change", '#ctl00_ctl24_g_1caf4ad1_092d_4224_bd10_28ab028aab50_ctl00_ckbxEmp', function () {
console.log('Function has been reached');
if ($(this).is(":checked")) {
alert("Checked");
} else {
alert("Not checked");
}
});
更新 2
Robert McKee 的回答,加上这是后续问题的回答,导致了一个可行的解决方案,代码:
$(document).on("change", '[id$=ckbxEmp]', function () {
alert('Function has been reached');
if ($(this).is(":checked")) {
alert("Checked");
} else {
alert("Not checked");
}
});
“就是这个。这不是别的东西。就是这个。”——猎鹿人
【问题讨论】:
-
这应该可以,但看起来您在控件 ID 中有一个编码的 GUID,并且您的 GUID 可能正在改变。您可能希望更改为使用类而不是该类型的 ID。
-
如果我在 WebPart 上只有一个需要监视的复选框,那么类会很好。你的答案只是膨胀/花花公子。
标签: jquery dynamic sharepoint-2010