验证日期在Javascript中不寻常的表格字段标识 - Salesforce.com网站到外壳集成
-
13-09-2019 - |
题
好吧,我需要帮助。这是我在这里的第一个问题。
背景: 我工作的一个慈善项目,我的项目的一部分是建立在Web到外壳的功能与Salesforce.com。 Salesforce.com,如果您不知道,给其软件免费赠送给符合条件的非利润。总之,网络到外壳的功能,在Salesforce.com中生成一个HTML表单,提交时,将数据发送回Salesforce.com和创建票证。对于表单元素ID是这样看来,数字和字母的字符串对应于Salesforce.com的字段。
目标: 我试图在某个窗体上的日期的验证,因为我们发现,除非是日期格式只是这样(12/30/2009下午12:00),任何用户输入不会使它成为Salesforce.com
问题: 在线(JavaScript)的发现脚本修改它适合我的需要。问题 - 这是行不通的。我得到一个小错误在浏览器的角落,但它不会从穿通(它也不会验证)停止形式 - “预期‘)’”上线16
我很想在此附上的代码。我希望这是确定。通常我会切出只有相关的位,但我担心人们会然后说:“嘿,这不会有任何效果 - 你不必关闭HTML标记”或诸如此类的东西。我不知道这是否会贴好 - 它来自一个.htm文件和HTML可以通过这个论坛来解释,这将是......嗯......不理想!好吧,我想我想通了,如何逃生,但有这么多的逃避,我切出大部分的意见,大部分真正不相干的东西..
您可以看到表单域的IDS都是怎么时髦 - 大部分的例子,我看到了简单的形式编号和名称,所以,我想知道,如果只是使用Javascript不能与字符串开头数字作为ID /名称处理字段。
我也想知道 - 因为我无法通过测试验证它,因为它没有其他原因的工作 - 如果我的正则表达式来任何接近我上面指定的日期格式。我不得不弥补我自己的正则表达式,因为我没发现什么了世界上像我想要的东西。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Cambridge Cares About AIDS: Request an Asset</title>
<link type="text/css" rel="stylesheet" href="styles.css" />
<SCRIPT LANGUAGE="JavaScript"> // Original JavaScript code by Chirp Internet: www.chirp.com.au // Please acknowledge use of this code by including this header. //Code modified to validate a date/time field by Shannon Davis, Company Name Removed.
function checkDates(form)
{
checkDate(form.00N80000003LGJ5);
checkDate(form.00N80000003LGNt);
}
function checkDate(field)
{
var allowBlank = false;
var minYear = (new Date()).getFullYear();
var maxYear = 2100;
var errorMsg = "";
// regular expression to match required date format
re = /^(\d{1,2})\/(\d{1,2})\/(\d{4})\s(\d{1,2}):(\d{2})+\s([ap]m)+$/;
if(field.value != '') {
if(regs = field.value.match(re)) {
if(regs[1] < 1 || regs[1] > 12) {
errorMsg = "Invalid value for day: " + regs[1];
} else if(regs[2] < 1 || regs[2] > 31) {
errorMsg = "Invalid value for month: " + regs[2];
} else if(regs[3] < minYear || regs[3] > maxYear) {
errorMsg = "Invalid value for year: " + regs[3] + " - must be between " + minYear + " and " + maxYear;
}
} else {
errorMsg = "Invalid date format: " + field.value;
}
} else if(!allowBlank) {
errorMsg = "Empty date not allowed!";
}
if(errorMsg != "") {
alert(errorMsg);
field.focus();
return false;
}
return true;
}
</SCRIPT>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8">
</head>
<BODY>
<div id="container">
<div id="top_photo">
<img src="images/ccaa_banner.jpg" alt="banner" width="800" height="181" />
</div>
<div id="left_colum" style="width: 200; height: 256"><a href="index.html">
<img src="images/cca_logo.gif" alt="logo" border="0" width="178" height="84" /></a>
<p class="address">Cambridge Cares About AIDS<br />17 Sellers Street<br /> Cambridge, MA 02139<br />617.661.3040</p>
<br />
</div>
<div id="right_colum">
<div id="content">
<form id="form" name="form" action="https://www.salesforce.com/servlet/servlet.WebToCase?encoding=UTF-8" method="POST">
<input type=hidden name="orgid" value="00D80000000M3if">
<input type=hidden name="retURL" value="http://wilmwebtest/CCAA/thank_you.htm">
<table border=0>
<tr><TD><label for="email">CCA Email:*</label></TD><td><input id="email" maxlength="80" name="email" size="40" type="text" /><br> </td></tr>
<tr>
<td><label for="subject">Subject:</label></td><td><input id="subject" maxlength="80" name="subject" size="40" type="text" /><br></td>
</tr>
<tr><td>
<label for="description">Description*</label></td>
<td>
<textarea name="description" rows="4" cols="25"></textarea><br></td>
</tr><tr>
<input type="hidden" name="recordType" id="recordType" value="0012800000006ZWz">
<tr> <td colspan="2">
<p>Date Format: mm/dd/yyyy hh:mm am/pm<br>example: "08/30/2009 12:00 am"</td></tr>
<tr><td>When Needed (Start):*</td>
<td><input id="00N80000003LGJ5" name="00N80000003LGJ5" size="40" type="text" /></span><br></td></tr>
<tr>
<td>
When Needed (End):<span class="dateInput">*</td>
<TD>
<input id="00N80000003LGNt" name="00N80000003LGNt" size="40" type="text" /></span><br></td>
</tr>
</table>
<input type="hidden" id="external" name="external" value="1" /><br>
<input type="submit" name="submit" value="Submit Asset Request" onClick="checkDates (this.form);" >
</form>
</div>
</div>
<div id="clearit">
</div>
</div>
</body>
</html>
解决方案
您了checkdate功能是正确的。问题是在你的checkDates功能。 JavaScript不喜欢以数字开头的变量。它更改为:
function checkDates(form)
{
checkDate(form.elements['00N80000003LGJ5']);
checkDate(form.elements['00N80000003LGNt']);
}
和按预期它应该工作。
此外,为了一个无效的日期起取消提交表单,你必须改变你的提交按钮的onClick属性:
onclick="return checkDates( this.form )"
否则,表单会不管提交的内容。
在一个侧面说明,你提到的错误消息,像一个典型的声音“WTF?” Internet Explorer错误消息。考虑升级到最新版本的IE浏览器(IE8),这比以前的版本,或使用Firefox更好的错误消息。 Firefox的错误控制台是首屈一指的,当涉及到跟踪的Javascript(和CSS)的错误。