单击时给变量另一个值

On click give variable another value

我正在尝试为页面实现分页功能。我有自定义的 post 类型,我已经遍历并收集了该页面的所有 post。我显示第一个 post 并隐藏其余的,我有 next/previous 按钮将显示下一个 post 并隐藏当前 post。它似乎在工作,但是我无法查看所有 posts - 只有其中的 2 个。

这是我的代码:

<?php
            $currProj = 1;
            $countposts = 3;
            ?>
                <?php if ($countposts>1) { 
                    $prevID = $currProj - 1;

                    if ($prevID <= 0) { 
                        $prevID = $countposts;
                    ?>
                        <a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
                    <?php } else { 
                    ?>
                        <a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>
                    <?php 
                    //$currProj = $prevID;  
                    }

                    echo $currProj; //This outputs 3 where it should be 1
                    $nextID = $currProj + 1; 

                    if ($nextID > $countposts) { 
                        $nextID = 1;

                    ?>
                        <a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
                    <?php } else { 

                    ?> 
                        <a class="btn-next" id="nextlink" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $nextID; ?>')" onclick="<?php $currProj=$nextID; ?>"> Next > </a>
                    <?php 
                    //$currProj = $nextID;
                    }

                } ?>

javascript 函数工作正常,问题似乎出在 $currProj 变量上。我认为问题出在标签中的 onClick 属性 - 是否有更好的方法让 onClick 事件为我的变量提供不同的值?或检查此 link 是否已被单击的方法,然后为 currProj 提供 prevID/nextID 的值?

我已经被困在这个问题上一段时间了,但我似乎一无所获。任何帮助将不胜感激。

如何创建一个 HTML 隐藏输入来存储这些值?

<input type="hidden" value="<?php echo $currProj ?>" id="currProj">

因此您可以使用 javascript 或 jQuery 在客户端访问并修改它。如果您想要服务器端的解决方案,您可以使用 ajax 和 POST 或 GET 请求。

也许这不是您要查找的内容(修改 php 属性),我误解了您的意思。如果您遇到这种情况,请告诉我。

您上面的代码似乎混淆了服务器端发生的事情和客户端发生的事情。 <?php ... ?> 中包含的任何内容都将在服务器上执行,然后作为 HTML 发送到客户端——例如,这一行:

<a class="btn-previous" href="javascript:showProject('<?php echo $currProj; ?>','<?php echo $prevID; ?>')" onclick="<?php $currProj=$prevID; ?>"> < Previous </a>

最终将与所有 PHP 解释的内容一起发送给客户端:

<a class="btn-previous" href="javascript:showProject(1,3)" onclick=""> < Previous </a>

这里的关键是当你点击时你不是重新运行 PHP——客户端完全不知道PHP 去过那里。每次点击 Previous 按钮,它的 href 属性仍然是 javascript:showProject(1,3).

你有两个选择;也就是说,您可以返回到服务器并让它在您单击下一个/上一个按钮时重新呈现页面,方法是将这些变量作为参数包含到您的页面中,例如,从 URL 和 link 像这样:

$currProj = ( $_REQUEST['currProj'] ? $_REQUEST['currProj'] : 1 );
...
<a class="btn-previous" href="<?php echo '[your_url_here]?currProj=' . $prevID ?>">

但是,您似乎有兴趣在不再次 ping 服务器的情况下执行此操作。在这种情况下,您需要在 javascript 中存储、引用和更新这些变量。可能有上千种方法可以做到这一点;您似乎想要做的事情的结束是让您的 showProject 函数不带任何参数,而是根据当前项目的价值找出它需要做什么,比如

var currProj = <?php echo $currProj; ?>; // this initializes the JS variable currProj from whatever it is in PHP when the server sends the page contents
var countposts = <?php echo $countposts; ?>; // initialize this too
var showPrevProject = function showPrevProject() { 
  // hide the current project using jQuery; assumes the DOM element you want to hide is given ID #project-[currProj]
  $('#project-' + currProj).hide();

  // Update the current project variable in JS; scope should update globally
  currProj = currProj - 1;
  if (currProj === 0) { currProj = countposts; } 

  // Now show that element
  $('#project-' + currProj).show();
}

然后在您的 link 中您可以根据需要使用 showNextProjectshowPrevProject

不过,更一般地说,最好将您的 javascript 作为一个单独的文件并注册事件处理程序来处理此类事情。我还建议查看 jQuery,这是一个功能强大的库,可以大大简化访问和操作 DOM 元素的过程。