Как упоминалось в комментариях, похоже, что вы хотите получить id
выбранного option
, а не select
. Один из способов получить это - использовать свойство selectedIndex
для select
в сочетании с его коллекцией options
(вы также можете использовать selectedOptions[0]
, среди других методов).
Я взял на себя смелость «исправить» некоторые соглашения об именах; как правило, начальные буквы в верхнем регистре обозначают конструктор объекта, а не просто функцию или переменную. Кроме того, используя var
(или let
или const
, в зависимости от необходимости) до назначения переменной, по умолчанию она не становится глобальной переменной. Было сделано несколько других незначительных исправлений, которые я вам отдам.
function showDiv(nameSelect) {
console.log(nameSelect);
if (nameSelect) {
var selectedOption = nameSelect.options[nameSelect.selectedIndex];
var name = selectedOption.id;
var splitName = name.split('_');
console.log(splitName[1]);
var idOfSection = splitName[0] + '_' + splitName[1];
var optionValue = selectedOption.value;
if (optionValue == nameSelect.value) {
document.getElementById(idOfSection).style.display = "block";
} else {
document.getElementById(idOfSection).style.display = "none";
}
} else {
// Commenting this out, since splitName will be undefined in this branch...
//document.getElementById(splitName[0] + splitName[1]).style.display = "none";
}
}
Я вижу как минимум два нарушения правил POJO с указанным классом данных.
1) У класса есть открытый конструктор без аргументов
По умолчанию Kotlin не будет генерировать перегрузки для функций со значениями параметров по умолчанию ( https://kotlinlang.org/docs/reference/ java-to-kotlin-interop.html # overloads-generation )
Таким образом, ваш скомпилированный класс будет иметь только один конструктор с двухпараметрическим конструктором, и конструктор без аргументов не будет создан. Чтобы заставить компилятор Kotlin генерировать множественные перегрузки, нужно использовать аннотацию @JvmOverloads
. В вашем случае это будет использоваться в конструкторе, поэтому нам также нужно добавить ключевое слово constructor
:
data class SomeDataClass @JvmOverloads constructor
2) Все нестатические, не переходные поля в классе являются либо общедоступными (и не final) или иметь общедоступные методы получения и установки, которые следуют соглашениям об именах Java-бинов.
Поскольку вы используете ключевые слова val
, сгенерированные поля будут final
, и для них не будет сгенерировано никакого установщика. Таким образом, вы можете изменить val
на var
с, и поля больше не будут final
, а также будут генерироваться правильные методы получения и установки. (Или вы можете использовать другую аннотацию, чтобы предотвратить создание геттеров и сеттеров и выставить поле таким, как оно есть https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#instance-fields ])
Таким образом, окончательный код должен быть таким:
data class SomeDataClass @JvmOverloads constructor(
var topic: String = "",
var message: String = ""
)