получить текстовое значение выпадающего списка на стороне клиента

Я пытаюсь добавить событие на стороне клиента в раскрывающийся список, и мне нужно получить доступ к выбранному в данный момент тексту. Я пытался:

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');");

Спасибо за помощь!


person kralco626    schedule 01.09.2010    source источник
comment
Относится ли «UNASSIGNED» к option.text или option.value?   -  person Torbjörn Hansson    schedule 01.09.2010
comment
текст. Там другое значение. Но даже если я поставлю == 'abc123', когда событие сработает, оно будет оцениваться как false, и флажок должен быть disabled=false. так что я не думаю, что это может быть проблемой.   -  person kralco626    schedule 01.09.2010


Ответы (2)


В JavaScript нет .Equals() в строке, вместо этого используйте оператор ===, например:

ddl_tech.Attributes.Add("onchange", "document.getElementById('chk_techreview').disabled = ( this.options[this.selectedIndex].text === 'UNASSIGNED');");

Вы можете попробовать здесь, я также изменил событие на onchange, так как это, вероятно, больше того, что вам нужно. Кроме того, в зависимости от вашего варианта это может быть просто 'UNASSIGNED', а не ' UNASSIGNED'.

person Nick Craver    schedule 01.09.2010
comment
Я думаю, что onchange должен работать лучше. Однако это «Неназначенный», это дешевый способ сделать так, чтобы он отображался вверху отсортированного списка. Не лучший способ попасть в топ, но работает везде (SQL, asp и т.д.) Спасибо! - person kralco626; 01.09.2010
comment
@ kralco626 - Вам не хватает набора скобок, также проверьте ' UNASSIGNED' против 'UNASSIGNED' (без пробела). - person Nick Craver; 01.09.2010
comment
@Nick - я пробовал onchange и onclick. Я также пытался просто сказать .disabled = false; и это не сработало. Так что либо энвент не срабатывает, либо что-то в этом роде. Это не оценка текстового значения... - person kralco626; 01.09.2010
comment
@Nick - я пробовал это, и это не сработало: ddl_tech.Attributes.Add(onclick, document.getElementById(' + chk_techreview.ClientID + ').disabled = false;); - person kralco626; 01.09.2010
comment
@kralco626 - Когда вы просматриваете страницу, что на самом деле отображается, как выглядит тег <select>? - person Nick Craver; 01.09.2010
comment
Я работаю над этим. Когда я запускаю его локально, он просто падает, когда я перехожу к просмотру исходного кода. Мне нужно запустить его на сервере, это займет несколько минут. - person kralco626; 01.09.2010
comment
@Nick - у меня еще нет источника, но я провел некоторое тестирование, и если вместо установки флажка я включаю раскрывающийся список, он работает. Кажется, что это может быть неправильный способ включения флажка? Или что-то, потому что, если я просто изменю chk_techreview на отключенный раскрывающийся список в grdiview, он станет включенным! ??? - person kralco626; 01.09.2010
comment
@Ник, понял. Когда вы устанавливаете Enabled = false sever side для флажка, он вставляет его в теги ‹span› и устанавливает для свойства disabled значение true также на стороне клиента. Вы должны установить disabled = true как для флажка, так и для его родителя. - person kralco626; 01.09.2010

Я считаю, что это должно быть:

ddl_tech.Attributes.Add("onclick", "var s = document.getElementById('" + chk_techreview.ClientID + "'); s.disabled = (s.selectedIndex == -1 || s.options[s.selectedIndex].text == ' UNASSIGNED ');");
person Torbjörn Hansson    schedule 01.09.2010