使用 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()">
 <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>
对于 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=9
,hta:application
部分被忽略(这就是您的 HTA 未打开最大化的原因)。
但是,正如您可能发现的那样,range
输入类型需要 IE=10
或更高。因此,为了使用 range
AND hta:application
属性,您需要将 HTA 拆分为两个文件,如 here.
所示
我正在学习 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>
对于 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=9
,hta:application
部分被忽略(这就是您的 HTA 未打开最大化的原因)。
但是,正如您可能发现的那样,range
输入类型需要 IE=10
或更高。因此,为了使用 range
AND hta:application
属性,您需要将 HTA 拆分为两个文件,如 here.