如何使 JQuery 在 HTA 应用程序中工作
How to make JQuery work in HTA application
我想将我的 Web 应用程序转换为 HTA 应用程序。
这是我的整个 HTA 文件:
<!DOCTYPE html>
<html lang="en-US">
<HTA:APPLICATION applicationname="Test" border="no" caption="yes" showintaskbar="no" singleinstance="yes" sysmenu="yes" selection="no" innerborder="no" scroll="yes"/>
<head>
<title>Test</title>
<meta http-equiv="x-ua-compatible" content="ie=11"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
var numRows = 2,
ti = 5;
var tableCount = 1;
var index = 1;
window.standBy = function() {
var sum = 0;
$(".Standby").each(function(index, stand) {
sum += parseFloat($(stand).val());
})
$(".grandtotal").val(sum)
}
function calculate() {
var tr = $(this).closest('tr');
var hours = parseInt($(".Time2", tr).val().split(':')[0], 10) - parseInt($(".Time1", tr).val().split(':')[0], 10);
if (hours < 0) hours = 24 + hours;
$(".Hours", tr).val(hours);
if (hours <= 4) $(".Standby", tr).val("0.5");
if (hours == 4) $(".Standby", tr).val("0.5");
if (hours > 4 && hours < 8) $(".Standby", tr).val("1");
if (hours == 8) $(".Standby", tr).val("1");
if (hours > 8 && hours < 12) $(".Standby", tr).val("1.5");
if (hours == 12) $(".Standby", tr).val("1.5");
if (hours > 12 && hours < 16) $(".Standby", tr).val("2");
if (hours == 16) $(".Standby", tr).val("2");
if (hours > 16 && hours < 20) $(".Standby", tr).val("2.5");
if (hours == 20) $(".Standby", tr).val("2.5");
if (hours > 20 && hours < 24) $(".Standby", tr).val("3");
if (hours == 24) $(".Standby", tr).val("3");
if (hours > 24) alert("You cannot exceed a 24 hour period.");
}
$('#table').on('change', ".Time1,.Time2", calculate);
$('#table').find(".Time1").trigger('change')
window.addTime = function() {
tableCount++;
$('#timeTable').clone().attr('id', "timeTable" + tableCount).appendTo('#table');
$('#timeTable' + tableCount).find("input").val("");
index++;
$('#timeTable' + tableCount + ' .increment').html(tableCount);
};
$(document).on('click', 'button.removeTime', function() {
var closestTable = $(this).closest('table');
if (closestTable.attr('id') != "timeTable") {
closestTable.remove();
}
tableCount--;
if (tableCount < 1) {
tableCount = 1;
}
standBy();
return false;
});
</script>
</head>
<body>
<h1 class="text-center">Compensatory Time for Standby Hours Calculator</h1>
<br>
<br>
<br>
<h3>
Time format is in 24h
</h3>
<h6><I>Example: If you want to type in "8 AM", the correct format would be: "8". <br> If you want to type in "8 PM", the correct format would be "20".</I></h6>
<div id="table">
<table id="timeTable" class="tg table table-striped table-bordered table-condensed tab_logic">
<tr class="headings">
<th class="tg-yw41"></th>
<th class="tg-yw41"></th>
<th class="tg-yw4l">Standby Start Time</th>
<th class="tg-yw4l">Standby End Time</th>
<th class="tg-yw4l">Hours in total</th>
<th class="tg-yw4l">Compensatory Hours Earned</th>
</tr>
<tr>
<td class="increment headings">1</td>
<td class="tg-yw4l headings">
<button class="removeTime btn btn-danger">Remove Time</button>
</td>
<td class="tg-yw4l headings">
<input class="Time1 form-control input-md " value="" placeholder="Enter your start time" />
</td>
<td class="tg-yw4l headings">
<input class="Time2 form-control input-md" value="" placeholder="Enter your end time" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Hours form-control input-md" value="0" readonly="" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Standby form-control input-md" value="0" readonly="" />
</td>
</tr>
</table>
</div>
<hr>
<button class="btn btn-success pull-left" onclick="addTime();"><span class="glyphicon glyphicon-plus-sign">Add Time</span></button>
<br>
<br>
<button class="btn btn-primary" onclick="standBy();">Calculate Total Compensatory Hours Earned</button>
<caption>Total Compensatory Hours:</caption>
<input class="grandtotal" value="" readonly="" />
</body>
</html>
我还有一个正在运行的 Web 应用程序 JSFiddle,我想将其转换为 HTA 应用程序:https://jsfiddle.net/32u1vuoc/
HTA 文件中 JQuery 的全部功能都可以完美运行,唯一不能运行的是小时计算。这意味着每当我输入待机开始时间和待机结束时间时,总时数和补偿时数都显示为“0”。它不计算任何东西。
我想知道这个社区中是否有人知道解决这个问题的方法。
感谢您的宝贵时间!
您需要在正文之后而不是之前添加脚本,这就是它不起作用的原因。
<!DOCTYPE html>
<html lang="en-US">
<HTA:APPLICATION applicationname="Test" border="no" caption="yes" showintaskbar="no" singleinstance="yes" sysmenu="yes" selection="no" innerborder="no" scroll="yes"/>
<head>
<title>Test</title>
<meta http-equiv="x-ua-compatible" content="ie=11"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<h1 class="text-center">Compensatory Time for Standby Hours Calculator</h1>
<br>
<br>
<br>
<h3>
Time format is in 24h
</h3>
<h6><I>Example: If you want to type in "8 AM", the correct format would be: "8". <br> If you want to type in "8 PM", the correct format would be "20".</I></h6>
<div id="table">
<table id="timeTable" class="tg table table-striped table-bordered table-condensed tab_logic">
<tr class="headings">
<th class="tg-yw41"></th>
<th class="tg-yw41"></th>
<th class="tg-yw4l">Standby Start Time</th>
<th class="tg-yw4l">Standby End Time</th>
<th class="tg-yw4l">Hours in total</th>
<th class="tg-yw4l">Compensatory Hours Earned</th>
</tr>
<tr>
<td class="increment headings">1</td>
<td class="tg-yw4l headings">
<button class="removeTime btn btn-danger">Remove Time</button>
</td>
<td class="tg-yw4l headings">
<input class="Time1 form-control input-md " value="" placeholder="Enter your start time" />
</td>
<td class="tg-yw4l headings">
<input class="Time2 form-control input-md" value="" placeholder="Enter your end time" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Hours form-control input-md" value="0" readonly="" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Standby form-control input-md" value="0" readonly="" />
</td>
</tr>
</table>
</div>
<hr>
<button class="btn btn-success pull-left" onclick="addTime();"><span class="glyphicon glyphicon-plus-sign">Add Time</span></button>
<br>
<br>
<button class="btn btn-primary" onclick="standBy();">Calculate Total Compensatory Hours Earned</button>
<caption>Total Compensatory Hours:</caption>
<input class="grandtotal" value="" readonly="" />
</body>
<script type="text/javascript">
var numRows = 2,
ti = 5;
var tableCount = 1;
var index = 1;
window.standBy = function() {
var sum = 0;
$(".Standby").each(function(index, stand) {
sum += parseFloat($(stand).val());
})
$(".grandtotal").val(sum)
}
function calculate() {
var tr = $(this).closest('tr');
var hours = parseInt($(".Time2", tr).val().split(':')[0], 10) - parseInt($(".Time1", tr).val().split(':')[0], 10);
if (hours < 0) hours = 24 + hours;
$(".Hours", tr).val(hours);
if (hours <= 4) $(".Standby", tr).val("0.5");
if (hours == 4) $(".Standby", tr).val("0.5");
if (hours > 4 && hours < 8) $(".Standby", tr).val("1");
if (hours == 8) $(".Standby", tr).val("1");
if (hours > 8 && hours < 12) $(".Standby", tr).val("1.5");
if (hours == 12) $(".Standby", tr).val("1.5");
if (hours > 12 && hours < 16) $(".Standby", tr).val("2");
if (hours == 16) $(".Standby", tr).val("2");
if (hours > 16 && hours < 20) $(".Standby", tr).val("2.5");
if (hours == 20) $(".Standby", tr).val("2.5");
if (hours > 20 && hours < 24) $(".Standby", tr).val("3");
if (hours == 24) $(".Standby", tr).val("3");
if (hours > 24) alert("You cannot exceed a 24 hour period.");
}
$('#table').on('change', ".Time1,.Time2", calculate);
$('#table').find(".Time1").trigger('change')
window.addTime = function() {
tableCount++;
$('#timeTable').clone().attr('id', "timeTable" + tableCount).appendTo('#table');
$('#timeTable' + tableCount).find("input").val("");
index++;
$('#timeTable' + tableCount + ' .increment').html(tableCount);
};
$(document).on('click', 'button.removeTime', function() {
var closestTable = $(this).closest('table');
if (closestTable.attr('id') != "timeTable") {
closestTable.remove();
}
tableCount--;
if (tableCount < 1) {
tableCount = 1;
}
standBy();
return false;
});
</script>
</html>
或者在附加事件处理程序时使用 on document ready,因为现在您尝试将事件添加到 DOM.
中尚不存在的元素
$(document).ready(function(){
$('#table').on('change', ".Time1,.Time2", calculate);
$('#table').find(".Time1").trigger('change')
});
我想将我的 Web 应用程序转换为 HTA 应用程序。
这是我的整个 HTA 文件:
<!DOCTYPE html>
<html lang="en-US">
<HTA:APPLICATION applicationname="Test" border="no" caption="yes" showintaskbar="no" singleinstance="yes" sysmenu="yes" selection="no" innerborder="no" scroll="yes"/>
<head>
<title>Test</title>
<meta http-equiv="x-ua-compatible" content="ie=11"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
var numRows = 2,
ti = 5;
var tableCount = 1;
var index = 1;
window.standBy = function() {
var sum = 0;
$(".Standby").each(function(index, stand) {
sum += parseFloat($(stand).val());
})
$(".grandtotal").val(sum)
}
function calculate() {
var tr = $(this).closest('tr');
var hours = parseInt($(".Time2", tr).val().split(':')[0], 10) - parseInt($(".Time1", tr).val().split(':')[0], 10);
if (hours < 0) hours = 24 + hours;
$(".Hours", tr).val(hours);
if (hours <= 4) $(".Standby", tr).val("0.5");
if (hours == 4) $(".Standby", tr).val("0.5");
if (hours > 4 && hours < 8) $(".Standby", tr).val("1");
if (hours == 8) $(".Standby", tr).val("1");
if (hours > 8 && hours < 12) $(".Standby", tr).val("1.5");
if (hours == 12) $(".Standby", tr).val("1.5");
if (hours > 12 && hours < 16) $(".Standby", tr).val("2");
if (hours == 16) $(".Standby", tr).val("2");
if (hours > 16 && hours < 20) $(".Standby", tr).val("2.5");
if (hours == 20) $(".Standby", tr).val("2.5");
if (hours > 20 && hours < 24) $(".Standby", tr).val("3");
if (hours == 24) $(".Standby", tr).val("3");
if (hours > 24) alert("You cannot exceed a 24 hour period.");
}
$('#table').on('change', ".Time1,.Time2", calculate);
$('#table').find(".Time1").trigger('change')
window.addTime = function() {
tableCount++;
$('#timeTable').clone().attr('id', "timeTable" + tableCount).appendTo('#table');
$('#timeTable' + tableCount).find("input").val("");
index++;
$('#timeTable' + tableCount + ' .increment').html(tableCount);
};
$(document).on('click', 'button.removeTime', function() {
var closestTable = $(this).closest('table');
if (closestTable.attr('id') != "timeTable") {
closestTable.remove();
}
tableCount--;
if (tableCount < 1) {
tableCount = 1;
}
standBy();
return false;
});
</script>
</head>
<body>
<h1 class="text-center">Compensatory Time for Standby Hours Calculator</h1>
<br>
<br>
<br>
<h3>
Time format is in 24h
</h3>
<h6><I>Example: If you want to type in "8 AM", the correct format would be: "8". <br> If you want to type in "8 PM", the correct format would be "20".</I></h6>
<div id="table">
<table id="timeTable" class="tg table table-striped table-bordered table-condensed tab_logic">
<tr class="headings">
<th class="tg-yw41"></th>
<th class="tg-yw41"></th>
<th class="tg-yw4l">Standby Start Time</th>
<th class="tg-yw4l">Standby End Time</th>
<th class="tg-yw4l">Hours in total</th>
<th class="tg-yw4l">Compensatory Hours Earned</th>
</tr>
<tr>
<td class="increment headings">1</td>
<td class="tg-yw4l headings">
<button class="removeTime btn btn-danger">Remove Time</button>
</td>
<td class="tg-yw4l headings">
<input class="Time1 form-control input-md " value="" placeholder="Enter your start time" />
</td>
<td class="tg-yw4l headings">
<input class="Time2 form-control input-md" value="" placeholder="Enter your end time" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Hours form-control input-md" value="0" readonly="" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Standby form-control input-md" value="0" readonly="" />
</td>
</tr>
</table>
</div>
<hr>
<button class="btn btn-success pull-left" onclick="addTime();"><span class="glyphicon glyphicon-plus-sign">Add Time</span></button>
<br>
<br>
<button class="btn btn-primary" onclick="standBy();">Calculate Total Compensatory Hours Earned</button>
<caption>Total Compensatory Hours:</caption>
<input class="grandtotal" value="" readonly="" />
</body>
</html>
我还有一个正在运行的 Web 应用程序 JSFiddle,我想将其转换为 HTA 应用程序:https://jsfiddle.net/32u1vuoc/
HTA 文件中 JQuery 的全部功能都可以完美运行,唯一不能运行的是小时计算。这意味着每当我输入待机开始时间和待机结束时间时,总时数和补偿时数都显示为“0”。它不计算任何东西。
我想知道这个社区中是否有人知道解决这个问题的方法。
感谢您的宝贵时间!
您需要在正文之后而不是之前添加脚本,这就是它不起作用的原因。
<!DOCTYPE html>
<html lang="en-US">
<HTA:APPLICATION applicationname="Test" border="no" caption="yes" showintaskbar="no" singleinstance="yes" sysmenu="yes" selection="no" innerborder="no" scroll="yes"/>
<head>
<title>Test</title>
<meta http-equiv="x-ua-compatible" content="ie=11"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<h1 class="text-center">Compensatory Time for Standby Hours Calculator</h1>
<br>
<br>
<br>
<h3>
Time format is in 24h
</h3>
<h6><I>Example: If you want to type in "8 AM", the correct format would be: "8". <br> If you want to type in "8 PM", the correct format would be "20".</I></h6>
<div id="table">
<table id="timeTable" class="tg table table-striped table-bordered table-condensed tab_logic">
<tr class="headings">
<th class="tg-yw41"></th>
<th class="tg-yw41"></th>
<th class="tg-yw4l">Standby Start Time</th>
<th class="tg-yw4l">Standby End Time</th>
<th class="tg-yw4l">Hours in total</th>
<th class="tg-yw4l">Compensatory Hours Earned</th>
</tr>
<tr>
<td class="increment headings">1</td>
<td class="tg-yw4l headings">
<button class="removeTime btn btn-danger">Remove Time</button>
</td>
<td class="tg-yw4l headings">
<input class="Time1 form-control input-md " value="" placeholder="Enter your start time" />
</td>
<td class="tg-yw4l headings">
<input class="Time2 form-control input-md" value="" placeholder="Enter your end time" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Hours form-control input-md" value="0" readonly="" />
</td>
<td class="tg-yw4l headings">
<input type="text" class="Standby form-control input-md" value="0" readonly="" />
</td>
</tr>
</table>
</div>
<hr>
<button class="btn btn-success pull-left" onclick="addTime();"><span class="glyphicon glyphicon-plus-sign">Add Time</span></button>
<br>
<br>
<button class="btn btn-primary" onclick="standBy();">Calculate Total Compensatory Hours Earned</button>
<caption>Total Compensatory Hours:</caption>
<input class="grandtotal" value="" readonly="" />
</body>
<script type="text/javascript">
var numRows = 2,
ti = 5;
var tableCount = 1;
var index = 1;
window.standBy = function() {
var sum = 0;
$(".Standby").each(function(index, stand) {
sum += parseFloat($(stand).val());
})
$(".grandtotal").val(sum)
}
function calculate() {
var tr = $(this).closest('tr');
var hours = parseInt($(".Time2", tr).val().split(':')[0], 10) - parseInt($(".Time1", tr).val().split(':')[0], 10);
if (hours < 0) hours = 24 + hours;
$(".Hours", tr).val(hours);
if (hours <= 4) $(".Standby", tr).val("0.5");
if (hours == 4) $(".Standby", tr).val("0.5");
if (hours > 4 && hours < 8) $(".Standby", tr).val("1");
if (hours == 8) $(".Standby", tr).val("1");
if (hours > 8 && hours < 12) $(".Standby", tr).val("1.5");
if (hours == 12) $(".Standby", tr).val("1.5");
if (hours > 12 && hours < 16) $(".Standby", tr).val("2");
if (hours == 16) $(".Standby", tr).val("2");
if (hours > 16 && hours < 20) $(".Standby", tr).val("2.5");
if (hours == 20) $(".Standby", tr).val("2.5");
if (hours > 20 && hours < 24) $(".Standby", tr).val("3");
if (hours == 24) $(".Standby", tr).val("3");
if (hours > 24) alert("You cannot exceed a 24 hour period.");
}
$('#table').on('change', ".Time1,.Time2", calculate);
$('#table').find(".Time1").trigger('change')
window.addTime = function() {
tableCount++;
$('#timeTable').clone().attr('id', "timeTable" + tableCount).appendTo('#table');
$('#timeTable' + tableCount).find("input").val("");
index++;
$('#timeTable' + tableCount + ' .increment').html(tableCount);
};
$(document).on('click', 'button.removeTime', function() {
var closestTable = $(this).closest('table');
if (closestTable.attr('id') != "timeTable") {
closestTable.remove();
}
tableCount--;
if (tableCount < 1) {
tableCount = 1;
}
standBy();
return false;
});
</script>
</html>
或者在附加事件处理程序时使用 on document ready,因为现在您尝试将事件添加到 DOM.
中尚不存在的元素$(document).ready(function(){
$('#table').on('change', ".Time1,.Time2", calculate);
$('#table').find(".Time1").trigger('change')
});