2009-06-05 6 views
0

здесь является HTML:Javascript вызов функции не ведет себя так, как я ожидал

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

А вот corrosponding 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. Что вызывает поведение двойного щелчка?

ответ

3

Общее количество страниц? Вы перечисляете их от одного до шести или от нуля до пяти?

Изменение функции Js соответственно и упростить выражение JS (упомянутый у вас есть страницы от нуля до пяти):

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

безупречный, спасибо. – kylex

2

Ввод этого кода в поджигатель и запустить его ...

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. Что является правильным. Вы устанавливаете страницу на 0 со страницы 5. Не 1.

3

ответ так же просто, как и то, что ваш Javascript код индексируется с нуля, но ваши страницы rss индексируются от одного?

Другими словами, вы обрабатываете свой код javascript, как если бы у вас было 6 страниц (от 0 до 5 включительно) & у вас на самом деле было 5 страниц RSS? Поэтому, когда вы находитесь на 5-й странице (стр. = 4 в вашем javascript), и вы нажимаете дальше, она выводит вас на 6-ю страницу (страница = 5), но если ваша функция parseRSS игнорирует этот запрос или выдает ошибку, так как она не работает У меня есть 6-я страница данных, она ничего не делает. Оттуда, очевидно, нажав снова, вы вернетесь на страницу 1 (страница = 0).

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

Смежные вопросы