簡體   English   中英

JavaScript和VBScript函數調用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM