我正在尝试将一个客户端事件添加到下拉列表中,我需要访问当前选定的文本。我试过了:
ddl_tech.Attributes.Add("onclick", "document.getElementById('" + chk_techreview.ClientID + "').disabled = this.options[this.selectedIndex].text.Equals(' UNASSIGNED');");
和
ddl_tech.Attributes.Add("onclick", "document.getElementById('" + chk_techreview.ClientID + "').disabled = this.text.Equals(' UNASSIGNED');");
在触发事件时,这两个都会给我带来运行时错误。
访问此文本属性客户端的正确方法是什么?
我试过了,但它没有启用复选框...
ddl_tech.Attributes.Add("onchange", "document.getElementById('" + chk_techreview.ClientID + "').disabled = this.options[this.selectedIndex].text == ' UNASSIGNED';");
解答:
好吧,除了必须使用==而不是.Equals之外,当你在服务器端设置checkbox.enabled = false时,它会调用标签中的复选框并将其设置为disabled = true;因此你必须设置checkbox.disabled = false和checkbox.parentElement.disabled = false;在客户端启用复选框!
解决方案:
ddl_tech.Attributes.Add("onchange", "document.getElementById('" + chk_techreview.ClientID + "').parentElement.disabled = (this.options[this.selectedIndex].text == 'UNASSIGNED'); document.getElementById('" + chk_techreview.ClientID + "').disabled = (this.options[this.selectedIndex].text == 'UNASSIGNED');");
感谢您的帮助!
答案 0 :(得分:3)
JavaScript中的字符串没有.Equals()
,而是使用===
运算符,如下所示:
ddl_tech.Attributes.Add("onchange", "document.getElementById('chk_techreview').disabled = ( this.options[this.selectedIndex].text === 'UNASSIGNED');");
You can give it a try here,我还将事件更改为onchange
,因为可能更多的是您所追求的内容。另外,根据您的选择,它可能只是'UNASSIGNED'
而不是' UNASSIGNED'
。
答案 1 :(得分:1)
我认为应该是:
ddl_tech.Attributes.Add("onclick", "var s = document.getElementById('" + chk_techreview.ClientID + "'); s.disabled = (s.selectedIndex == -1 || s.options[s.selectedIndex].text == ' UNASSIGNED ');");