Я изучаю JavaScript, используя некоторые примеры, которые я нашел в Интернете. И, работая над HTA, я столкнулся с трудностями, пытаясь понять, почему не срабатывает событие oninput. Я включил соответствующий код ниже, чтобы продемонстрировать мою проблему. Обратите внимание, что я использую совместимость с Edge в метатеге. Буду признателен за любую информацию о том, что я делаю неправильно. Спасибо.
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta http-equiv = "x-ua-compatible" content = "ie=edge"/>
<hta:application
id = ""
applicationname = ""
border = "thin"
borderstyle = "normal"
caption = "yes"
icon = ""
maximizebutton = "no"
minimizebutton = "yes"
scroll = "yes"
levelintaskbar = "yes"
singleinstance = "yes"
sysmenu = "yes"
version = "1.00"
windowstate = "maximize"
/>
</head>
<style>
body {
background-color: lightgray;
color: darkred;
font-family: "Arial";
}
h3 {
text-align: center;
}
</style>
<script type = "text/javascript">
function level() {
f = document.getElementById("x").value;
document.getElementById("x_out").innerHTML = f + " factor";
switch(document.getElementById("y").value * 1){
case 0:
type = "alpha";
break;
case 1:
type = "beta";
break;
case 2:
type = "gamma";
break;
case 3:
type = "delta";
break;
}
document.getElementById("y_out").innerHTML = type;
v = document.getElementById("z").value * 1;
document.getElementById("z_out").innerHTML = v;
}
</script>
<body onload = "level()">
<h3>Test</h3>
<p>
X:
<br>
<input type = "range" id = "x" min = "40" max = "6000" onclick = "level()">
 <span id = "x_out"></span>
</p>
Y:
<br>
<input type = "range" id = "y" min = "0" max = "3" onchange = "level()">
 <span id = "y_out"></span>
<p>
Z:
<br>
<input type = "range" id = "z" min = "0" max = "100" oninput = "level()">
 <span id = "z_out"></span>
</p>
</body>
</html>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


С MSHTML (механизм рендеринга, используемый MSHTA и IE) oninput будет запускаться с типом ввода text, но будет игнорироваться для типа ввода range.
Не стоит пытаться использовать HTA для изучения современного JavaScript. HTA поддерживают JScript, поэтому вы будете постоянно сталкиваться с подобными ситуациями. Если вы просто хотите работать с локальным файлом, сохраните свои примеры с расширением .htm и запустите их в любом современном браузере, таком как Chrome, Firefox, Edge и т. д.
Если вы действительно хотите писать HTA (то есть для того, чтобы написать код, который имеет полный доступ к машине, такой как Exe), вам нужно помнить, что любые примеры JavaScript, которые вы найдете, должны работать с IE 11.
В случае вашего HTA обратите внимание, что IE=edge означает «запускать в последнем режиме IE, предоставленном MSHTML». Это не имеет ничего общего с браузером Edge. Поскольку последней версией MSHTML является версия 11 в течение очень долгого времени (и никогда не будет выходить за ее пределы), вы также можете указать IE=11, чтобы лучше понять, в каком режиме находится ваш HTA. Кроме того, имейте в виду, что помимо IE=9, hta:application раздел игнорируется (поэтому ваш HTA не открывается в развернутом виде).
Но, как вы, наверное, заметили, для типа ввода range требуется IE=10 или выше. Поэтому, чтобы использовать атрибуты range И hta:application, вам нужно будет разделить HTA на два файла, как показано здесь.
Большое спасибо, очень ясный и полный ответ, который прояснил другие ложные идеи, над которыми я работал. Я прислушаюсь к вашим предложениям, они очень ценятся! :)