Изменение выбранного значения выпадающего списка с помощью jQuery
У меня есть выпадающий список с известными значениями. Я пытаюсь установить в выпадающем списке определенное значение, о существовании которого я знаю, используя jQuery. Используя обычный JavaScript, я бы сделал что-то вроде:
ddl = document.getElementById("ID of element goes here");
ddl.value = 2; // 2 being the value I want to set it too.
Однако мне нужно сделать это с помощью jQuery, поскольку я использую CSS-класс для своего селектора (дурацкие ASP.NET клиентские идентификаторы...).
Вот несколько вариантов, которые я пробовал:
$("._statusDDL").val(2); // Doesn't find 2 as a value.
$("._statusDDL").children("option").val(2) // Also failed.
Как я могу сделать это с помощью jQuery?
Обновление
Как оказалось, я все сделал правильно с первого раза:
$("._statusDDL").val(2);
Когда я помещаю предупреждение чуть выше, все работает нормально, но когда я убираю предупреждение и запускаю его на полную мощность, то получаю ошибку
Не удалось установить выбранное свойство. Неверный индекс
Я не уверен, что это ошибка jQuery или Internet Explorer 6 (я предполагаю, что Internet Explorer 6), но это ужасно раздражает.
jQuery's documentation states:
Такое поведение реализовано в
jQuery
версий1.2
и выше.Скорее всего, вам нужно именно это:
Со скрытым полем вам нужно использовать вот так:
или
Просто к вашему сведению, вам не нужно использовать классы CSS для этого.
Вы можете написать следующую строку кода, чтобы получить правильное имя управления на клиенте:
ASP.NET правильно отобразит идентификатор управления внутри jQuery.
Просто попробуйте с
, а не с
Посмотрев на некоторые решения, это сработало для меня.
У меня есть один раскрывающийся список с некоторыми значениями, и я хочу выбрать то же значение из другого раскрывающегося списка... Поэтому сначала я вставил переменную
selectIndex
моего первого раскрывающегося списка.Затем я выбираю этот индекс в своем втором раскрывающемся списке.
Примечание:
Я думаю, это самое короткое, надежное, общее и элегантное решение.
Потому что в моем случае я использую атрибут данных выбранного параметра вместо атрибута value. Поэтому, если у вас нет уникального значения для каждого варианта, метод выше - самый короткий и сладкий!!
Эти решения предполагают, что каждый элемент в ваших выпадающих списках имеет значение val () , относящееся к их позиции в выпадающем списке.
Все немного сложнее, если это не так.
Чтобы прочитать выбранный индекс выпадающего списка, вы должны использовать это:
Чтобы установить выбранный индекс выпадающего списка, вы должны использовать это:
Обратите внимание, что функция prop () требует JQuery v1.6 или более поздней версии.
Посмотрим, как бы вы использовали эти две функции.
Предположим, у вас был раскрывающийся список имен месяцев.
Я знаю, что это старый вопрос, и вышеуказанные решения работают нормально, за исключением некоторых случаев.
Подобно
Если у нас есть раскрывающийся список с заголовком «Классификация данных»:
Я сталкивался с этим много раз при загрузке данных с вызова Ajax. Я тоже использую .NET, и при использовании селектора jQuery требуется время, чтобы настроить его на clientId. Чтобы исправить проблему, с которой вы сталкиваетесь, и избежать необходимости добавлять свойство
setTimeout
, вы можете просто поместить «async: false
» в вызов Ajax, и это даст DOM достаточно времени, чтобы объекты вернулись. что вы добавляете к выбору. Небольшой образец ниже:Другой вариант - установить параметр управления ClientID = «Static» в .net, а затем вы можете получить доступ к объекту в JQuery с помощью установленного вами идентификатора.
Просто примечание - я использовал селекторы подстановочных знаков в jQuery, чтобы захватить элементы, которые запутаны идентификаторами ASP.NET CLient - это тоже может вам помочь:
Обратите внимание на подстановочный знак id * - он найдет ваш элемент, даже если имя «ctl00 $ ctl00 $ ContentPlaceHolder1 $ ContentPlaceHolder1 $ MyDropDown»
Я использую функцию расширения, чтобы получить идентификаторы клиентов, вот так:
Затем вы можете вызвать элементы управления ASP.NET в jQuery следующим образом:
ClientIDMode = "Статический"
Используйте
$ ("select [name $ = 'MyDropDown']") .val ()
.Как вы загружаете значения в выпадающий список или определяете, какое значение нужно выбрать? Если вы делаете это с помощью Ajax, то причина, по которой вам нужна задержка перед выбором, может заключаться в том, что значения не были загружены в момент выполнения рассматриваемой строки. Это также объясняет, почему все работает, когда вы помещаете в строку оператор оповещения перед установкой статуса, поскольку действие оповещения дает достаточную задержку для загрузки данных.
Если вы используете один из методов jQuery' Ajax, вы можете указать функцию обратного вызова, а затем поместить
$("._statusDDL").val(2);
в свою функцию обратного вызова.Это более надежный способ решения проблемы, поскольку можно быть уверенным, что метод выполнится, когда данные будут готовы, даже если это займет более 300 мс.
В моем случае я смог заставить его работать с помощью метода .attr ().