我对使用Javascript/Jquery非常陌生,所以我很感谢您阅读和耐心解决一个简单的问题。这是一个多层次的问题,所以让我解释一下。使用jquery动态选择多选列表框中的所有项目
我有几个数据绑定ASP列表框。我也有几个复选框,每个列表框一个。我选中或取消选中所有Listbox项目,并使用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,而不必为每个Listbox/Checkbox组合编写自定义方法?
感谢您阅读并感谢您提供的任何帮助。
你有没有尝试在jQuery中做它,看看它是否有所作为?你基本上做同样的事情。这是他们设置属性的循环。 '$(listbox.id).find(“option”)。attr('selected','selected');' – epascarello 2013-03-05 18:04:41
我刚被拉进会议,但我会尽快回复我的桌子。我被卡住试图使用像$(“#多选项”)...然后其余的行类似于你发布。 – RockiesMagicNumber 2013-03-05 18:11:12
好吧,所以在执行代码之后:'$(multi).find(“option”)。attr(“selected”,“selected”);'看起来功能是相同的,并且IE要执行即“滚动/选择”效果。有没有办法执行这个客户端没有滚动/选择? – RockiesMagicNumber 2013-03-05 19:59:01