asp.netページでチェックボックスリストを使用し、データベースからデータをバインドしています。今、私は単一のアイテムを選択したいと思います。アイテムを選択すると、古い選択がクリアされ、新しいアイテムのみが選択されるとします
これを行うのを手伝ってください..
これを試して
フロントエンド
function radioMe(e) {
if (!e) e = window.event;
var sender = e.target || e.srcElement;
if (sender.nodeName != 'INPUT') return;
var checker = sender;
var chkBox = document.getElementById('<%= chks.ClientID %>');
var chks = chkBox.getElementsByTagName('INPUT');
for (i = 0; i < chks.length; i++) {
if (chks[i] != checker)
chks[i].checked = false;
}
}
<asp:CheckBoxList runat="server" ID="chks">
<asp:ListItem>Item</asp:ListItem>
<asp:ListItem>Item</asp:ListItem>
<asp:ListItem>Item</asp:ListItem>
<asp:ListItem>Item</asp:ListItem>
</asp:CheckBoxList>
バックエンド
protected void Page_Load(object sender, EventArgs e)
{
chks.Attributes.Add("onclick", "radioMe(event);");
}
しかし、これをすべて行う代わりに、RadioButtonList
コントロールを検討する必要があります
RadioButtonList に対して CheckBoxList を使用すると、回避策を考案しなくてもユーザーが選択を解除できるため、便利な場合があります。ヨギの答えに続いて、CheckBoxListのClientIDを使用するたびに関数にプラグインすることなく、簡単に再利用できるアプローチが必要でした。よぎさん、テンプレートありがとうございます。
使用法:
<asp:CheckBoxList ID="m_testControl" runat="server" data-toggle="radio" RepeatDirection="Horizontal">
<asp:ListItem Value="CON">Concur</asp:ListItem>
<asp:ListItem Value="CWI">Concur With Intent</asp:ListItem>
<asp:ListItem Value="DNC">Do Not Concur</asp:ListItem>
</asp:CheckBoxList>
JQuery 関数:
$(document).ready(function ()
{
// turn all CheckBoxLists labeled for 'radio' to be single-select
$('[data-toggle=radio]').each(function ()
{
var clientId = $(this).attr('id');
$(this).find('input').each(function ()
{
// set parent's id
$(this).attr('data-parent', clientId);
// add an onclick to each input
$(this).click(function (e)
{
// ensure proper event
if (!e) e = window.event;
var sender = e.target || e.srcElement;
if (sender.nodeName != 'INPUT') return;
// toggle off siblings
var id = $(this).attr('id');
var parent = $(this).attr('data-parent');
$('input[data-parent=' + parent + ']').not('#' + id).prop('checked', false);
});
});
});
});
RadioButtonList
単一の要素しか選択できないため、aの方が適しているように見えます。
ラジオボタンリストのサンプル
var id = "";
$("#CblProduct").on('click', ':checkbox', function () {
if (id != "")
{
$(id).attr('checked', false);
$(this).attr('checked', true);
}
if($("#CblProduct").length > 0)
{
id = this;
}
});
$('input[type=checkbox]').click(function () {
var chks = document.getElementById('<%= chkBranchRoleTransaction.ClientID %>').getElementsByTagName('INPUT');
for (i = 0; i < chks.length; i++) {
chks[i].checked = false;
}
$(this)[0].checked = true;
});
// or//
$('input[type=checkbox]').click(function () {
var chkBox = document.getElementById('<%= chkBranchRoleTransaction.ClientID %>');
var chks = chkBox.getElementsByTagName('INPUT');
for (i = 0; i < chks.length; i++) {
chks[i].checked = false;
}
$(this)[0].checked = true;
});
});[enter image description here][1]
[1]: http://i.stack.imgur.com/zzaaz.jpg
static int indexOfL=0;// the index of initial selected item
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
int i = 0;
foreach (ListItem li in CheckBoxList1.Items)
{
{
if (i != indexOfL && li.Selected)
{
indexOfL=i;
CheckBoxList1.ClearSelection();
li.Selected = true;
}
i++;
}
}}
選択したアイテムのインデックスを保存しています。変更があると、2 つの選択されたアイテムが取得されるため、indexOfL の助けを借りて、保持する適切なアイテムを取得します。このコードはサーバー側....お役に立てば幸いです...