Goedenavond,

Ik zit met een probleem en ben daarmee tot in de late uurtjes (03:10) bezig geweest.

Ik gebruik de bekende Datepicker om een datum te selecteren.
Deze werkt zoals het hoort.

Maar ik wil nu een extra functie bouwen die het volgende doet:
Wanneer er in de Datepicker de datum "zondag 3 mei 2015" wordt aangeklikt (zondag is normaal gesproken niet aanklikbaar) moet er een extra hidden formfield worden gegenereerd.

De bewuste zondag 3 mei 2015 maak ik beschikbaar via:
var openDates = [[05,03,2015]];

Voor alle overige dagen (maandag t/m zaterdag) wordt sowieso de aangeklikte datum doorgegeven aan:
$("input[name='eventdate']").val(dateText);

Nu wil ik dat er voor de gewenste zondag 3 mei 2015 een speciale input field hebben.
Dus wanneer deze datum wordt aangeklikt moet er een nieuwe <input type='hidden' name='specialsunday' /> worden aangemaakt met daarin de waarde value='1'.

Vervolgens wil ik via een AJAX post de waarde van het veld 'specialsunday' doorsturen naar een ander php script welke controleert of er een specialsunday (3 mei 2015) is aangeklikt. Zo ja dan wordt er een melding getoond op het scherm. Die melding kan bijvoorbeeld zijn "Let op voor zondag 3 mei 2015 betaald u een extra toeslag".

Hoe kan ik dit het eenvoudigst realiseren?
Heb je mijn stukje code al uitgeprobeerd? Dat is m.i. de meest simpele oplossing.
Zoals al aangegeven, in het onSelect event triggert dit:
$("input[name='eventdate']").val(dateText);

geen "change" op het input veld.

Dus doe je dit handmatig:
$("input[name='eventdate']").val(dateText).trigger('change');


Maar zoals Ger aangeeft, er kunnen nog wel wat meer plooien uitgestreken worden.

Ik snap wel dat je naar iets werkends toe wilt, maar daarbij moet je je architectuur niet uit het oog verliezen.

Overigens: het feit dat de event niet getriggerd wordt ligt 100% aan het gebruik van die onSelect. Als je je datepicker direct aan je inputveld had gekoppeld, had je dit hele probleem niet gehad (EDIT: dit bewijst mijn eerder geplaatste variant - deze werkt "out of the box").
Hallo guys,

@Ger, ik heb jouw stukje code geprobeerd maar er gebeurd niets.
De berekentotaal() staat in het formulier.php script
en de Datepicker onSelect: staat in javascript.js

Als ik jou stukje code dus in javscript.js zet gebeurd er niets.
Ik ben niet optimaal kennisrijk met jquery daarom kom ik er ook niet meer uit.

@Thomas ik begrijp jouw regeletje code (handmatig) wel, maar waar zet ik deze dan neer?
Ik mis namelijk de aanroep van de berekentotaal() functie.

Ik heb de Datepicker gekoppeld aan een div omdat ik hem mooi heb opgemaak en niet met het Calender icoontje wil werken. Dat schilt namelijk weer een extra klik voor de gebruiker...
In je onSelect? ...

De aanroep van de berekentotaal() functie wordt getriggerd als je dateselect verandert.

Dit staat al in je code:
$('#processform  input[type="hidden"].selecteddate').change(function(){berekentotaal();});


Het probleem was wat je zelf omschreef: deze werd niet getriggerd, dit doe je nu handmatig in je onSelect...

Verander:
onSelect: function(dateText, inst) {
   $("input[name='eventdate']").val(dateText);
   $("#alternatedate").fadeIn();

   $.post( "/savedatum.php", { selecteddate:dateText } );
}

naar:
onSelect: function(dateText, inst) {
   $("input[name='eventdate']").val(dateText).trigger('change'); // <-- DIT TRIGGERT JE CHANGE EVENT, EN DAARMEE berekentotaal()
   $("#alternatedate").fadeIn();

   $.post( "/savedatum.php", { selecteddate:dateText } );
}

En gooi die savedatum er gewoon uit ofzo, ik snap nog steeds niet waar je die voor gebruikt.
@Thomas, ik ga even het één en ander nu aanpassen.

Als de trigger nu goed gaat werken kan die savedatum er inderdaad uit omdat de datum dan al via de trigger kan worden opgeslagen.

Ik laat van me horen.
Sorry hoor, maar ik vind dit omslachtig gedoe:

[code lang="js"]
$("input[name='eventdate']").change(function(){
berekentotaal();
});
[/code]
Hiermee hang je één enkele functie aan een eventListener, daarna ga je die event afvuren.
Waarom niet in één keer die functie aanroepen?
@ger, ik heb jouw stukje code geprobeerd omdat je zei dat het bovenstaande omslachtig is, maar daarmee werkt het niet zoals ik wil. Was het wel duidelijk uit mijn post op te maken dat de javascript.js (waarin de onSelect staat) niet in hetzelfde bestand staat als de berekentotaal() functie?

@thomas, door het stukje trigger('change'); achter de .val(dateText) te zetten krijg ik EINDELIJK dat werkend waar ik al zolang mee bezig ben.

eerlijk is eerlijk - thomas, kun je mij een priveberichtje sturen. Ik wil mijn belofte nakomen.

Reageren