私は Javascript/Jquery を使用するのに非常に慣れていないため、読んでいただき、単純な問題である可能性が高いことをご理解いただき、ありがとうございます。これは少し多層的な質問なので、説明させてください。
データバインドされた ASP リストボックスがいくつかあります。リストボックスごとに1つずつ、いくつかのチェックボックスもあります。Javascriptを使用してチェックボックスを配線し、クリック時にすべてのリストボックス項目を選択または選択解除します。
私の目標は、チェックボックスとそれに対応するリストボックスを javascript メソッドに渡し、リストボックス内のすべてを選択または選択解除する単一のメソッドを構築することでした。これは C# で非常に簡単に行うことができますが、ページが既に遅く複雑であるため、ポストバックを使用することはできません。
したがって、これはすでに Javascript で動作します (この下に私のコードを投稿します)。それらすべてをスクロールして、それらすべてを選択します。Chrome にはこの問題はなく、Firefox は少なくともはるかに高速ですが、IE は 75% 以上のお客様が使用しているブラウザーです。
ASP:
<asp:ListBox ID="StatusListBx" runat="server" DataSourceID="StatusLds"
DataTextField="Status" DataValueField="StatusID" Width="140px" Height="55px" AppendDataBoundItems="true"
SelectionMode="Multiple"/>
<asp:LinqDataSource ID="StatusLds" runat="server"
ContextTypeName="ElementDataConnector.ElementDBDataContext"
Select="new (StatusID, Status)" Where="StatusID < 4" TableName="Lookup_Status" >
</asp:LinqDataSource>
<br />
<asp:CheckBox id="SelectAllProjectStatusChkbx" runat="server" Text="Select All" />
C#:
protected void Page_Load(object sender, EventArgs e)
{
SelectAllProjectStatusChkbx.Attributes.Add("onclick", "selectDeselect(" + StatusListBx.ClientID + ",this)");
}
Javascript:
function selectDeselect(listbox, checkbox) {
if (checkbox.checked) {
var multi = document.getElementById(listbox.id);
for (var i = 0; i < multi.options.length; i++) {
multi.options[i].selected = true;
}
} else {
var multi = document.getElementById(listbox.id);
multi.selectedIndex = -1;
}
}
(適用可能なリストボックス/チェックボックスの組み合わせごとにこれを複製しました - これはスケーラブルなタスクです)
実際の質問に:
この機能に Javascript ではなく JQuery を使用した場合、その「スクロール/選択」効果全体を回避できますか?
そのスクロール効果を回避できる場合、リストボックス/チェックボックスの組み合わせごとにカスタムメソッドを記述するのではなく、リストボックスを動的に JQuery に渡すにはどうすればよいですか?
読んでいただきありがとうございます。提供されたヘルプに感謝します。