#jquery
#jquery
Вопрос:
Я получаю сообщение об ошибке, что параметры не определены. Раскрывающийся список отображается, но по какой-то причине параметры недоступны
dropdown.options не определен [перерыв при этой ошибке] dropdown.options.длина = objectCount(equtypeList);
$(dropdown).show(); // this works
if (ObjectCount(equipmentTypeList) > 1)
{
$(dropdown).attr("disabled", false); //this works
dropdown.options.length = ObjectCount(equipmentTypeList); //bombs out here saying options is null...wtf??
AddDropdownOption("-- Select Equipment Type--", "-1", dropdown.id);
}
Так что я не понимаю. Если я перерисовываю выпадающий список, то почему атрибут option недоступен (не используется, потому что он равен нулю). Очевидно, что он есть, поскольку я вижу, что выпадающий список снова появляется на странице … но не имеет атрибута option? Это просто не кажется правильным, что я получу null для атрибута options. Если он включен и появляется снова, значит, это допустимый выпадающий список, и я должен иметь возможность добавлять в него что-то еще.
Комментарии:
1. Что такое
dropdown
? Это переменная, которую вы определили раньше?2. var ddlEquipType = $(‘#<%=ddlEquipType . ClientID %>’);
3. У меня это работало раньше… Я просто указываю длину массива параметров, прежде чем начать добавлять к нему значения. Раньше это работало нормально … до того, как я начал скрывать и показывать этот выпадающий список. Когда я просто показывал его и отключал / включал, он работал нормально. Только сейчас я начал скрывать и показывать this..do У меня возникают проблемы с невозможностью установить эту длину массива параметров.
4. Просто любопытно. Можете ли вы показать, где вы определяете
dropdown
? Что происходит, когда вы проверяете его в консоли?5. решаемая. Я пытался изменить способ настройки моих переменных в js для хранения указателя на мои элементы dom. Например, document.getElementById(…). Но затем попытался изменить его, чтобы получить ссылку на веб-элемент управления через jquery, и, должно быть, неправильно это делает: var ddlModel = $(‘#<%=ddlModel . ClientID %>’);
Ответ №1:
Это потому dropdown
, что это объект jQuery, полученный с помощью вызова $()
. Объекты jQuery не предоставляют options
свойство, это делают базовые элементы DOM.
Вы можете использовать синтаксис индексирования или метод get() для получения элемента DOM:
dropdown[0].options.length = ObjectCount(equipmentTypeList);
// or
dropdown.get(0).options.length = ObjectCount(equipmentTypeList);
Вы также можете создать другой объект jQuery, содержащий параметры:
$("option", dropdown).length = ObjectCount(equipmentTypeList);
// or
dropdown.find("option").length = ObjectCount(equipmentTypeList);
Однако присвоение length
свойству объекта jQuery не оказывает никакого влияния на DOM, поэтому этот подход, вероятно, не даст ожидаемых результатов.
Комментарии:
1. спасибо, что прояснили это. Теперь имеет смысл … просто не знал, что указатель jQuery на объект больше не является реальным объектом? То есть, если я указываю на выпадающий элемент управления, разве я не должен все еще иметь дело с этим веб-элементом управления?
2. когда я использую getElementById, чтобы получить указатель на выпадающий список и установить его в свою переменную, мой код работает нормально. Я не понимаю, почему jQuery имеет значение. Я бы просто использовал способ jQuery … тот же способ получить элемент, хотя я бы использовал способ $(), не так ли?
3. Объекты jQuery — это скорее оболочки, чем указатели. jQuery не увеличивает элементы DOM, как это делают другие наборы инструментов, но вместо этого предоставляет методы, применимые к обернутым элементам. Чтобы выбрать элемент по идентификатору и получить этот элемент, вы должны сделать что-то вроде
$("#id")[0]
.4. и в дополнение к моим вопросам здесь, если теперь это объект jquery (а не указатель на выпадающий список), то что еще, кроме длины, я мог бы использовать?
5. Ну, я бы не стал назначать
length
в первую очередь, вместо этого делая что-то вродеdropdown.find("option").gt(ObjectCount(equipmentTypeList) - 1).remove();