2009-06-10 3 views
1

Ok, j'ai besoin d'aide. C'est ma première question ici.Validation des dates en Javascript avec des identifiants de champs de formulaires inhabituels - Intégration Web-To-Salesforce.com

Contexte: Je travaille sur un projet de charité, et ma partie du projet consiste à créer la fonctionnalité Web-To-Case avec Salesforce.com. Salesforce.com, si vous n'étiez pas au courant, donne gratuitement son logiciel à des organismes sans but lucratif qualifiés. Quoi qu'il en soit, la fonctionnalité Web-To-Case de Salesforce.com génère un formulaire HTML qui, une fois soumis, renvoie les données à Salesforce.com et crée un ticket. Les ID des éléments de formulaire sont des chaînes de nombres et de lettres qui semblent correspondre aux champs de Salesforce.com.

Objectif: J'essayais de construire dans la validation des dates sur un formulaire particulier parce que nous avons découvert que si les dates n'étaient pas formatées juste ainsi (30/12/2009 12:00 PM), tout ce que l'utilisateur entrait serait pas entrer dans Salesforce.com

Problème: J'ai trouvé un script en ligne (javascript) et je l'ai modifié pour répondre à mes besoins. Problème - cela ne fonctionne pas. Je reçois une petite erreur dans le coin du navigateur, mais cela n'empêche pas le formulaire de passer (il ne valide pas non plus) - "Expected") "" sur la ligne 16.

Je voudrais joindre le code ici ... J'espère que c'est OK. Normalement, je ne couperais que les bits pertinents, mais je crains que les gens disent alors "Hey ça ne marchera jamais - vous n'avez pas de balise HTML de fermeture" ou quoi que ce soit d'autre. Je ne sais pas si ça va bien coller - ça vient d'un fichier .htm et le HTML peut être interprété par ce forum et ce serait ... bon ... pas idéal! Bon, je pense que j'ai trouvé comment y échapper mais il y avait tellement d'évasion que j'ai découpé la plupart des commentaires et la plupart des choses vraiment non pertinentes ..

Vous pouvez voir comment les ID de champ de formulaire sont tous funky - La plupart des exemples que j'ai vus avaient des identifiants et des noms de formulaire simples ... alors je me suis demandé si Javascript ne pouvait pas traiter les chaînes commençant par des chiffres comme id/noms sur les champs. Je me demande aussi - parce que je ne peux pas le vérifier en testant que cela ne fonctionne pas pour d'autres raisons - si mon expression régulière vient quelque chose près du format de date que j'ai spécifié ci-dessus. J'ai dû composer ma propre expression régulière puisque je n'ai rien trouvé 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> 

Répondre

2

Votre fonction checkDate est correcte. Le problème est dans votre fonction checkDates. Javascript n'aime pas les variables qui commencent par des nombres. Changez-le pour:

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

et cela devrait fonctionner comme prévu.

En outre, pour une date non valide pour annuler la soumission du formulaire, vous devez modifier l'attribut de votre bouton Envoyer onClick:

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 «WTF» classique. Message d'erreur Internet Explorer. Envisagez la mise à niveau vers la dernière version de IE (IE8), qui a de meilleurs messages d'erreur que les versions précédentes, ou en utilisant Firefox. La console d'erreur de Firefox est sans pareil pour ce qui est du traçage des erreurs Javascript (et CSS).

+0

Ensuite, la mise à niveau IE ou la suggestion FireFox. IE est notorius pour les rapports d'erreurs de mauvais javascript. les numéros de ligne n'ont aucun sens et ils semblaient n'avoir qu'un seul message d'erreur à signaler.:-) –

+0

Eh bien, j'ai découvert aujourd'hui qu'il y a apparemment un bouton 'Précédent' dans ce dialogue. Pourtant, les numéros de ligne n'ont aucun sens et 'Erreur: Objet attendu' ne vous en dit pas vraiment beaucoup. – cmptrgeekken

+0

Je pourrais juste te faire un câlin! Off pour l'essayer. Retour - ça a marché! Y a-t-il un moyen sur ce site de marquer ceci comme la bonne réponse? Non seulement je suis heureux, mais vous avez aidé une organisation à but non lucratif impressionnante! –

Questions connexes