비정상적인 양식 필드 ID를 사용하여 Javascript에서 날짜 확인 - Salesforce.com Web-To-Case 통합

StackOverflow https://stackoverflow.com/questions/977330

문제

알겠습니다. 도움이 필요합니다.이것이 나의 첫 번째 질문입니다.

배경:저는 자선 프로젝트를 진행하고 있으며 프로젝트 중 제가 맡은 부분은 Salesforce.com을 사용하여 Web-To-Case 기능을 구축하는 것입니다.Salesforce.com은 자격을 갖춘 비영리 단체에 소프트웨어를 무료로 제공합니다.어쨌든 Salesforce.com의 Web-To-Case 기능은 제출 시 데이터를 Salesforce.com으로 다시 보내고 티켓을 생성하는 HTML 양식을 생성합니다.양식 요소의 ID는 Salesforce.com의 필드에 해당하는 것으로 나타나는 숫자와 문자의 문자열입니다.

목표:날짜 형식이 올바르게 지정되지 않은 경우(2009년 12월 30일 오후 12시) 사용자가 입력한 내용이 Salesforce.com에 반영되지 않는다는 사실을 발견했기 때문에 특정 양식에서 날짜 유효성 검사를 구축하려고 했습니다.

문제:온라인에서 스크립트(javascript)를 찾아 필요에 맞게 수정했습니다.문제 - 작동하지 않습니다.브라우저 모서리에 약간의 오류가 표시되지만 양식 처리가 중단되지는 않습니다(검증도 수행되지 않음). 16행의 "예상된 ')'"입니다.

여기에 코드를 첨부하고 싶습니다... 괜찮기를 바랍니다.일반적으로 관련 부분만 잘라내겠지만 사람들이 "이건 절대 작동하지 않을 거야. 닫는 HTML 태그가 없어"라고 말할까봐 두렵습니다.잘 붙여넣을 수 있을지 확신할 수 없습니다. .htm 파일에서 가져온 것이며 HTML이 이 포럼에서 해석될 수 있으며 이는...음...이상적이지 않습니다!좋아, 탈출하는 방법을 알아낸 것 같은데 탈출할 게 너무 많아서 대부분의 댓글과 정말 관련 없는 대부분을 잘라냈습니다..

양식 필드 ID가 어떻게 모두 이상한지 알 수 있습니다. 제가 본 대부분의 예에는 간단한 양식 ID와 이름이 있었습니다. 그래서 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: &quot;08/30/2009 12:00 am&quot;</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 기능에 있습니다.자바스크립트는 숫자로 시작하는 변수를 좋아하지 않습니다.다음으로 변경하세요.

function checkDates(form)
{
    checkDate(form.elements['00N80000003LGJ5']);
    checkDate(form.elements['00N80000003LGNt']);
}

의도한 대로 작동해야 합니다.

또한 유효하지 않은 날짜로 인해 양식 제출이 취소되도록 하려면 제출 버튼의 onClick 속성을 다음과 같이 변경해야 합니다.

onclick="return checkDates( this.form )"

그렇지 않으면 무슨 일이 있어도 양식이 제출됩니다.

참고로, 언급 한 오류 메시지는 고전적인 'WTF?'처럼 들립니다. 인터넷 익스플로러 오류 메시지.이전 버전보다 오류 메시지가 훨씬 개선된 최신 버전의 IE(IE8)로 업그레이드하거나 Firefox를 사용하는 것을 고려해 보세요.Firefox의 오류 콘솔은 Javascript(및 CSS) 오류 추적에 있어 누구에게도 뒤지지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top