Format de date JavaScript pour ColdFusion Date Field

Est-il possible d'ajouter quelque chose à cette fonction qui configurera le format de la date et obligera l'utilisateur à entrer MM / DD / AAAA? MASK ne fonctionne pas …

Fonction Calculatrice de frais:

function getDatePrice() { var datePrice = 0; var theForm = document.forms.form; var purchasedate = theForm.elements.purchasedate; var date = new Date(purchasedate.value); if (Object.prototype.toString.call(date) !== '[object Date]') { date = new Date(); } var today = new Date(); var diffMilli = today - date; var diffDays = Math.floor(diffMilli / 1000 / 60 / 60 / 24); // ..Divide! if (diffDays > 30) { datePrice = 20; } else { datePrice= 0; } return datePrice; } 

Fonction d'appel:

 function calculateTotal() { var titleFees = getDatePrice(); var divobj = document.getElementById('totalPrice'); divobj.style.display='block'; divobj.innerHTML = "Estimated Transfer Fees $"+titleFees; } 

Bouton d'entrée: (nécessitant ColdFusion):

 <cfinput type="datefield" name="purchasedate" width="130" required="yes" message="Please enter purchase date." value="#dateformat(now(),"mm/dd/yyyy")#" oninput="calculateTotal();" > 

    Je vais aller de l'avant et ajouter une réponse ici, car une autre question a été ouverte concernant le même problème. Je crois que le problème est que l'attribut mask sur le <cfinput type="datefield" ... code fonctionne uniquement lors de l'utilisation des formulaires Flash – référence de la documentation .

    J'ai souligné le texte de cette documentation ci-dessous:

    Masquage cfcalendar et date d'entrée

    Dans la balise cfcalendar et le contrôle de l'entrée datefield du format Flash , vous utilisez les masques suivants pour déterminer le format de la sortie. Vous pouvez utiliser des caractères majuscules ou minuscules dans le masque:

    Le modèle suivant spécifie que le formulaire Flash envoie la date sélectionnée à l'aide d'un contrôle d'entrée datefield pour ColdFusion comme texte au format 04/29/2004:

    <cfinput name="startDate" type="datefield" label="date:" mask="mm/dd/yyyy"/>

    Comme vous n'utilisez pas un formulaire Flash, le masque ne fonctionne pas pour vous. Vous pouvez essayer de passer à un <cfinput type="text" ... régulier <cfinput type="text" ... entrer et changer votre masque à quelque chose comme "99/99/9999" . Cela vous donnerait le format correct, mais l'utilisateur pourrait encore entrer des dates non valides afin que vous ayez besoin d'un code supplémentaire pour l'attraper.

    Dans les commentaires, vous avez déclaré:

    Ce qui est étrange, c'est que j'ai d'autres qui fonctionnent comme … <cfinput type="text" name="odate" id="odate" validateat="onSubmit" validate="noblanks" required="yes" message="Please enter odometer date." value="" mask="99/99/9999" placeholder="08/05/2014"> <cfinput type="text" name="odate" id="odate" validateat="onSubmit" validate="noblanks" required="yes" message="Please enter odometer date." value="" mask="99/99/9999" placeholder="08/05/2014"> mais pour une raison quelconque, ce n'est que le champ de date qui n'excède pas le MASQUE

    Notez que vous utilisez une entrée "text" ici afin que le masque fonctionne (comme dans mon précédent commentaire). C'est seulement avec le type "datefield" que le masque ne fonctionne pas; Sauf si vous utilisez un formulaire Flash .

    Ce n'est qu'un autre exemple de la raison pour laquelle l'utilisation des balises intégrées ColdFusion UI n'est pas une bonne idée. Ils fonctionnent pour des exemples très simples, mais lorsque vous avez besoin de plus de personnalisation, ils vous échouent. Vous feriez mieux d'utiliser une bibliothèque JavaScript (comme jQuery) pour la validation côté client. Le propre Ben Forta d' Adobe l'a reconnu il y a plusieurs années . Et le projet ColdFusion-UI-the-Right-Way a été lancé à cause de cela aussi.

    MODIFIER

    Adam a souligné une autre référence dans la documentation ColdFusion qui renforce mon argument. J'ai souligné le texte de cette documentation ci-dessous:

    Masquage des données d'entrée

    Dans les formulaires HTML et Flash, l'attribut mask contrôle le format des données qui peuvent être entrés dans un champ de texte ou qui est sélectionné dans un calendrier de contrôle de saisie de datefield. Au format HTML, cela n'empêche pas les utilisateurs de taper une date qui ne suit pas le masque dans un contrôle d'entrée datefield. Vous pouvez combiner le masquage et la validation sur un champ.