通过onclick传递变量

| 我的页面上有一本书,其中包含3个iframe,1个iframe打开目录,而2个iframe同时打开2页,我也有2个按钮可通过此功能导航下一页和上一页
var pNum = 1;
var pNum2 = 2;
var maxPage = 108;
pNum = pNum+2;
pNum2 = pNum2+2;
if (pNum > maxPage) {pNum=1;pNum2=2;}
    document.getElementById(\"Frame_C\").src=\"page\"+pNum+\".jpg\";
    document.getElementById(\"Frame_B\").src=\"page\"+pNum2+\".jpg\";
}
function prev(){
    pNum = pNum-2;
    pNum2 = pNum2-2;
    if (pNum < 1) {pNum=107;pNum2=108;}
        document.getElementById(\"Frame_C\").src=\"page\"+pNum+\".jpg\";
        document.getElementById(\"Frame_B\").src=\"page\"+pNum2+\".jpg\";
} 
如果我单击目录中的链接,则会用此链接打开2页
<td>
 <p class=Mmenu>
  <a href=\"page36.jpg\" target=\"Frame_C\" onClick=\"window.open(\'page37.jpg\',\'Frame_B\')\">whatever</a>
</td>
问题从这里开始,如果我单击上一个下一个按钮,我希望它从第36,37页继续,但是从函数中的pNum继续发生什么情况,如何从onclick更新pNum?或另一种解决方案!     
已邀请:
您正在遇到麻烦,因为您的“无论如何”链接正在更改prev()函数期望不被处理的状态。 当一个人处于某种状态(例如,一些变量代表一本书带有页面)时,重要的是不要违反表示不变式或内部表示。从而   接触本书的所有内容均应保持其内部状态一致。 编写这种情况的一种好方法是创建一堆特殊的接口函数,以确保状态一致(下面通过单个函数gotoPage进行了演示,该函数确保所有内容保持整洁;一个函数可以使用多个函数)功能,但他们每个人都需要保持整洁)。 首先,必须想出内部状态所需的规则。在下面的示例中,规则为\“ rightPage始终等于leftPage + 1,并且iframe始终显示leftPage.jpg和rightPage.jpg,除非页面无效,在这种情况下iframe会显示“ :空白\”。 尝试这个:
function $id(id) {
    return document.getElementById(id);
}

/*
    internal representation
    these values changed only by the gotoPage function
    invariant:
        - rightPage is always equal to leftPage+1
        - iframes always show leftPage.jpg and rightPage.jpg, 
          except if it\'s an invalid page, in which case that 
          iframe shows an about:blank
*/
var leftPage = 0; // page0 is blank
var rightPage = 1; // must always be equal to leftPage+1; which may be an invalid page
var PAGE_MAX = ???;
function gotoPage(num) {
    if (num<0)
        num = 0;
    if (num>PAGE_MAX)
        num = PAGE_MAX; // may need to think about this some more

    // most books seem to put even pages on left and odd on right
    function isEven(n) {
        return n%2==0; // sidenote: abs(n%2)==1 -> odd
    }
    leftPage = isEven(num) ? num : num-1;
    rightPage = leftPage+1;

    updateDisplay();
}

function prev() {
    gotoPage(leftPage-2);
}
function next() {
    gotoPage(leftPage+2);
}
function gotoPageByGuess(elem) {
    var pageNum = parseInt(elem.innerHTML.slice(-2));
    gotoPage(pageNum);
}

function updateDisplay() {
    // using jquery
    $id(\'leftPage\').src = \'page\'+leftPage+\'.jpg\';
    if (rightPage <= PAGE_MAX)
        $id(\'rightPage\').src = \'page\'+rightPage+\'.jpg\';
    else
        $id(\'rightPage\').src = \'about:blank\';            
}
然后,不要使用常规的href或目标,而只需执行以下操作:
<a onclick=\"prev()\">Previous</a>
<a onclick=\"next()\">Next</a>
然后,您可以根据最简单的方法执行以下任一操作:
<a onclick=\"gotoPage(26)\">Chapter 2: Some Title......... p26</a>
<a onclick=\"gotoPageByGuess(this)\">Chapter 2: Some Title......... p26</a>
编辑:删除了with(Math){...}语句,该语句使您可以使用abs()之类的数学函数,而无需冗长地调用Math.abs()     

要回复问题请先登录注册