| 

.NET C# Java Javascript Exception

4
Hallo zusammen,

ich wollte wie in diesem Beispiel meine Datepicker von jQuery UI funktionell erweitern damit bei einem Reload der nicht selektierbare Date Ranger nicht selektiert werden kann.

Nun wenn ich die ähnliche Funktion vom Event onSelect auch beim Event beforeShow einbaue, funktioniert der Datepicker nicht mehr und in der Firefox Fehlerkonsole erscheint diese Meldung: "too much recursion"

Hier der Code der Implementierung:
var dates = $( "#from, #to" ).datepicker({
regional: 'de',
dateFormat: 'dd.mm.yy',
showOn: "button",
buttonImage: "${resource(dir:'images/icons',file:'calendar.png')}",
buttonImageOnly: true,
onSelect: function( selectedDate ) {
var option = this.id == "from" ? "minDate" : "maxDate",
instance = $( this ).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( "option", option, date );
},
beforeShow: function(input, inst) {
var option = this.id == "from" ? "minDate" : "maxDate",
instance = $(this).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
input.value, instance.settings );
dates.not( this ).datepicker( "option", option, date );
}
});


Kann mir wer weiterhelfen? :(

Gruss
News:
17.08.2011
redfish 115 1 5
redfish 115 1 5
3 Antworten
3
Weil:
var dates = $( "#from, #to" ).datepicker({

triggert ein beforeShow inline (also nicht mit setTimeout entkoppelt)
dates.not( this ).datepicker( "option", option, date );

wir in beforeShow aufgerufen, was wiederum einen beforeShow Trigger auslöst.

[edit]
Um die Rekursion zu unterbrechen:
beforeShow: function(input, inst) {
if( $(this).data("skip_before_event") )
{
$(this).data("skip_before_event",false);
return;
}
$(this).data("skip_before_event",true);
var option = this.id == "from" ? "minDate" : "maxDate",
instance = $(this).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
input.value, instance.settings );
dates.not( this ).datepicker( "option", option, date );
}
17.08.2011
DaSpors 4,2k 2 8
DaSpors 4,2k 2 8
0
K, ich glaube ich verstehe es... aber wie kann ich das Objekt date den einzelnen Dates der Datepickers zuweisen?
17.08.2011
redfish 115 1 5
1
siehe edit in meiner antwort
DaSpors 18.08.2011
0
Danke vielmals... ich musste deine Ergänzung auch noch beim onSelect hinzufügen, dann hat es aber funktioniert!

Hier der finale Code für alle Interessenten:
var dates = $( "#from, #to" ).datepicker({
regional: 'de',
dateFormat: 'dd.mm.yy',
showOn: "button",
buttonImage: "${resource(dir:'images/icons',file:'calendar.png')}",
buttonImageOnly: true,
onSelect: function( selectedDate ) {
if( $(this).data("skip_before_event") )
{
$(this).data("skip_before_event",false);
return;
}
$(this).data("skip_before_event",true);
var option = this.id == "from" ? "minDate" : "maxDate",
instance = $( this ).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( "option", option, date );
},
beforeShow: function(input, inst) {
if( $(this).data("skip_before_event") )
{
$(this).data("skip_before_event",false);
return;
}
$(this).data("skip_before_event",true);
var option = this.id == "from" ? "minDate" : "maxDate",
instance = $(this).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
input.value, instance.settings );
dates.not( this ).datepicker( "option", option, date );
}
});


Ich frage mich zwar ob es nicht eine Weg mit weniger Codezeilen gibt aber hauptsache es funktioniert! :)

Gruss
19.08.2011
redfish 115 1 5

Stelle deine Javascript-Frage jetzt!