[英]JavaScript and VBScript function calling
HTML表单:
<form
name="CheckIn"
method="post"
action="check.asp"
onsubmit="return CheckBreakTime() && CheckTime();"
>
我在onsubmit上调用了两个函数,这些函数返回true或false,但是该函数仅在它是“ first”时才起作用,例如,如果我说' onsubmit="return CheckTime() && CheckBreakTime();"
'如果我先调用ChecKBreakTime,则只有CheckTime才有效。
函数(JavaScript) :
function CheckBreakTime(){
if (document.getElementById('breakco').checked) {
var BKTimeDif1 = '<%=BTimeDif%>';
var var1 = 20 ;
var sum1 = var1 - BKTimeDif1 ;
if (BKTimeDif1 > 10 && BKTimeDif1 < 21) {
alert("You were on a break longer than 10 minutes,You must wait " + sum1 + " minutes to pass to check out from break. ");
return false;
} else {
return true;
}
}
else {
return true;
}
}
function CheckTime() {
if (document.getElementById('breakci').checked) {
var TimeDif2 = '<%=BTimeDiff%>';
var TimeDif1 = '<%=TimeDif%>';
if (TimeDif1 < 120) {
alert("You must work at least two hours before you can go on a break.");
return false;
} else {
if (TimeDif2 != 0 && TimeDif2 < 120) {
alert("You must work at least two hours before you can go on another break.");
return false;
}
else {
return true;
}
}
}
else {
return true;
}
}
以及我在JavaScript中放入的VBScript代码:
Dim TimeDif
TimeDif=Round(Csng(DateDiff("n", (HourList.Fields.Item("checkInTime").Value), (Now()))), 2)
Dim BTimeDif
If Not IsNull(HourList.Fields.Item("breakCheckIn").Value) Then
BTimeDif = Round(Csng(DateDiff("n", (HourList.Fields.Item("breakCheckIn").Value), (Now()))), 2)
End If
If Not IsNull(HourList.Fields.Item("breakCheckOut").Value) Then
Dim BTimeDiff
BTimeDiff = Round(Csng(DateDiff("n", (HourList.Fields.Item("breakCheckOut").Value), (Now()))), 2)
End If
VBScript代码可以正常工作,它返回所需的内容,JavaScript可以获取它。可以告诉我这是什么问题...
JavaScript将短路评估用于其逻辑运算符。 这意味着,在类似expr1 && expr2
,仅当expr1
计算结果为true时, expr2
进行计算。 如果expr1
评估为false,则无需评估expr2
,因为无论如何expr1 && expr2
的结果将为false。
因此,如果您以跑步为例
var result = foo() && bar();
function foo(){
console.log("running foo!");
return false;
}
function bar(){
console.log("running bar!");
return false;
}
仅函数foo()
将被执行。 这实际上与以下内容相同:
var result = foo();
if (result){
result = bar();
}
这就是为什么只调用表达式中的第一个函数的原因。 如果返回false,则无需运行第二个。
如果您希望两个函数都运行,即使第一个函数的计算结果为false-您也可以使用“&”: onsubmit多个javascript函数
但是,就我个人而言,我将它们都包装在一个汇总两者逻辑的函数中:
function checkBothTimes(){
if (!CheckBreakTime()){
return false;
}
else if (!CheckTime()){
return false;
}
return true;
}
即使更长,它也使代码更易于阅读(对我来说)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.