我对使用 Javascript/Jquery 非常陌生,因此感谢您的阅读和您对可能是一个简单问题的耐心。这是一个多层次的问题,所以让我解释一下。
我有几个数据绑定的 ASP 列表框。我还有几个复选框,每个列表框一个。我使用 Javascript 连接了复选框,以在单击时选择或取消选择所有列表框项目。
我的目标是构建一个方法,将复选框及其相应的列表框传递给 javascript 方法,然后选择或取消选择列表框中的所有内容。我可以在 C# 中非常简单地做到这一点,但我们不能使用回发,因为页面已经很慢而且很复杂。
所以这已经在 Javascript 中工作了(我将在下面发布我的代码),但我遇到的问题是,当我们有一个更长的列表框(即 20 多个列表项)时,IE 基本上会让你看着它滚动浏览所有这些并选择它们。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;
}
}
(我已经为每个适用的列表框/复选框组合复制了这个 - 这是一个可扩展的任务)
所以对于实际问题:
如果我使用 JQuery 而不是 Javascript 来实现这个功能,我能避免整个“滚动/选择”效果吗?
如果我可以避免这种滚动效果,我如何动态地将列表框传递给 JQuery,而不必为每个列表框/复选框组合编写自定义方法?
感谢您阅读并感谢您提供的任何帮助。