Dates en Javascript Validation avec forme inhabituelle terrain Ids - Salesforce.com Web-To-cas d'intégration

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

Question

Ok, j'ai besoin d'aide. Ceci est ma première question ici.

Arrière-plan: Je travaille sur un projet de charité, et ma partie du projet est de renforcer la fonctionnalité Web-To-cas avec Salesforce.com. Salesforce.com, si vous étiez pas au courant, donne son logiciel gratuitement aux organismes sans but lucratif admissibles. Quoi qu'il en soit, la fonction Web-To-cas dans Salesforce.com génère un formulaire HTML qui, lorsqu'il est soumis, envoie les données à Salesforce.com et créer un ticket. Les ID pour les éléments de formulaire sont des chaînes de chiffres et de lettres qui semblent correspondre aux champs Salesforce.com.

Objectif: Je tentais de construire dans la validation des dates d'une forme particulière parce que nous avons découvert que l'utilisateur est entré ne ferait pas à moins que les dates ont été formatées tellement (12/30/2009 24:00), tout dans Salesforce.com

Problème: Trouvé un script en ligne (javascript) et modifié pour l'adapter à mes besoins. Problème - il ne fonctionne pas. Je reçois une petite erreur dans le coin du navigateur, mais il ne s'arrête pas la forme de passer par (il ne valide pas aussi) -. « Attendu") » sur la ligne 16

J'aimerais joindre le code ici ... J'espère que ce OK. Normalement, je couperais seulement les bits pertinents mais je crains que les gens seraient alors dire « Hey cela ne marchera jamais - vous ne disposez pas d'une balise HTML de fermeture » ou autres joyeusetés. Je ne sais pas si elle va coller bien - il est venu d'un fichier .htm et le code HTML peut être interprété par ce forum et ce serait ... eh bien ... pas idéal! D'accord, je pense que je me suis dit comment échapper, mais il y avait tellement d'échapper que je coupe la plupart des commentaires et la plupart des choses vraiment hors de propos ..

Vous pouvez voir comment les ids de champ de formulaire sont tous froussard - la plupart des exemples que j'ai vus avaient forme simples et ids noms ... alors je me suis demandé si Javascript ne peut pas faire face à des chaînes commençant par les chiffres comme id / noms champs.

Je me demande aussi - parce que je ne peux pas le vérifier par le test car il ne fonctionne pas pour d'autres raisons - si mon expression régulière est tout proche du format de la date indiquée ci-dessus je. Je devais faire ma propre expression régulière depuis que je ne trouve rien dans le monde comme ce que je voulais.

<!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>
Était-ce utile?

La solution

Votre fonction checkdate est correcte. Le problème est dans votre fonction checkDates. Javascript n'aime pas les variables qui commencent par un chiffre. Changer à:

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

et il devrait fonctionner comme prévu.

En outre, pour une date non valide pour annuler la soumission du formulaire, vous devez modifier votre soumettre onClick bouton attribuer à:

onclick="return checkDates( this.form )"

Dans le cas contraire, le formulaire sera soumis, peu importe quoi.

Sur une note de côté, le message d'erreur que vous mentionnez ressemble à un classique "WTF? Internet Explorer message d'erreur. Mise à niveau à la dernière version de IE (IE8), qui a bien meilleurs messages d'erreur que les versions précédentes, ou l'utilisation de Firefox. Erreur de Firefox Console est sans pareil en matière de traquer les erreurs Javascript (et CSS).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top