[英]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.