Событие Oninput не запускается в HTA с использованием JavaScript

Я изучаю 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()">
&emsp;<span id = "x_out"></span>
</p> 
Y:
<br>
<input type = "range" id = "y" min = "0" max = "3" onchange = "level()">
&emsp;<span id = "y_out"></span>
<p>
Z:
<br>
<input type = "range" id = "z" min = "0" max = "100" oninput = "level()">
&emsp;<span id = "z_out"></span>
</p>
</body>
</html>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С 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 на два файла, как показано здесь.

Большое спасибо, очень ясный и полный ответ, который прояснил другие ложные идеи, над которыми я работал. Я прислушаюсь к вашим предложениям, они очень ценятся! :)

Albert F D 11.05.2022 04:41

Другие вопросы по теме