Joomla.it Forum
Componenti per Joomla! => Gestione Form => : joomba 25 Nov 2011, 22:12:46
-
Ciao ragazzi,
sto cercando di realizzare un motore di calcolo utilizzando chronoforms, ma non riesco a trovare come collegare i vari campi, spiego meglio come deve essere composto il form che l'utente deve visualizzare :
1.- campo calendario : l'utente seleziona la data di arrivo presso un bed breakfast + l'ora di arrivo
2.- campo calendario : l'utente seleziona la data di partenza + l'ora di partenza
3.- campo dove viene visualizzato il totale numero di giorni
4.- campo da flaggare Prezzo Bassa stagione
5.- campo da flaggare Prezzo Alta stagione
6.- campo Totale Prezzo ( dato dal totale numero di giorni x la scelta del prezzo fisso bassa o alta stagione)
7.- bottone submit per procedere alla prenotazione
Ora dal punto 4 al 7 ho capito come fare, ma non riesco a capire come far calcolare il numero di giorni dalla selezione di 2 calendari.
C'e' qualche post che parla di questo ? una dritta ??? ....
grazie per le risposte che potrete darmi
joomba
-
Usa una funzione javascript chiamata dal secondo campo calendario che assegna il valore al campo giorni.
Lo stesso per il totale prezzo con una funzione chiamata dai prezzi
-
sto impazzendo.... non riesco a trovare la funzione che fa calcolare la differenza tra le date
-
se cerchi con google per "differenza date javascript" ne trovi diverse già pronte
-
Ciao Vales, ti ringrazio per la risposta. Ho trovato questo codice che posto qui di seguito
----------------------------------------------------------
<script>
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa))
{
return false;
}else{
anno = parseInt(stringa.substr(6),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);
var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}
function confronta_data(data1, data2){
// controllo validità formato data
if(controllo_data(data1) &&controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6)+data2.substr(3, 2)+data2.substr(0, 2);
//controllo se la seconda data è successiva alla prima
if (data2str-data1str<0) {
alert("La data iniziale deve essere precedente quella finale");
}else{
alert("ok");
}
}else{
alert("Il formato data deve essere gg/mm/aaaa");
}
}
confronta_data("20/02/2008", "04/03/2008");
</script>
-------------------
ma non ho capito come devo inserirlo in questo di chronoform, cioe' il calcolo dei giorni deve apparire in automatico, questo il codice del chronoform
<div class="ccms_form_element cfdiv_header" id="_h1_bb_lowcost_h1___container_div"><h1>BB Lowcost</h1><div class="clear"><><>
<div class="ccms_form_element cfdiv_datetime" id="data_arrivo_container_div"><label>Data arrivo</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="arrivo" />
<div class="clear"><><div id="error-message-arrivo"><><>
<div class="ccms_form_element cfdiv_datetime" id="data_partenza_container_div"><label>Data partenza</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="partenza" />
<div class="clear"><>
<div id="error-message-partenza"><><><div class="ccms_form_element cfdiv_text" id="totale_giorni_container_div"><label>Totale giorni</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_giorni" />
<div class="clear"><>
<div id="error-message-totale_giorni"><><><div class="ccms_form_element cfdiv_radio" id="tipologia_container_div"><label>Tipologia</label><input type="hidden" name="tipologia" value="" alt="ghost" />
<input type="radio" name="tipologia" id="tipologia_bassastagione" title="" value="BassaStagione" class="validate['required']">
<label for="tipologia_bassastagione">BassaStagione</label>
<input type="radio" name="tipologia" id="tipologia_altastagione" title="" value="AltaStagione" class="validate['required']">
<label for="tipologia_altastagione">AltaStagione</label>
<div class="clear"><><div id="error-message-tipologia"><><>
<div class="ccms_form_element cfdiv_text" id="totale_prezzo_container_div"><label>Totale Prezzo</label><input maxlength="150" size="30" class=" validate['required','number']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_prezzo" />
<div class="clear"><><div id="error-message-totale_prezzo"><><>
<div class="ccms_form_element cfdiv_text" id="email_container_div"><label>Email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email" />
<div class="clear"><><div id="error-message-email"><><>
<div class="ccms_form_element cfdiv_text" id="ripeti_email_container_div"><label>Ripeti email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email1" />
<div class="clear"><><div id="error-message-email1"><><>
<div class="ccms_form_element cfdiv_text" id="cognome_e_nome_container_div"><label>Cognome e Nome</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" value="" name="nome" />
<div class="clear"><><div id="error-message-nome"><><>
<div class="ccms_form_element cfdiv_submit" id="input_submit_10_container_div"><input name="input_submit_10" class="" value="Prenota" type="submit" />
<div class="clear"><><div id="error-message-input_submit_10"><><>
-----------------------------
ti ringrazio se potrai darmi un idea di come fare...
joomba
-
acc... non ne cavo piede.... dove posso cercare un po' di istruzione in merito ?
-
ancora non ho risolto... qualcuno mi da una mano ?
-
Dal codice che vedo stai usando chronoforms v4
il javascripts lo devi inserire senza i tag <script > iniziali e finali in una action Load Js che inserirai in On Load all'inizio.
Dovrai poi modificare manualmente il codice generato dal form inserendo la chiamata alla funzione javascript confronta_data nel campo della seconda data aggiungendo alla input
onchange="confronta_data();"
in questo modo se tutto è ok dopo aver inserito la data cliccherai fuori dal campo otterrai l'effetto.
-
Ciao Vales, ti ringrazio per la risposta.
Ti confermo che sto utilizzando l'ultima versione Chronoform V4.
Allora, ho seguito i passi che mi hai indicato, ma non riesco a farlo funzionare. Ho inserito anche un campo "Totale giorni" , ma non ho capito come impostare il codice in questo campo.
Inoltre quando ricevo l'email , nell'elenco delle voci mi riporta anche la voce "Riscrivi email" con l'indirizzo email , come faccio per disabilitare l' invio di questa voce ?
Il codice risultato del form e' il seguente:
<div class="ccms_form_element cfdiv_header" id="_h1_lowcost_h1___container_div"><h1>Lowcost</h1><div class="clear"><><>
<div class="ccms_form_element cfdiv_datetime" id="arrivo_container_div"><label>Arrivo</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="data1" />
<div class="clear"><><div id="error-message-data1"><><>
<div class="ccms_form_element cfdiv_datetime" id="partenza_container_div"><label>Partenza</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="data2" onchange="confronta_data();" />
<div class="clear"><><div id="error-message-data2"><><>
<div class="ccms_form_element cfdiv_text" id="totale_giorni_container_div"><label>Totale giorni</label><input maxlength="150" size="30" class=" validate['number']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_giorni" />
<div class="clear"><><div id="error-message-totale_giorni"><><>
<div class="ccms_form_element cfdiv_text" id="prezzo_container_div"><label>Prezzo</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="prezzo" />
<div class="clear"><><div id="error-message-prezzo"><><>
<div class="ccms_form_element cfdiv_text" id="email_container_div"><label>Email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email" />
<div class="clear"><><div id="error-message-email"><><>
<div class="ccms_form_element cfdiv_text" id="riscrivi_email_container_div"><label>Riscrivi email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email1" />
<div class="clear"><><div id="error-message-email1"><><>
<div class="ccms_form_element cfdiv_text" id="cognome_e_nome_container_div"><label>Cognome e Nome</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" value="" name="nome" />
<div class="clear"><><div id="error-message-nome"><><>
<div class="ccms_form_element cfdiv_submit" id="prenota_container_div"><input name="prenota" class="" value="Prenota" type="submit" />
<div class="clear"><><div id="error-message-prenota"><><>
-------
ti ringrazio se potrai darmi una risposta appena ti e' possibile, puoi vedere il form di prova a questo link
http://joomba.altervista.org/joomla/index.php?option=com_chronoforms&chronoform=Lowcost (http://joomba.altervista.org/joomla/index.php?option=com_chronoforms&chronoform=Lowcost)
saluti
Joomba
-
un altro errore "fastidioso" che mi compare e' che se ad esempio gli indirizzi email inseriti sono diversi, mi segnala giustamente l'errore , ma nei campi relativi compare visibile questo codice
<script type='text/javascript'> <!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy63148 = 'test' + '@'; addy63148 = addy63148 + 'test' + '.' + 'com'; document.write('<a ' + path + '\'' + prefix + ':' + addy63148 + '\'>'); document.write(addy63148); document.write('<\/a>'); //-->\n </script><script type='text/javascript'> <!-- document.write('<span style=\'display: none;\'>'); //--> </script>Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo. <script type='text/javascript'> <!-- document.write('</'); document.write('span>'); //--> </script>
come lo posso disabilitare ?
-
Penso sia causato da un errore di sintassi nel javascript.
Prova visualizzare la pagina sorgente del browser, quando da quel risultato, per visualizare l'errore.
-
ma ti riferisci al campo email ?... questo e' quello che si visualizza
<span class="cf_alert"><ol><li>Le Email non sono uguali</li><li>Le Email non sono uguali</li></ol></span><form action="http://joomba.altervista.org/joomla/?chronoform=Lowcost&event=submit" name="Lowcost" id="chronoform_Lowcost" method="post" class="Chronoform"><div class="ccms_form_element cfdiv_header" id="_h1_lowcost_h1___container_div"><h1>Lowcost</h1><div class="clear"><><><div class="ccms_form_element cfdiv_datetime" id="arrivo_container_div"><label>Arrivo</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" name="data1" value="2011-12-10" />
<div class="clear"><><div id="error-message-data1"><><><div class="ccms_form_element cfdiv_datetime" id="partenza_container_div"><label>Partenza</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" name="data2" value="2011-12-11" />
<div class="clear"><><div id="error-message-data2"><><><div class="ccms_form_element cfdiv_text" id="totale_giorni_container_div"><label>Totale giorni</label><input maxlength="150" size="30" class=" validate['number']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_giorni" />
<div class="clear"><><div id="error-message-totale_giorni"><><><div class="ccms_form_element cfdiv_text" id="prezzo_container_div"><label>Prezzo</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="prezzo" />
<div class="clear"><><div id="error-message-prezzo"><><><div class="ccms_form_element cfdiv_text" id="email_container_div"><label>Email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" name="email" value="
<script type='text/javascript'>
<!--
var prefix = 'ma' + 'il' + 'to';
var path = 'hr' + 'ef' + '=';
var addy46674 = 'df.web' + '@';
addy46674 = addy46674 + 'libero' + '.' + 'it';
document.write('<a ' + path + '\'' + prefix + ':' + addy46674 + '\'>');
document.write(addy46674);
document.write('<\/a>');
//-->\n </script><script type='text/javascript'>
<!--
document.write('<span style=\'display: none;\'>');
//-->
</script>Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
<script type='text/javascript'>
<!--
document.write('</');
document.write('span>');
//-->
</script>" />
<div class="clear"><><div class="error-message">Le Email non sono uguali<><><div class="ccms_form_element cfdiv_text" id="riscrivi_email_container_div"><label>Riscrivi email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" name="email1" value="
<script type='text/javascript'>
<!--
var prefix = 'ma' + 'il' + 'to';
var path = 'hr' + 'ef' + '=';
var addy4968 = 'info' + '@';
addy4968 = addy4968 + 'navi-veloci' + '.' + 'it';
document.write('<a ' + path + '\'' + prefix + ':' + addy4968 + '\'>');
document.write(addy4968);
document.write('<\/a>');
//-->\n </script><script type='text/javascript'>
<!--
document.write('<span style=\'display: none;\'>');
//-->
</script>Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
<script type='text/javascript'>
<!--
document.write('</');
document.write('span>');
//-->
</script>" />
<div class="clear"><><div class="error-message">Le Email non sono uguali<><><div class="ccms_form_element cfdiv_text" id="cognome_e_nome_container_div"><label>Cognome e Nome</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" name="nome" value="test" />
<div class="clear"><><div id="error-message-nome"><><><div class="ccms_form_element cfdiv_submit" id="prenota_container_div"><input name="prenota" class="" value="Prenota" type="submit" />
<div class="clear"><><div id="error-message-prenota"><><><input type="hidden" name="56083fabd67fb13088e6779c02858d47" value="1" /></form>
-
la cosa strana che ho notato adesso, e' che l'errore mi viene visualizzato solo nella home page, ossia quando visualizzo l'articolo dove ho inserito il codice di richiamo del form {chronoforms}Lowcost{/chronoforms} , potrebbe essere questo una causa ?
-
ma per il "calcolo della differenza tra date" invece puoi darmi un consiglio per risolvere il problema ?
-
occorre una funzione javascript che faccia quel calcolo, anche quella la trovi sul web.
-
Dal codice che vedo stai usando chronoforms v4
il javascripts lo devi inserire senza i tag <script > iniziali e finali in una action Load Js che inserirai in On Load all'inizio.
Dovrai poi modificare manualmente il codice generato dal form inserendo la chiamata alla funzione javascript confronta_data nel campo della seconda data aggiungendo alla input
onchange="confronta_data();"
in questo modo se tutto è ok dopo aver inserito la data cliccherai fuori dal campo otterrai l'effetto.
scusa.... ma i codici li ho trascritti cosi' come mi hai spiegato, ma sicuramente mi sono perso da qualche parte.... come faccio a visualizzare il calcolo della differenza dei giorni ? dove devo inserire il codice ?
-
Mi sono perso anch'io. Mi hai proposto le funzioni che confrontano le date non quelle che calcolano la differenza. Va trovata una funzione che svolge quel compito.
-
ho trovato questo codice....
<script language="javascript" type="text/javascript">
<!--
function days_between(date1, date2) {
// The number of milliseconds in one day
var ONE_DAY = 1000 * 60 * 60 * 24
// Convert both dates to milliseconds
var date1_ms = date1.getTime()
var date2_ms = date2.getTime()
// Calculate the difference in milliseconds
var difference_ms = Math.abs(date1_ms - date2_ms)
// Convert back to days and return
return Math.round(difference_ms/ONE_DAY)
}
//-->
</script>
..............con il richiamo interno pagina come segue.....
<script language="javascript" type="text/javascript">
<!--
// Store the current date and time
var current_date = new Date()
// Store the date of the next New Year's Day
var new_years_date = new Date()
new_years_date.setYear(new_years_date.getFullYear() + 1)
new_years_date.setMonth(0)
new_years_date.setdate(1)
// Call the days_between function
var days_left = days_between(current_date, new_years_date)
// Write the result to the page
if (days_left> 1) {
document.write("<strong>Mancano " + days_left + " giorni alla fine
dell'anno.</strong>") }
else {
document.write("<strong>Manca " + days_left + " giorni alla fine
dell'anno.</strong>") }
//-->
</script>
ho provato diverse soluzioni... ma nisba
-
Mi sembra vada bene la prima funzione l'altra è per calcolare quanti giorni mancano alla fine dell'anno.
Va però modificata ora vedo di farla funzionare.
-
ok ti ringrazio per l'aiuto
-
ciao Vales hai qualche news ?
-
Mi sembra vada bene la prima funzione l'altra è per calcolare quanti giorni mancano alla fine dell'anno.
Va però modificata ora vedo di farla funzionare.
ciao Vales, scusami per il disturbo, hai fatto qualche test di prova ? sono ancora fermo, non riesco ad andare avanti. Ti ringrazio se mi dai qualche ulteriore info.
-
Il problema sono i campi data time box che non permettono di inserire il richiamo alla funzione javascripts
Ho provato un nuovo form con due campi normali in cui inserisco le date e tutto è OK.
Questo il codice dei campi
<div class="ccms_form_element cfdiv_text" id="data_1_container_div"><label>Data 1</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_1" />
<div class="clear"></div><div id="error-message-data_1"></div></div><div class="ccms_form_element cfdiv_text" id="data_2_container_div"><label>Data 2</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_2" onchange="giorni_differenza(this.form);")/>
<div class="clear"></div><div id="error-message-data_2"></div></div><div class="ccms_form_element cfdiv_text" id="differenza_date_container_div"><label for="diff">Differenza date</label><input id="diff" maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="diff" />
<div class="clear"></div><div id="error-message-diff"></div></div><div class="ccms_form_element cfdiv_submit" id="input_submit_5_container_div"><input name="input_submit_5" class="" value="Submit" type="submit" />
<div class="clear"></div><div id="error-message-input_submit_5"></div></div>
questo il codice javascript
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa)) {
return false;
}else{
anno = parseInt(stringa.substr(6,4),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);
var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}
function confronta_data(data1, data2){
// controllo validità formato data
if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
//controllo se la seconda data è successiva alla prima
//document.write(data1str);
//document.write(data2str-data1str);
if ((data2str-data1str)<0) {
alert("La data iniziale deve essere precedente quella finale");
}else{
alert("ok");
}
}else{
alert("Il formato data deve essere gg/mm/aaaa");
}
}
function giorni_differenza(form){
//document.write("sono qui");
var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
if(!controllo_data(data1) || !controllo_data(data2)){
alert('Inserire le date nel formato gg/mm/aaaa');
return -1;
}
/* if(!confronta_data(data1,data2)){
alert('La data di inizio deve essere precedente quella di fine');
return -1;
}*/
anno1 = parseInt(data1.substr(6,4),10);
mese1 = parseInt(data1.substr(3, 2),10);
giorno1 = parseInt(data1.substr(0,2),10);
anno2 = parseInt(data2.substr(6,4),10);
mese2 = parseInt(data2.substr(3, 2),10);
giorno2 = parseInt(data2.substr(0,2),10);
var dataok1=new Date(anno1, mese1-1, giorno1);
var dataok2=new Date(anno2, mese2-1, giorno2);
differenza = dataok2-dataok1;
giorni_differenza = new String(differenza/86400000);
form.elements['diff'].value=giorni_differenza;
alert(giorni_differenza+' giorni di differenza');
return giorni_differenza;
}
L'alternativa per usare Data time box potrebbe essere inserire il richiamo al javascripts nel campo differenza data con onclick="giorni_differenza(this.form);")
-
ciaoo Vales !!!! ti ringrazio immensamente, ho provato e funziona perfettamente.
L'unica cosa e' che inserendo la data in modo manuale, vorrei rendere obbligatorio la tipologia data da scrivere cioe' far visualizzare un avviso che blocca l'operazione e avverte l'utente che nel caso venga scritta la data in modo diverso, viene visualizzato un avviso di questo tipo "la data inserita e' errata ed il modo giusto da inserire e' ad es. 10/10/2011". Ho attivato il Tooltip , ma a parte il fatto che l'utente deve cliccare appositamente il "?" per capire, preferirei velocizzare con un avviso. Come posso fare ?
grazie !!!!
joomba
-
Gli script javascript già controllano che le due date abbiano il formato gg/mm/aaaa.
-
Ciao Vales, innanzitutto Auguri di Buon Anno anche se in ritardo ( essendo rientrato oggi al lavoro).
Allora ho testato i codici come mi hai indicato e funzionano, ma ora che li ho caricati online, inserendo le date vengono calcolate a video, ma quando ricevo l'email del form ottengo questa risposta
-------------------------
Arrivo {data1}
Partenza {data2}
Totale giorni {totale_giorni}
Email joomba@tiscali.it
Riscrivi email joomba@tiscali.it
Cognome e Nome joomba
---------------------------
quindi non vengono riportati i dati che vengono inseriti dall'utente. Da cosa puo' dipendere ? Ti ringrazio per l'info che potrai darmi
-
Non riconosce come esistenti quei campi.
Controlla di usare nell'email gli stessi nomi dei campi del form.
Es. io avevo usato data_1 e tu data1.
-
ho risolto parzialmente il problema, cancellando tutto e riscrivendo totalmente il form, ma ottengo l'errore solo nel campo della differenza date, infatti non mi visualizza nella email:
Data 1 10/02/2012
Data 2 12/02/2012
Differenza date {differenza_date}
Email joomba@tiscali.it
Cognome e Nome joomba
Mentre online, effettuando l'inserimento delle date, il calcolo lo visualizzo solo per la prima volta. Se correggo una delle 2 date inserite, il calcolo della differenza non viene piu' visualizzato.
Vorrei provare ad inserire un bottone di "calcola" per calcolare quindi il risultato della differenza delle date per il prezzo del soggiorno. Questi risultati voglio farli comparire in 2 campi differenti ossia differenza date e totale prezzo.
Con il bottone di "calcola" cosi si dovrebbe eliminare il calcolo automatico cliccando con il mouse come nella prova precedente. Come posso fare quindi per aggiungere questo bottone di calcolo ?
-
come diceva archimede dei fumetti ???..... Eureka !
bene ho risolto il problema , ora ricevo tutti i dati perfettamente via email, erano errate alcune parole di sintassi invece che "differenza_date" la parola esatta era "diff" , che io distrattamente non avevo visto inizialmente.
Ora mi rimane di inserire il bottone di calcolo prezzo
-
Ciao Vales,
sto cercando di portare a termine il lavoro iniziato, ho inserito un "radio box" con 2 opzioni di scelta, ognuna di queste opzioni ha un prezzo diverso dall'altro, quindi l'utente scegliendo l'opzione che desidera, questa deve calcolare automaticamente il totale nel campo successivo. La moltiplicazione deve avvenire tra il valore del campo "radio box" scelto e il totale dei giorni che risulta dalla differenza tra data arrivo e partenza di cui ai precedenti codici gia' illustrati.
Puoi darmi una mano ?.. ti ringrazio
-
Metti il richiamo (onchange) ad una funzione javascript nel radio che quando modificato compie la moltiplicazione del valore del radio con quello dei giorni.
Dovrai definire la funzione e sei a dama.
-
Ciao Vales...
mi sono dinuovo perso... diversi tentativi ma non ho capito come impostare la funzione e dove inserirla mi dai una dritta appena hai un attimo di tempo ? ti ringrazio
-
ciao Vales... scusa se insisto... hai qualche dritta da darmi per capire come inserire onchange e dove trovare la funzione adatta ?
grazie
-
Ciao Vales, ho trovato questo codice in una tua guida.... adattandolo al mio lavoro potrebbe essere quello che mi serve.... ma la guida fa riferimento alla versione precedente di chronoform, mentre in V4 devo inserirla in una nuova "Load js" ? Come la lego alla scelta radio con onchange ?
--------
function updatethis(form) {
form.elements['Field3'].value = form.elements['Field1'].value * form.elements['Field2'].value);
}
--------------
-
ok ho capito per quanto riguarda la funzione.... ma il valore (nel mio caso il prezzo) del campo radio come e dove lo inserisco ?
-
dunque.... ricapitolando, vediamo se ho ben capito ( o quasi )....
creo una nuova "Load js" che vado a inserire sotto la precedente "Load js" in On LOad
inserisco questo codice:
------
function updatethis(form) {
form.elements['prezzo'].value = form.elements['prezzo-1'].value + form.elements['totale_giorni'].value);
}
-------------
poi inserisco il richiamo nel radio
----
name="prezzo-1" onChange="updatethis(this.form);">
e nel campo del risultato inserisco
<input type="text" name="prezzo">
.... ho provato ma non funzia ....
-
Non è necessario usaare due Load JS basta che tu metta tutte le funzioni in un'unica Load JS
-
Non è necessario usaare due Load JS basta che tu metta tutte le funzioni in un'unica Load JS
.... ops... ma il codice relativo ai prezzi dove lo scrivo ??? devo creare un codice come questo che segue ?
function updatethis(form) {[/size] var costo = 0; if ((form.elements['asole'].value=="l_sup") || (form.elements['asole'].value=="l_inf")) costo =(form.elements['base'].value * 2.5);
-
Il codice lo hai già creato
function updatethis(form) {
form.elements['prezzo'].value = form.elements['prezzo-1'].value + form.elements['totale_giorni'].value);
}
lo devi aggiungere nell'unica Load JS.
Però non mi convince il nome dei radio prezzo-1, meglio non usare il segno meno nei campi nome metti prezzo1.
-
ok per prezzo1 , ma volevo intendere i valori veri e propri... cioe il prezzo ad esempio euro 50 al giorno, come e dove lo scrivo ?
-
allora ok per calcolare il prezzo1 del radio, ma per far calcolare anche il prezzo2 della seconda opzione radio ? devo duplicare il codice in questo modo ?
function updatethis(form) {[/size] form.elements['prezzo'].value = form.elements['prezzo2'].value + form.elements['totale_giorni'].value); }
-
Ad ogni campo radio assegni un value uguale al prezzo
<input type="radio" name="prezzo1" value="50" /> Prezzo € 50<br />
<input type="radio" name="prezzo1" value="100" /> Prezzo € 100<br />
ecc.
-
Il codice lo hai già creato
function updatethis(form) {
form.elements['prezzo'].value = form.elements['prezzo-1'].value + form.elements['totale_giorni'].value);
}
lo devi aggiungere nell'unica Load JS.
Però non mi convince il nome dei radio prezzo-1, meglio non usare il segno meno nei campi nome metti prezzo1.
inserendo il codice in "load js" il calcolo della differenza date non funzia.....
-
questo e' il risultato del codice generato e modificato:
[size=78%]-------------[/size]
CALCOLO DATE
<div class="ccms_form_element cfdiv_text" id="data_1_container_div"><label>Arrivo</label>
<input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_1" />
<div class="clear"><>
<div id="error-message-data_1"><><>
<div class="ccms_form_element cfdiv_text" id="data_2_container_div"><label>Partenza</label>
<input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_2" onchange="giorni_differenza(this.form);")/><div class="clear"><>
<div id="error-message-data_2"><><>
<div class="ccms_form_element cfdiv_text" id="differenza_date_container_div"><label for="diff">Totale giorni</label>
<input id="diff" maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="diff" /><div class="clear"><><div id="error-message-diff"><><>
---------
RADIO
<div class="ccms_form_element cfdiv_radio" id="autoID-7bdb2e87a3cc9bc69009083e7b204f71_container_div"><label>Scegli la soluzione</label><input type="hidden" name="input_radio_4" value="" alt="ghost" />
<div style="float:left; clear:none;">
<input type="radio" name="input_radio_4" onChange="updatethis(this.form);" id="input_radio_4_lowcost" title="" value="50" class="validate['required']" />
<label for="input_radio_4_lowcost">Lowcost</label>
<input type="radio" name="input_radio_4" onChange="updatethis(this.form);" id="input_radio_4_Offerta2" title="" value="100" class="validate['required']" />
<label for="input_radio_4_offerta2">Offerta2</label>
<><div class="clear"><><div id="error-message-input_radio_4"><><>
<div class="ccms_form_element cfdiv_text" id="autoID-3a220d88789f3372d5158c7e85393912_container_div">
<label>Prezzo</label>
<input maxlength="150" size="30" class=" validate['required','number']" title="" type="text" value="" name="prezzo" />
<div class="clear"><><div id="error-message-prezzo"><><>
--------------------
Mentre il codice Js inserito e' il seguente:
function updatethis(form) {
form.elements['prezzo'].value = form.elements['lowcost'].value + form.elements['diff'].value);
}
------------
Ma mi sto rendendo conto che comunque manca nel js il richiamo per il prezzo relativo all'Offerta2... dove sbaglio?
-
C'è anche un campo nascosto che ha lo stesso nome dei campi radio "input_radio_4" non credo che la cosa vada bene.
Nel javascript non vedo le altre funzioni definite in precedenza.
-
il codice js completo
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa)) {
return false;
}else{
anno = parseInt(stringa.substr(6,4),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);
var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}
function confronta_data(data1, data2){
// controllo validità formato data
if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
//controllo se la seconda data è successiva alla prima
//document.write(data1str);
//document.write(data2str-data1str);
if ((data2str-data1str)<0) {
alert("La data iniziale deve essere precedente quella finale");
}else{
alert("ok");
}
}else{
alert("Il formato data deve essere gg/mm/aaaa");
}
}
function giorni_differenza(form){
//document.write("sono qui");
var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
if(!controllo_data(data1) || !controllo_data(data2)){
alert('Inserire le date nel formato gg/mm/aaaa');
return -1;
}
/* if(!confronta_data(data1,data2)){
alert('La data di inizio deve essere precedente quella di fine');
return -1;
}*/
anno1 = parseInt(data1.substr(6,4),10);
mese1 = parseInt(data1.substr(3, 2),10);
giorno1 = parseInt(data1.substr(0,2),10);
anno2 = parseInt(data2.substr(6,4),10);
mese2 = parseInt(data2.substr(3, 2),10);
giorno2 = parseInt(data2.substr(0,2),10);
var dataok1=new Date(anno1, mese1-1, giorno1);
var dataok2=new Date(anno2, mese2-1, giorno2);
differenza = dataok2-dataok1;
giorni_differenza = new String(differenza/86400000);
form.elements['diff'].value=giorni_differenza;
alert(giorni_differenza+' giorni di differenza');
return giorni_differenza;
}
function updatethis(form) {[/size] form.elements['prezzo'].value = form.elements['lowcost'].value + form.elements['diff'].value); }
-
ho eliminato il campo nascosto.... ma non funzia ugualmente
-
sembra che non vanno daccordo i 2 codici js... se inserisco il secondo codice , il calcolo della differenza date non funziona
-
ciao Vales hai qualche news ?
-
ma il "+" in questa espressione significa somma ? per moltiplicare devo usare "*" ??
form.elements['lowcost'].value + form.elements['diff'].value); }
e comunque non funzia........
-
valesssss.... sto fermo sob... non riesco a uscirne, ho provato tutte le combinazioni ma non funziona... non capisco ... mi dai un idea di dove cercare ? ti ringrazio...
-
Vales... un altro imput di aiuto... mi sono arenato, inserendo i codici di calcolo prezzo non mi funziona la differenza date... come risolvo ?
-
qualcuno ha una idea per trovare il bandolo di questa matassa ????....
-
ciao Vales, sto riscontrando un problema sul motore di calcolo, o meglio, ho necessita' di apportare una variazione.
Quando si inseriscono le date di arrivo e partenza, il motore calcola in modo esatto la differenza del tempo tra una data e l'altra, ma nel caso capita che la differenza tra le date sia ad esempio inferiore a 3 giorni ma superiore a 2 , mi da il risultato decimale ad es.: 2,83333 .
Per questo motivo ho necessita' di arrotondare alla cifra superiore immediatamente dopo la precedente , ma il risultato deve essere con numero senza decimali. Facendo riferimento all'esempio precedente, il risultato che vorrei ottenere deve essere "3".
Si puo' fare ?
grazie per la risposta che potrai darmi
-
mi sorge un dubbio..... e' possibile che il motore di calcolo prenda il valore dell'orario inserito ? mi sembra strano
-
Credo che vi siano delle funzioni in grado di arrotondare i valori come voluto.
-
Ciao Vales, ho necessita' di aggiungere un giorno in piu' nel motore di calcolo che sto utilizzando, ho trovato il codice che segue, come faccio a farlo funzionare con il codice gia' creato?
public String addDay(String dateDbf,int dayToAdd){
String dataNew = "";
String DATE_FORMAT = "yyyyMMdd";
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
try{
Calendar c1 = Calendar.getInstance();
int anno = Integer.parseInt(dateDbf.substring(0,4));
int mese = Integer.parseInt(dateDbf.substring(4,6))-1;
int giorno = Integer.parseInt(dateDbf.substring(6,8));
c1.set(anno, mese, giorno);
c1.add(Calendar.DATE,dayToAdd);
dataNew = sdf.format(c1.getTime());
}catch (Exception e){
e.printStackTrace();
}
// RITORNA DIFFERENZA DATE
return dataNew;
}
Questo e' il codice tuttora online per il calcolo della differenza di date.
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa)) {
return false;
}else{
anno = parseInt(stringa.substr(6,4),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);
var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}
function confronta_data(data1, data2){
// controllo validità formato data
if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
//controllo se la seconda data è successiva alla prima
//document.write(data1str);
//document.write(data2str-data1str);
if ((data2str-data1str)<0) {
alert("La data iniziale deve essere precedente quella finale");
}else{
alert("ok");
}
}else{
alert("Il formato data deve essere gg/mm/aaaa");
}
}
function giorni_differenza(form){
//document.write("sono qui");
var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
if(!controllo_data(data1) || !controllo_data(data2)){
alert('Inserire le date nel formato gg/mm/aaaa');
return -1;
}
/* if(!confronta_data(data1,data2)){
alert('La data di inizio deve essere precedente quella di fine');
return -1;
}*/
anno1 = parseInt(data1.substr(6,4),10);
mese1 = parseInt(data1.substr(3, 2),10);
giorno1 = parseInt(data1.substr(0,2),10);
anno2 = parseInt(data2.substr(6,4),10);
mese2 = parseInt(data2.substr(3, 2),10);
giorno2 = parseInt(data2.substr(0,2),10);
var dataok1=new Date(anno1, mese1-1, giorno1);
var dataok2=new Date(anno2, mese2-1, giorno2);
differenza = dataok2-dataok1;
giorni_differenza = new String(differenza/86400000);
form.elements['diff'].value=giorni_differenza;
alert(giorni_differenza+' giorni di differenza');
return giorni_differenza;
}
-
.... con un po' di applicazione nei ritagli di tempo, ho risolto il problema !!!! basta aggiungere +1 cosi come segue ...
giorno = parseInt(stringa.substr(0, 2),10+1);
a questo punto si puo' chiudere questo post come risolto.... grazie a tutti sopratutto a Vales che mi ha instradato con le ottime guide che ha pubblicato.
Al prossimo post !!!!!!!!!!
joomba
-
Risolto
-
Ottimo. Ti sei preso una bella soddisfazione.