【问题标题】:Javascript not working, classic asp, HTMLJavascript 不工作,经典的 asp,HTML
【发布时间】:2014-04-10 01:50:21
【问题描述】:

我试图在我的网页上完成某些操作时生成一些验证警报框,并且由于某种原因,在我将所有数据库调用放入单独的包含文件后,我的 Javascript 停止工作(在我这样做之前,javascript 正在工作)我尝试了我能想到的一切,但到目前为止没有任何效果,所以我来到最后的前沿寻求帮助,这是我启动数据库调用的 html 表单:

<form name="requestHol" action="newbooking.asp" method="post">              

    <div id="datepicker">
        <label for="from">From </label>
        <input type="text" id="from" name="from" readonly="readonly" >
        <label for="to">to </label>
        <input type="text" id="to" name="to" readonly="readonly" >
    </div>

    <div id="reason">
        <textarea id="reasonInput" name="RequestComments" placeholder="Please enter the reason for your absence." maxlength="45" ></textarea>
    </div>

    <div id="reqbutton">
        <button name="submitHolBtn" value="requestButton" type="submit">Submit Request</button>
    </div>

</form>

这是我的 ASP 数据库调用:

If(Request.Form("submitHolBtn"))<>""Then

        If(Request.Form("from"))="" or (Request.Form("to"))="" or (Request.Form("RequestComments"))="" Then
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Please make sure you fill in ALL inputs when booking a holiday.""); location.href = 'newbooking.asp'</SCRIPT>")
        else

        Set objDBConn = Server.CreateObject("ADODB.Connection")
        objDBConn.Open Application("ConnString")

        Set objDBCommand = Server.CreateObject("ADODB.Command")

        objDBCommand.ActiveConnection = objDBConn
        objDBCommand.CommandText = "spNewHoliday"
        objDBCommand.CommandType = adCmdStoredProc

        objDBCommand.Parameters.Append objDBCommand.CreateParameter("@StartDate", adDate, adParamInput,200)
        objDBCommand.Parameters.Append objDBCommand.CreateParameter("@EndDate", adDate, adParamInput,200)
        objDBCommand.Parameters.Append objDBCommand.CreateParameter("@EmployeeID", adVarChar, adParamInput,200)          
        objDBCommand.Parameters.Append objDBCommand.CreateParameter("@Reason", adVarChar, adParamInput,200)
        objDBCommand.Parameters.Append objDBCommand.CreateParameter("@JobRoleID", adVarChar, adParamInput,200)  

        objDBCommand("@StartDate") = Request.Form("from")
        objDBCommand("@EndDate") = Request.Form("to")
        objDBCommand("@EmployeeID") = Session("UserID")
        objDBCommand("@Reason") = Request.Form("RequestComments")
        objDBCommand("@JobRoleID") = Session("JobRoleID")

        Set objDBRS = Server.CreateObject("ADODB.RecordSet")

        objDBRS.open objDBCommand,,adOpenForwardOnly

        Session("IsBookingValid") = objDBRS(0)

        SELECT CASE Session("IsBookingValid")
        Case "HolidayBooked"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Holiday has been requested.""); location.href = 'newbooking.asp'</SCRIPT>")
        Case "TooManyPeopleOfFSameJob"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Holiday CANNOT be booked, Max amount of employees with the same job role are off.""); location.href = 'newbooking.asp'</SCRIPT>")
        Case "TooManyPeopleOff"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Holiday CANNOT be booked, Max amount of employees are already off.""); location.href = 'newbooking.asp'</SCRIPT>")
        Case "YouHaveAlreadyBookedThisDateOff"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""You have already booked these dates off.""); location.href = 'newbooking.asp'</SCRIPT>")
        Case "YouCanOnlyBookAMaxOf10Days"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""You can only book a max of 10 days off at a time.""); location.href = 'newbooking.asp'</SCRIPT>")
        Case "YouDontHaveEnoughHolidaysLeft"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""You do not have enough days left to book that holiday off.""); location.href = 'newbooking.asp'</SCRIPT>")
        Case "YouHaveAlreadyBookedAHolidayInThatPeriod"
            response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""You already have a holiday booked off during that time period.""); location.href = 'newbooking.asp'</SCRIPT>")
        END SELECT

        Set objDBCommand=nothing
        objDBConn.Close
        Set objDBConn=nothing

        end if 
    end if

感谢所有帮助:)

【问题讨论】:

  • 您的问题是关于 JavaScript,所以请显示生成的 HTML 而不是 asp。
  • 生成的 HTML 是没有 javascript 警报 @phylax 的正常页面
  • 我不知道 asp 但你的 qouting 看起来不祥。 "&lt;SCRIPT LANGUAGE=""JavaScript""&gt;。应该是:'&lt;SCRIPT LANGUAGE="JavaScript"&gt;'
  • 不,那会注释掉代码@phylax
  • @phylax - 在经典 ASP 中,您可以使用双双引号来转义响应写入语句中的引号。例如response.write "&lt;div class=""myclass""&gt;" 将输出&lt;div class="myclass"&gt;

标签: javascript html asp-classic alert


【解决方案1】:

您想使用 Javascript 验证表单客户端还是使用经典 asp 验证服务器端。如果你想在客户端做,那么你的 asp 代码是无关紧要的,你需要在表单中附加一些 javascript。

如果您想验证服务器端,那么最好的办法是将插入代码和表单放在同一页面上,asp 位于表单之前 - 例如

<%
If(Request.Form("submitHolBtn"))<>""Then

    If(Request.Form("from"))="" or (Request.Form("to"))="" or (Request.Form("RequestComments"))="" Then
        response.Write "<p class=""alerttext"">Please make sure you fill in ALL inputs when booking a holiday.</p>"
    else

    'your db code and cases

    end if
end if
%>

<form name="requestHol" method = "post">
<div id="datepicker">
    <label for="from">From </label>
    <input type="text" id="from" name="from" value="<%=Request.Form("from")%>" readonly="readonly" >
    <label for="to">to </label>
    <input type="text" id="to" name="to" value="<%=Request.Form("to")%>" readonly="readonly" >
</div>

<div id="reason">
    <textarea id="reasonInput" name="RequestComments" placeholder="Please enter the reason for your absence." maxlength="45" ><%=Request.Form("RequestComments")%>"</textarea>
</div>

<div id="reqbutton">
    <button name="submitHolBtn" value="requestButton" type="submit">Submit Request</button>
</div>
<form>

我根本不会将 js 用于警报,只是文本。由于代码是在服务器端处理的,它只会在相关时出现在页面上,并且您可以一次显示多个错误消息,而不是一串 js 警报

【讨论】:

  • 真的我想在客户端和服务器端都验证它,以增加额外的验证:),你是什么意思'只是文本'?比如 HTML 文本或 JavaScript?
  • @Jimmy_Chong:太棒了,这就是这样做的方法。但是,您不应该将两者混为一谈 - 对于服务器端验证,用 HTML 写出您的消息,对于客户端,在表单附加的函数中执行所有错误检查(“onsubmit”),如果您发现错误,弹出一个 single 消息框,其中包含 all 的错误记录。否则,你就是在取笑用户:“修复这个,我会接受的。哎呀,我撒谎了,也修复这个,然后我会接受它。不,再次撒谎,你必须也解决这个问题。”
  • @Jimmy_Chong Martha 很好地解释了它 - 我的文本是指 html 文本,最好是在表单上方或与相关字段相邻,您不应该是“响应编写”javascript。就客户端验证而言,请看一下 jQuery 验证方法。 Javascript 弹出式警报是过去十年的事了。 jqueryvalidation.org/files/demo
【解决方案2】:

你的问题来了

 If(Request.Form("from"))="" or (Request.Form("to"))="" or (Request.Form("RequestComments"))="" Then
        response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Please make sure you fill in ALL inputs when booking a holiday.""); location.href = 'newbooking.asp'</SCRIPT>")
    else

如果您的任何 request.form 为空 - 页面将重新加载速度如此之快以至于您甚至无法看到任何内容 - 它又是旧页面。使用 response.end 为每个 Request.Form 执行 response.write 以查看您向页面提交的内容。 还要看看 Session("IsBookingValid") 有什么价值,如果有的话...... 在你的位置,我会在案件结束之前提出以下内容:

case else
       response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('You have nothing for ASP  to work with.');</SCRIPT>")
    END SELECT

location.href = 'newbooking.asp' 当您重定向到其他地方时很好,但由于您发布到同一页面您不需要它,更多它会搞砸你。只需确保您的 response.write 在正文中而不是在标头中编写 javascript。

当您将 asp 代码移动到包含文件中时,可能是您不小心删除了日历的 JS 文件吗?如果是这样,那么您的所有日期选择器字段 TO 和 FROM 都将为空...

【讨论】:

    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多