2015-12-24 2 views
0

HTML форма:JavaScript и VBScript функция вызова

<form 
    name="CheckIn" 
    method="post" 
    action="check.asp" 
    onsubmit="return CheckBreakTime() && CheckTime();" 
> 

Я называю две функции йота onsubmit, функции возвращают истинным или ложным, но функция работает только тогда, когда это «первый», например, если я говорю «onsubmit="return CheckTime() && CheckBreakTime();"» только CheckTime работает, если я сначала назову ChecKBreakTime, он работает только.

Функции (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; 
    } 
} 

и код VBScript, который я поставил в JavaScript:

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 получает его. Может кто-нибудь сказать мне, в чем проблема ...

+0

Если ваша сторона сервера vbs правильно заполняет значения TimeDif и BTimeDif, то могу ли я предположить, что это вопрос javascript, и ему не нужны два других тега? – John

+1

Вы сравниваете числа с строками в CheckTime. – epascarello

+0

Проблема заключалась в том, что я проверяю кнопки, которые не отображаются из-за vbscript, поэтому javascript просто проверяет первый. Ответ заключается в том, чтобы поместить скрытые входы с тем же идентификатором. Извините, если я обиделся, извините за мою плохую грамматику. – StanchAftw

ответ

0

Если вы хотите обе функции для запуска, даже если первый один имеет значение ложь - то вы можете использовать «&»: onsubmit multiple javascript functions

Но, лично я бы завернуть их обоих в функцию, которая агрегирует логику как:

function checkBothTimes(){ 
    if (!CheckBreakTime()){ 
    return false; 
    } 
    else if (!CheckTime()){ 
    return false; 
    } 
    return true; 
} 

Несмотря на то, что это длиннее - это делает код более удобным для чтения (для меня).

0

Для своих логических операторов JavaScript использует short-circuit evaluation. Это означает, что в выражении, таком как expr1 && expr2, expr2 оценивается только в том случае, если значение expr1 равно true. Если expr1 оценивает значение false, нет необходимости оценивать expr2, так как результат expr1 && expr2 будет ложным, несмотря ни на что.

Так что, если вы бежите, например

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, нет необходимости запускать второй.

Смежные вопросы