使用 JavaScript 在 HTA 中未触发 Oninput 事件

Oninput event not triggering in HTA using 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>

对于 MSHTML(MSHTA 和 IE 使用的呈现引擎),oninput 将触发输入类型 text,但将被忽略输入类型 range

尝试使用 HTA 来学习现代语言并不是一个好主意 JavaScript。 HTA 支持 JScript,所以你会经常 运行 遇到这样的情况。如果您只想使用本地文件,请使用 .htm 扩展名保存您的示例,并在任何现代浏览器(例如 Chrome、Firefox、Edge 等 运行 中保存它们。

如果您真的想编写 HTA(即为了编写像 Exe 一样可以完全访问机器的代码),那么您必须记住任何 JavaScript 示例查找必须与 IE 11 一起使用。

对于您的 HTA,请注意 IE=edge 表示“运行 在 MSHTML 提供的最新 IE 模式下”。它与 Edge 浏览器无关。由于最新的 MSHTML 版本 11 已经很长时间了(并且永远不会超过该版本),您不妨指定 IE=11 以更清楚地了解您的 HTA 所处的模式。另外,请注意超越IE=9hta:application 部分被忽略(这就是您的 HTA 未打开最大化的原因)。

但是,正如您可能发现的那样,range 输入类型需要 IE=10 或更高。因此,为了使用 range AND hta:application 属性,您需要将 HTA 拆分为两个文件,如 here.

所示