2010-01-19 4 views

Répondre

0

D'après ce que je peux dire à ce jour de votre script, le bloc de code suivant:

Kalender.prototype.writeMonth = function() { 
    var that = this; 

contient un code plus bas:

else if (this.isToday(displayNum, length) && this.isLink(displayNum, length)) 
    { 
     sbuffer.push('<td class="date" onClick="that.changeDate(this,\'' 
         + this.id + '\'); that.returnDate('+ this.month +','+ this.year+')">' + displayNum + '</td>'); 
    } 

Cela poserait un problème, puisque la variable that est déclaré dans la portée de cette fonction et l'événement onclick se déclenchera en dehors de la portée. IMO, la construction du HTML n'est pas la meilleure méthode ici. Il serait préférable de construire les cellules du tableau en utilisant le DOM et d'ajouter des gestionnaires d'événements qui sont dans la portée de la fonction. Cela arrive plusieurs fois.

Pour votre information, vous utilisez eval() dans votre code plutôt inutilement:

this.months = eval("config.language."+ this.options['language'] +".months"); 

// Can also be written as: 
this.months = config.language[this.options['language']].months; 

Voir Eval is Evil pour plus d'informations.

Lectures

MSDN - Building Tables Dynamically
MDC - Traversing an HTML table with JavaScript and DOM Interfaces
MDC - Working with Closures

+0

Merci pour l'aide. Pouvez-vous s'il vous plaît jeter un oeil sur le code et plus de conseils moi? – user160820

0

Vous devez déclarer la variable qui détient datepicker objet globalement.

var kalender; 
var kalender2; 

function reisedate(d) { 
    document.getElementById("abc").value = d.getDate() + "/" + parseInt(d.getMonth()+1) + "/" + d.getFullYear(); 
} 

// rest of the code 

Jetez un oeil à deux premières lignes.

+1

Vous devrez le faire pour chaque instance d'un objet datepicker, cependant. Je recommande d'utiliser correctement les fermetures pour obtenir la portabilité complète du code. –

+0

Je suis entièrement d'accord avec vous :) – kjagiello

Questions connexes