JQuery:获取ASP.NET CheckBoxList控件中复选框的值/ text / innerHtml
我有一堆由asp.net CheckBoxList控件生成的复选框。 我想获取用户在页面上控件旁边看到的文本。
使用类似的控件,如RadioButtonList,我已经能够通过这样做在jQuery中获取它们的值:
var selected = $("input:checked[id*='" + Control.id + "']");
然后循环并获取值:
var whatIwant = selections[i].value;
(在这种情况下,“值”将是我想要的文本)。
但是 – CheckBoxList渲染方式不同。 对于每个ListItem,不仅有输入,还有像这样的html标签:
正如您所看到的,输入标记本身,这是我的小jQuery查询找到的,不包括我想要的信息:“其他服务提供商”。 那是在标签上。
任何人都可以想到一个很好的解决方案 – 也许是让CheckBoxList在输入标签中呈现我需要的文本的好方法,或者是一些聪明的jQuery来找到与所选输入相对应的标签?
您可以使用已经使用的选择器(但只使用clientId),然后获取下一个兄弟(标签)并获取其文本值
例如
$("#" + Control.ClientId).next().text();
或者您可以通过使用其for属性来获取标签
$("label[for=" + Control.ClientId + "]").text();
您将不得不迭代表单元素,搜索标签并获取其内部文本,ASP .NET使用控件的ClientID将复选框包装在表中,您可以使用如下选择器:
var selection = []; $('#<%= CheckBoxList.ClientID %> :checked').each(function () { selection.push($(this).next('label').text()); });
ASP .NET为CheckBoxLists呈现的HTML如下所示:
.....
您可以在此处查看ASP .NET生成的标记示例。
让我们看看如果ListItems的文本和值有所不同? –
我已经解释了获取复选框或复选框列表的值/文本的所有可能情况,如下所示: –
情况1: – 如果CheckBoxList项目文本和值相同
SQL ASP.Net jQuery MVC IIS
调用以下js函数onclick或您需要的任何地方(如果需要调用document.ready块)
function getChkVal1() { $chk_values = $("[id$=CheckBoxList1] input[type=checkbox]:checked").map(function (index, foElem) { return $(this).next().html(); }).get(); alert($chk_values); }
情况2: – 如果CheckBoxList项目值是数字顺序(例如1,2,3 … n Ofcourse,我们多次使用这种方式)
SQL ASP.Net jQuery MVC IIS
js函数如下
function getChkVal2() { $chk_values = $("[id$=CheckBoxList2] input[type=checkbox]").map(function (index, foElem) { if ($(this).is(":checked")) return (index + 1); }).get(); alert($chk_values); }
情况3: – 如果CheckBoxList项值是其文本的一些缩写/首字母(例如对于芒果我会说“M”)
在这里,我使用了一个技巧来获取页面上复选框的值,以便在编写js脚本时可以轻松访问它。 也就是说,我正在使用带有checkboxlist的hiddenfield,它将在html解析期间获取checkboxlist中的所有可用值,并将它们存储在页面的值中。 见下文: –
SQL ASP.Net jQuery MVC IIS
我使用的是html hiddenfield而不是runat = server one,因为我们不需要使用这个hiddenfield在cs中编写任何代码。 在这里,hiddenfield的作用只不过是帮助器,它可以在编写js时获得舒适度并获得复选框的值。
现在,让我们看看脚本的外观: –
function getChkVal3() { $chk_items = $("#hdnChkBox3").val().split(","); // Get all checkboclist values from hiddenfield and convert it to array using split() // so now we have ItemIndex and Values Index in Array as parallel $chk_values = $("[id$=CheckBoxList3] input[type=checkbox]").map(function (index, foElem) { if ($(this).is(":checked")) { return ($chk_items[index]); } }).get(); alert($chk_values); }
同样,你可以在radibuttonlist / radiobutton上做。
尝试使用Control.ClientID
来源[MSDN]
例如
var selected = $("input:checked[id*='" + control.clientid + "']");
请参阅来源以获取更多选项。