Я бы посоветовал вам использовать разные события javascript для запуска этого поведения.Лучшее, что я могу придумать, - это использовать события onfocus
и onmouseover
.
Использование события onfocus
позволит вашей странице работать людям, которые переходят в раскрывающиеся списки, не нажимая непосредственно.на контроле;человек может использовать клавиатуру и вкладку, пока фокус не достигнет раскрывающегося списка.В качестве альтернативы (хотя, вероятно, не так актуально), человек может щелкнуть тег <label>
для управления раскрывающимся списком.Это также приведет к тому, что фокус будет установлен в раскрывающемся списке.
Использование события onmouseover
позволит вам заполнить раскрывающийся список до того, как пользователь щелкнет по нему, предотвращая необходимый второй щелчок, который вы
РЕДАКТИРОВАТЬ: Я провел некоторые эксперименты и обнаружил, что вы можете использовать событие onmousedown
вместо события onmouseover
.Преимущество состоит в том, что он не загружает данные без необходимости, если пользователь просто наводит указатель мыши на раскрывающийся список, фактически не щелкая по нему, и это не прерывает развертывание раскрывающегося списка, поэтому пользователю нужно тольконажмите один раз, чтобы развернуть его.Недостатком является то, что пользователю, возможно, придется ждать данные, так как вы ждете, пока пользователь фактически щелкнет, чтобы принять решение о загрузке данных.В зависимости от того, сколько у вас есть данных и как быстро сервер может получить данные, это ожидание может быть или не быть значительным.
Ниже приведен простой пример страницы, где я продемонстрировал использование этих двух событий javascript:
<html>
<head>
<script type="text/javascript" language="javascript">
function load(ddl)
{
if(ddl.options.length == 0)
{
ddl.options[0] = new Option("Option 1", "1", false, false);
ddl.options[1] = new Option("Option 2", "2", false, false);
ddl.options[2] = new Option("Option 3", "3", false, false);
}
}
</script>
</head>
<body>
<label for="DropDownList1">Drop Down List 1:</label>
<select id="DropDownList1" onfocus="load(this);" onmouseover="load(this);">
</select>
</body>
</html>
Я не пробовал запускать ваш пример кода, но мне кажется, что вы используете javascript для запуска нажатия кнопки, чтобы вызвать обратную передачу, чтобы вы могли заполнить элемент управления раскрывающегося спискана сервере.Если вы выполняете обратную передачу, вы не сможете избежать перезагрузки всей страницы или хотя бы части страницы, то есть раскрывающийся список не будет расширяться.
Вместо того, чтобы вызывать обратную передачу, я бы порекомендовал использовать ajax для вызова сервера, чтобы получить данные, а затем взять эти данные и использовать их для заполнения раскрывающегося списка в javascript.
Это кажетсякак хорошая статья, которая объясняет, как настроить что-то подобное: http://www.mikesdotnetting.com/Article/97/Cascading-DropDownLists-with-jQuery-and-ASP.NET Эта статья описывает, как реализовать каскадные выпадающие списки, что не совсем похоже на то, что вы пытаетесь сделать, но это довольноблизко.