javascript 如何取消选择列表框中的单个项目

bnl4lu3b  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(121)

我的asp页面上有一个列表框,我想知道代码背后或javascript中是否有任何方法可以取消选择列表框中的选定项。选择模式是单一的。
有什么帮助吗?我试着在selectedindexchanged上添加一个处理程序...但是如果我点击同一个selectedItem的话,它就打不到它了。

7dl7o3gd

7dl7o3gd1#

我修正了Andrew指出的问题,设置SelectedIndex = -1;但是,这产生了奇怪的行为,因为现在我会有一个checkboxList正在填充从选定的列表项我选择,并没有想法看到哪个列表项填充它后病房。
所以我所做的就是在andrew建议的基础上再加了2行代码,效果很好。

var index = lstGroups.SelectedIndex;
            lstGroups.SelectedIndex = -1;
            lstGroups.Items[index].Attributes["style"] = "background-color:lightblue";

谢谢你把我推向正确的方向!

wfveoks0

wfveoks02#

如果您的SelectionMode="Single"需要在第二次单击时取消选择某个项目,可以使用以下解决方法。
在你的页面中创建一个属性来保存最后一次使用session选择的列表项的值。我假设你的列表框中选择的值总是int

public int ListBoxLastSelected
{
    get
    {
        if (Session["ListBoxLastSelected"] != null)
            return Convert.ToInt32(Session["ListBoxLastSelected"]);
        return -1;

    }
    set { Session["ListBoxLastSelected"] = value; }
}

创建以下方法

private void EnableListboxDeselect()
{
    if (!IsPostBack)
    {
        // Register a postback event whenever you click on the list item
        ClientScriptManager cs = Page.ClientScript;
        lstMyList.Attributes.Add("onclick", cs.GetPostBackEventReference(lstMyList, "clientClick"));
        Session["ListBoxLastSelected"] = null;
    }
    if (IsPostBack)
    {
        // Ensure the postback is from js side
        if (Request["__EVENTARGUMENT"] != null && Request["__EVENTARGUMENT"] == "clientClick")
        {
            if (CorpListLastSelected == Convert.ToInt32(lstMyList.SelectedValue))
            {
                lstMyList.ClearSelection();
                CorpListLastSelected = -1;
            }
            else
            {
                ListBoxLastSelected= Convert.ToInt32(lstMyList.SelectedValue);
            }
        }
    }
}

在Page_Load上添加以下代码

protected void Page_Load(object sender, EventArgs e)
{
     EnableListboxDeselect();
}

相关问题