2009-06-05 7 views
0

est ici le code html:appel de la fonction Javascript ne pas se comporter de la façon dont je pense

<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0"> 
    <tr align="center" valign="middle"> 
     <td width="10" class="pagestyle" onClick="pageNo(-1);" align="right">&laquo;</td> 
     <td id="pageNum" class="pagestyle">1/5</td> 
     <td width="10" class="pagestyle" onClick="pageNo(+1);" align="left">&raquo;</td> 
    </tr> 
</table> 

Et voici le javascript correpondant:

var page = 0; 
function pageNo(off) { 
    if (((page + off) > -1) && ((page + off) < 6)) { 
     page = page + off; 
     parseRSS(page); 
    } else if ((page + off) === 6) { 
     page = 0; 
     parseRSS(page); 
    } else if ((page + off) === -1) { 
     page = 5; 
     parseRSS(page); 
    } 
} 

Qu'est-ce que cela est censé faire est de commencer par la page 1, ce qu'il fait, et comptez vers le haut ou vers le bas selon le lien cliqué. Cependant, quand nous arrivons à la page 5, je dois cliquer deux fois pour retourner à la page 1. Qu'est-ce qui cause le comportement du double-clic?

Répondre

3

Qu'est-ce que le nombre total de pages? Est-ce que vous les énumérez de un à six ou de zéro à cinq?

Changer votre fonction js en conséquence et simplifier l'expression de js (mentionné vous avez des pages de zéro à cinq):

var page = 0; 
var number_of_pages = 6; 
function pageNo(off) { 
    page = (page + off + number_of_pages) % number_of_pages; 
} 
+0

parfait, merci. – kylex

2

Mettre ce code dans Firebug et l'exécuter ...

var page = 5; 
function pageNo(off) { 
    if (((page + off) > -1) && ((page + off) < 6)) { 
     page = page + off; 
    } else if ((page + off) === 6) { 
     page = 0; 
    } else if ((page + off) === -1) { 
     page = 5; 
    } 
} 
pageNo(+1); 
alert(page); 

alertes 0. Ce qui est correct. Vous définissez la page sur 0 à partir de la page 5. Non 1.

3

La réponse est aussi simple que le fait que votre code javascript est indexé de zéro, mais vos pages rss sont indexées d'un? En d'autres termes, vous traitez votre code javascript comme si vous aviez 6 pages (0 à 5 inclus) & vous avez seulement 5 pages de RSS? Donc, quand vous êtes sur la 5ème page (page = 4 dans votre javascript) et vous cliquez sur suivant, cela vous amène à la 6ème page (page = 5), mais si votre fonction parseRSS ignore cette requête ou jette une erreur car elle doesn 't avoir une 6ème page de données, il semble ne rien faire. À partir de là, évidemment, un nouveau clic vous ramènera à la page 1 (page = 0).

2

Pour commencer, j'utiliser la forme simplifiée:

var page = 0; 
function pageNo(off) { 
    page = (page + 6 + off) % 6; 
    parseRSS(page); 
} 

Et vous avez cliquer deux fois pour revenir à la page 1 (5 -> 0 -> 1). Vous avez probablement besoin (en supposant que vous semblez indiquer que votre gamme de page est 1 à 5 inclus):

var page = 1; 
function pageNo(off) { 
    var numpages = 5; 
    page = (page - 1 + numpages + off) % numpages + 1; 
    parseRSS(page); 
} 

Cela se traduit par la plage (1,5) à (0,4) avant d'ajouter la valeur (et wrap value qui est un moyen d'éviter de calculer le module sur une valeur négative - certaines langues ont des problèmes avec cela), puis en ajoutant le offset et le wrapping, puis en rajoutant 1 pour revenir dans la gamme (1,5).

Questions connexes