Javascript函数调用不符合我的预期

时间:2009-06-05 05:14:13

标签: javascript

这是html:

<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>

这是相应的javascript:

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);
    }
}

这应该做的是从第1页开始,然后根据点击的链接向上或向下计数。但是,当我们到达第5页时,我必须单击两次才能返回到第1页。导致双击行为的原因是什么?

4 个答案:

答案 0 :(得分:3)

总页数是多少? 你是从1到6或从0到5枚举它们吗?

相应地更改你的js函数并简化js表达式(提到你有从0到5的页面):

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

答案 1 :(得分:3)

答案很简单,因为你的javascript代码是从零索引的,但是你的rss页面是从一个索引的吗?

换句话说,你正在对你的javascript代码进行处理,好像你有6个页面(0到5个包含)和&amp;你实际上只有5页的RSS?所以,当你在第5页(你的javascript中的页面= 4)并且你点击下一步时,它会带你到第6页(页面= 5),但是如果你的parseRSS函数忽略了这个请求或者因为它没有引发错误没有第6页的数据,似乎什么都不做。从那里,显然,再次点击将使您回到第1页(页面= 0)。

答案 2 :(得分:2)

将此代码放入firebug并运行它......

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);

警告0.哪个是正确的。您正在从第5页将页面设置为0.不是1.

答案 3 :(得分:2)

首先,我将使用简化形式:

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

点击两次以返回第1页(5 -> 0 -> 1)。您可能需要(假设您似乎表明您的页面范围是1到5):

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

这会在添加值之前将范围(1,5)转换为(0,4)(以及包装值,这是避免在负值上计算模数的方法 - 某些语言有问题),然后添加偏移和包装,然后再次加1以返回范围(1,5)。