La question est parce que la fonction de retour (ou leftlist
rightlist
) a perdu son champ d'application; this
dans la fonction ne fait plus référence à l'élément div[id="leftSideList"]
, d'où l'erreur.
Vous pouvez résoudre ce problème en utilisant $.proxy
, mais il est incroyablement laid et pas vraiment une solution viable pour un environnement de production:
function _list(key) {
switch (key) {
case 'leftlist':
return $.proxy($("div[id=leftSideList]").leftlist, $("div[id=leftSideList]"));
case 'rightlist':
return $.proxy($("div[id=leftSideList]").rightlist, $("div[id=leftSideList]"));
}
}
Working example - Notez que cette utilise construit dans les méthodes jQuery que vous n'avez pas fourni la source de leftlist()
et rightlist()
.
Une meilleure solution serait d'éviter complètement cette abstraction totalement inutile. Il ne vous offre aucun avantage, autre que de garder l'élément sélectionné cohérent.
function _list(key, action) {
return $("div[id=leftSideList]")[key](action);
}
_list('leftlist', 'refresh')
Notons enfin que l'utilisation div[id=leftSideList]
est redondant et lent. Vous pouvez simplement utiliser #leftSideList
à la place. La seule raison pour laquelle vous utiliserez le sélecteur d'attribut est si vous avez plusieurs éléments avec le même attribut id
- qui est invalide et un problème que vous devez corriger dès que possible.
Merci beaucoup! Cela fonctionne exelent. Et merci de nous conseiller sur mon code –