Неопределенные параметры для выпадающего списка

#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();